Cucumber/Cloud/Program.cs

130 lines
4.0 KiB
C#
Raw Normal View History

2024-10-28 02:09:55 +04:00
using Cloud;
using Microsoft.EntityFrameworkCore;
2024-10-28 18:39:13 +04:00
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;
using FluentValidation;
using FluentValidation.AspNetCore;
using Cloud.Validation;
2024-11-10 13:35:23 +04:00
using StackExchange.Redis;
using Cloud.Services.Broker.Implement.Kafka;
using Cloud.Services.Broker;
2024-11-13 15:24:47 +04:00
using Cloud.Services;
2024-10-28 02:09:55 +04:00
2024-10-28 00:25:51 +04:00
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddSingleton<IBrokerService, KafkaService>();
2024-11-10 13:35:23 +04:00
//Redis configuration
builder.Services.AddSingleton<IConnectionMultiplexer>(sp =>
{
var configuration = ConfigurationOptions.Parse("localhost:6379");
return ConnectionMultiplexer.Connect(configuration);
});
2024-11-13 15:24:47 +04:00
//Kafka producer service
builder.Services.AddSingleton<ProducerService, ProducerService>();
//Kafka consumer service
builder.Services.AddSingleton<ConsumerService, ConsumerService>();
//Add the BackgroundWorkerService
builder.Services.AddHostedService<BackgroundWorkerService>();
2024-11-10 13:35:23 +04:00
//Jwt configuration
2024-10-28 18:39:13 +04:00
var jwtIssuer = builder.Configuration.GetSection("Jwt:Issuer").Get<string>();
var jwtKey = builder.Configuration.GetSection("Jwt:Key").Get<string>();
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = jwtIssuer,
ValidAudience = jwtIssuer,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtKey))
};
});
2024-10-28 02:09:55 +04:00
builder.Services.AddDbContext<ApplicationContext>(options =>
options.UseNpgsql("Host=localhost;Port=5438;Database=main_database;Username=postgres;Password=12345"));
// Настройка CORS
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowFrontendLocalhost", builder =>
{
builder.WithOrigins("http://localhost:3000") // фронтенд
.AllowAnyHeader()
.AllowAnyMethod();
});
});
2024-10-28 00:25:51 +04:00
builder.Services.AddControllers();
2024-10-28 18:39:13 +04:00
builder.Services.AddFluentValidationAutoValidation();
builder.Services.AddFluentValidationClientsideAdapters();
builder.Services.AddValidatorsFromAssemblyContaining<LoginValidator>();
builder.Services.AddValidatorsFromAssemblyContaining<RegisterValidator>();
2024-10-29 00:38:46 +04:00
builder.Services.AddValidatorsFromAssemblyContaining<FarmValidator>();
2024-11-13 15:24:47 +04:00
builder.Services.AddValidatorsFromAssemblyContaining<ValveValidator>();
2024-10-28 18:39:13 +04:00
2024-10-28 00:25:51 +04:00
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
2024-10-28 18:39:13 +04:00
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "Cloud API", Version = "v1" });
c.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme
{
Description = "Введите ваш Bearer токен",
Name = "Authorization",
In = Microsoft.OpenApi.Models.ParameterLocation.Header,
Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey
});
c.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement
{
{
new Microsoft.OpenApi.Models.OpenApiSecurityScheme
{
Reference = new Microsoft.OpenApi.Models.OpenApiReference
{
Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
new string[] {}
}
});
});
2024-10-28 00:25:51 +04:00
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
2024-10-28 18:39:13 +04:00
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Cloud API V1");
c.RoutePrefix = string.Empty;
});
2024-10-28 00:25:51 +04:00
}
app.UseHttpsRedirection();
// Включение CORS
app.UseCors("AllowFrontendLocalhost");
2024-10-28 18:39:13 +04:00
app.UseAuthentication();
2024-10-28 00:25:51 +04:00
app.UseAuthorization();
app.MapControllers();
app.Run();