Update to dotnet 9.0, add user roles, MatchStats and OpenApi/Scalar in dev
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Security.Claims;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using LaDOSE.Business.Interface;
|
||||
@@ -25,6 +26,9 @@ using Result = LaDOSE.Entity.Challonge.Result;
|
||||
using LaDOSE.Entity.BotEvent;
|
||||
using Microsoft.EntityFrameworkCore.Storage;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
#if DEBUG
|
||||
using Scalar.AspNetCore;
|
||||
#endif
|
||||
|
||||
namespace LaDOSE.Api
|
||||
{
|
||||
@@ -55,11 +59,21 @@ namespace LaDOSE.Api
|
||||
}
|
||||
|
||||
services.AddCors();
|
||||
services.AddMvc().AddNewtonsoftJson(x =>
|
||||
services.AddMvc(options =>
|
||||
{
|
||||
#if DEBUG
|
||||
// Make the attribute-routed controllers visible to ApiExplorer so the
|
||||
// OpenAPI document is actually populated. See ApiExplorerVisibilityConvention.
|
||||
options.Conventions.Add(new ApiExplorerVisibilityConvention());
|
||||
#endif
|
||||
}).AddNewtonsoftJson(x =>
|
||||
{
|
||||
x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
|
||||
x.SerializerSettings.MaxDepth= 4;
|
||||
});
|
||||
#if DEBUG
|
||||
services.AddOpenApi();
|
||||
#endif
|
||||
// services.AddDbContextPool<LaDOSEDbContext>( // replace "YourDbContext" with the class name of your DbContext
|
||||
//
|
||||
// options => options.UseMySql($"Server={MySqlServer};Database={MySqlDatabase};User={MySqlUser};Password={MySqlPassword};", // replace with your Connection String
|
||||
@@ -92,6 +106,18 @@ namespace LaDOSE.Api
|
||||
{
|
||||
// return unauthorized if user no longer exists
|
||||
context.Fail("Unauthorized");
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
// Roles are attached here, from the database, rather than being
|
||||
// signed into the token: a promotion or demotion then applies to
|
||||
// the caller's very next request instead of waiting 16 minutes.
|
||||
if (context.Principal.Identity is ClaimsIdentity identity)
|
||||
{
|
||||
foreach (var role in user.Names())
|
||||
{
|
||||
identity.AddClaim(new Claim(identity.RoleClaimType, role));
|
||||
}
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
@@ -130,6 +156,13 @@ namespace LaDOSE.Api
|
||||
cfg.CreateMapTwoWay<Game, LaDOSE.DTO.GameDTO>();
|
||||
cfg.CreateMapTwoWay<Todo, LaDOSE.DTO.TodoDTO>();
|
||||
|
||||
// Match statistics: plain POCO aggregates computed by StatisticsService,
|
||||
// mapped by name (same pattern as TournamentsResult above).
|
||||
cfg.CreateMap<MatchStats, LaDOSE.DTO.MatchStatsDTO>();
|
||||
cfg.CreateMap<MatchCoverage, LaDOSE.DTO.MatchCoverageDTO>();
|
||||
cfg.CreateMap<PlayerMatchStats, LaDOSE.DTO.PlayerMatchStatsDTO>();
|
||||
cfg.CreateMap<HeadToHead, LaDOSE.DTO.HeadToHeadDTO>();
|
||||
|
||||
});
|
||||
IMapper mapper = mapperConfig.CreateMapper();
|
||||
services.AddSingleton(mapper);
|
||||
@@ -149,6 +182,7 @@ namespace LaDOSE.Api
|
||||
services.AddScoped<IBotEventService, BotEventService>();
|
||||
|
||||
services.AddScoped<IPlayerService, PlayerService>();
|
||||
services.AddScoped<IStatisticsService, StatisticsService>();
|
||||
services.AddTransient<IChallongeProvider>(p => new ChallongeProvider( p.GetRequiredService<IGameService>(),
|
||||
p.GetRequiredService<IEventService>(),
|
||||
p.GetRequiredService<IPlayerService>(),
|
||||
@@ -185,7 +219,17 @@ namespace LaDOSE.Api
|
||||
app.UseRouting();
|
||||
app.UseAuthentication();
|
||||
app.UseAuthorization();
|
||||
app.UseEndpoints(x => x.MapControllers());
|
||||
app.UseEndpoints(x =>
|
||||
{
|
||||
x.MapControllers();
|
||||
#if DEBUG
|
||||
if (env.IsDevelopment())
|
||||
{
|
||||
x.MapOpenApi();
|
||||
x.MapScalarApiReference();
|
||||
}
|
||||
#endif
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user