Enhance documentation with new features: added dark/light/system theme support, instructions page, and application catalog. Updated API and domain model for app management and automatic migrations on startup. Improved frontend structure with new routes and features for user instructions and app management.
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
using PnvPanel.Api.Common;
|
||||
using PnvPanel.Application.Activation;
|
||||
using PnvPanel.Application.Admin.Activation;
|
||||
using PnvPanel.Application.Common.Messaging;
|
||||
using PnvPanel.Domain.Activation;
|
||||
using PnvPanel.Infrastructure.Identity;
|
||||
|
||||
namespace PnvPanel.Api.Endpoints;
|
||||
|
||||
public static class ActivationEndpoints
|
||||
{
|
||||
public static IEndpointRouteBuilder MapActivationEndpoints(this IEndpointRouteBuilder app)
|
||||
{
|
||||
var user = app.MapGroup("/api/activation").WithTags("Activation").RequireAuthorization();
|
||||
user.MapGet("/status", GetStatus);
|
||||
user.MapPost("/request", RequestActivation);
|
||||
|
||||
var admin = app.MapGroup("/api/admin/activation-requests")
|
||||
.WithTags("Admin.Activation")
|
||||
.RequireAuthorization(policy => policy.RequireRole(RoleNames.Admin));
|
||||
|
||||
admin.MapGet("", ListRequests);
|
||||
admin.MapPost("/{id:guid}/approve", Approve);
|
||||
admin.MapPost("/{id:guid}/reject", Reject);
|
||||
|
||||
return app;
|
||||
}
|
||||
|
||||
private static async Task<IResult> GetStatus(ISender sender, CancellationToken cancellationToken)
|
||||
{
|
||||
var result = await sender.Send(new GetActivationStatusQuery(), cancellationToken);
|
||||
return result.ToHttpResult();
|
||||
}
|
||||
|
||||
private static async Task<IResult> RequestActivation(RequestActivationCommand command, ISender sender, CancellationToken cancellationToken)
|
||||
{
|
||||
var result = await sender.Send(command, cancellationToken);
|
||||
return result.ToHttpResult();
|
||||
}
|
||||
|
||||
private static async Task<IResult> ListRequests(
|
||||
[AsParameters] ListActivationRequestsRequest request, ISender sender, CancellationToken cancellationToken)
|
||||
{
|
||||
var query = new ListActivationRequestsQuery(request.StatusFilter, request.Page, request.PageSize);
|
||||
var result = await sender.Send(query, cancellationToken);
|
||||
return result.ToHttpResult();
|
||||
}
|
||||
|
||||
private static async Task<IResult> Approve(Guid id, ISender sender, CancellationToken cancellationToken)
|
||||
{
|
||||
var result = await sender.Send(new ApproveActivationCommand(id), cancellationToken);
|
||||
return result.ToHttpResult();
|
||||
}
|
||||
|
||||
private static async Task<IResult> Reject(
|
||||
Guid id, RejectActivationBody body, ISender sender, CancellationToken cancellationToken)
|
||||
{
|
||||
var result = await sender.Send(new RejectActivationCommand(id, body.Reason), cancellationToken);
|
||||
return result.ToHttpResult();
|
||||
}
|
||||
}
|
||||
|
||||
public sealed record ListActivationRequestsRequest(ActivationStatus? StatusFilter, int Page = 1, int PageSize = 20);
|
||||
|
||||
public sealed record RejectActivationBody(string? Reason);
|
||||
Reference in New Issue
Block a user