chore: init commit from GitHub
Some checks are pending
Deploy / update (push) Waiting to run
Build Project .NET / build (push) Waiting to run

This commit is contained in:
Lisoveliy
2025-05-12 19:44:33 +03:00
parent 11a3f40596
commit aebe654c38
107 changed files with 18953 additions and 403 deletions

117
SWAD.API/Startup.cs Normal file
View File

@@ -0,0 +1,117 @@
using System.Reflection;
using Microsoft.Extensions.Options;
using Microsoft.OpenApi.Models;
using StackExchange.Redis;
using SWAD.API.Middlewares;
using SWAD.API.Models.Config;
using SWAD.API.Models.Config.ApiServices;
using SWAD.API.Services.Links;
using SWAD.API.Services.MusicAPI.Api;
using SWAD.API.Services.MusicAPI.Auth;
namespace SWAD.API;
public static class Startup
{
private static ServicesEndpointsConfig? _servicesEndpointsConfig;
public static void Configure(WebApplicationBuilder builder)
{
SetConfigurations(builder);
}
public static void ConfigureServices(IServiceCollection services)
{
SetServiceUsages(services);
SetCustomServices(services);
}
public static void ConfigureApplication(WebApplication app)
{
SetAppUsages(app);
SetAppMappings(app);
}
private static void SetConfigurations(WebApplicationBuilder builder)
{
//Json config setup
builder.Configuration.AddJsonFile("appsettings.json", false, true) //load base settings
.AddJsonFile("appsettings.local.json", true, true); //load local settings
builder.Services.Configure<ApiServicesConfig>
(builder.Configuration.GetSection(ApiServicesConfig.ConfigName));
builder.Services.Configure<ServicesEndpointsConfig>
(builder.Configuration.GetSection(ServicesEndpointsConfig.ConfigName));
//Get config for setup
_servicesEndpointsConfig = builder.Configuration
.GetSection(ServicesEndpointsConfig.ConfigName)
.Get<ServicesEndpointsConfig>();
}
private static void SetServiceUsages(IServiceCollection services)
{
services.AddProblemDetails();
services.AddControllers();
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new OpenApiInfo
{
Version = Assembly.GetExecutingAssembly().GetName().Version!.ToString(),
Title = "SWAD.API",
Description =
"Share With All, Dude - Platform for sharing music links from one music service to another for free!\n" +
"API Reference for SWAD.Front and for guys who trying to make themself stuff :)",
TermsOfService = new Uri("https://github.com/SpectruMTeamCode/SWAD/tree/main"),
Contact = new OpenApiContact
{
Name = "GitHub",
Url = new Uri("https://github.com/SpectruMTeamCode/SWAD/tree/main")
}
});
options.IncludeXmlComments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "doc.xml"));
options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
});
}
private static void SetCustomServices(IServiceCollection services)
{
//Custom services setup
//TODO read from config
services.AddSingleton(ConnectionMultiplexer.Connect(_servicesEndpointsConfig.Redis));
services.AddSingleton(p =>
p.GetService<ConnectionMultiplexer>()?.GetDatabase() ??
throw new NullReferenceException("Чёт с инжектом редиса не то"));
services.AddSingleton(p => ConnectionMultiplexer.Connect(_servicesEndpointsConfig.Redis));
services.AddSingleton(p => p.GetService<ConnectionMultiplexer>()!.GetDatabase());
services.AddSingleton<LinksService>();
//Register all IAPIService implementations
foreach (var service in ApiService.GetAllImplementations()) services.AddSingleton(typeof(ApiService), service);
//Register all AuthService implementations
foreach (var service in AbstractAuthService.GetAllImplementations())
services.AddSingleton(typeof(AbstractAuthService), service);
}
private static void SetAppUsages(WebApplication app)
{
app.UseMiddleware<ExceptionMiddleware>();
app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.InjectStylesheet("/swagger-ui/theme-flattop.css");
options.IndexStream = () => Assembly.GetEntryAssembly()!.GetManifestResourceStream("SWAD.API.index.html");
});
app.UseStaticFiles();
}
private static void SetAppMappings(WebApplication app)
{
app.MapControllers();
//Redirect to swagger
app.Map("/", () => { return Results.LocalRedirect("/swagger"); });
}
}