using Amazon.Runtime; using Amazon.S3; using FictionArchive.Common.Extensions; using FictionArchive.Service.FileService.Models; using FictionArchive.Service.FileService.Models.IntegrationEvents; using FictionArchive.Service.FileService.Services.EventHandlers; using FictionArchive.Service.Shared.Extensions; using FictionArchive.Service.Shared.Services.EventBus.Implementations; using Microsoft.Extensions.Options; namespace FictionArchive.Service.FileService; public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); builder.AddLocalAppsettings(); builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddHealthChecks(); #region Event Bus builder.Services.AddRabbitMQ(opt => { builder.Configuration.GetSection("RabbitMQ").Bind(opt); }) .Subscribe(); #endregion builder.Services.Configure(builder.Configuration.GetSection("ProxyConfiguration")); // Add S3 Client builder.Services.Configure(builder.Configuration.GetSection("S3")); builder.Services.AddSingleton(provider => { var config = provider.GetRequiredService>().Value; var s3Config = new AmazonS3Config { ServiceURL = config.Url, // Garage endpoint ForcePathStyle = true, // REQUIRED for Garage AuthenticationRegion = "garage" }; return new AmazonS3Client( new BasicAWSCredentials(config.AccessKey, config.SecretKey), s3Config); }); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.MapHealthChecks("/healthz"); app.MapControllers(); app.Run(); } }