Skip to content

Commit

Permalink
Fix OpenApi Document
Browse files Browse the repository at this point in the history
  • Loading branch information
ubhaya committed Jan 26, 2024
1 parent 0478306 commit 8742d48
Show file tree
Hide file tree
Showing 32 changed files with 1,111 additions and 303 deletions.
1,153 changes: 934 additions & 219 deletions src/content/CleanArchitecture.Maui/src/MobileUi/Mobile/ApiClients.g.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ private static void AddHttpClient(this IServiceCollection services, IConfigurati
.CreateClient("CleanArchitecture.Maui.MobileUi"));

services.Scan(scan => scan
.FromAssemblyOf<IClient>()
.FromAssemblyOf<IWeatherForecastClient>()
.AddClasses()
.AsImplementedInterfaces()
.WithScopedLifetime());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ namespace CleanArchitecture.Maui.MobileUi.Mobile.ViewModels;

public sealed partial class WeatherForecastViewModel : BaseViewModel
{
private readonly IClient _client;
private readonly IWeatherForecastClient _client;

[ObservableProperty] private IEnumerable<WeatherForecast>? _weatherForecasts;

public WeatherForecastViewModel(IClient client)
public WeatherForecastViewModel(IWeatherForecastClient client)
{
_client = client;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ public static void RegisterCleanArchitectureServices(this WebApplicationBuilder
return isAssignable && concreteType;
})
.Select(Activator.CreateInstance)
.Cast<IServiceInstaller>();
.Cast<IServiceInstaller>()
.OrderBy(installer => installer.ServiceOrder);

foreach (var installer in installers)
{
installer.InstallerService(builder.Services,builder.Configuration);
Expand All @@ -25,7 +27,7 @@ public static void RegisterCleanArchitectureServices(this WebApplicationBuilder
public static void UseCleanArchitectureMiddleware(this WebApplication app)
{
var installerType = typeof(IMiddlewareInstaller);

var installers = installerType
.Assembly.ExportedTypes
.Where(t =>
Expand All @@ -35,7 +37,9 @@ public static void UseCleanArchitectureMiddleware(this WebApplication app)
return isAssignable && concreteType;
})
.Select(Activator.CreateInstance)
.Cast<IMiddlewareInstaller>();
.Cast<IMiddlewareInstaller>()
.OrderBy(installer => installer.MiddleWareOrder);

foreach (var installer in installers)
{
installer.InstallMiddleWare(app);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.DependencyInjection;

public sealed class AspCoreServices : IServiceInstaller, IMiddlewareInstaller
{
public int ServiceOrder => 0;

public void InstallerService(IServiceCollection services, IConfiguration configuration)
{
services.AddEndpointsApiExplorer();
Expand Down Expand Up @@ -42,6 +44,8 @@ public void InstallerService(IServiceCollection services, IConfiguration configu
services.AddScoped<ICurrentUser, CurrentUser>();
}

public int MiddleWareOrder => 0;

public void InstallMiddleWare(WebApplication app)
{
if (app.Environment.IsDevelopment())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
using static System.Int32;

namespace CleanArchitecture.Maui.MobileUi.WebApi.DependencyInjection;

public class CustomServices : IServiceInstaller, IMiddlewareInstaller
{
public int ServiceOrder => MaxValue;

public void InstallerService(IServiceCollection services, IConfiguration configuration)
{
}

public int MiddleWareOrder => MaxValue;

public void InstallMiddleWare(WebApplication app)
{
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.DependencyInjection;

public class EndpointDefinitions : IServiceInstaller, IMiddlewareInstaller
{
public int ServiceOrder => 2;

public void InstallerService(IServiceCollection services, IConfiguration configuration)
{
services.AddEndpointDefinitions(typeof(WeatherForecastEndpoint));
}

public int MiddleWareOrder => 2;

public void InstallMiddleWare(WebApplication app)
{
app.UseEndpointDefinition();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,16 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.DependencyInjection;

public class HealthServices : IServiceInstaller, IMiddlewareInstaller
{
public int ServiceOrder => 3;

public void InstallerService(IServiceCollection services, IConfiguration configuration)
{
services.AddHealthChecks()
.AddDbContextCheck<ApplicationDbContext>();
}

public int MiddleWareOrder => 3;

public void InstallMiddleWare(WebApplication app)
{
app.MapHealthChecks("/health");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.DependencyInjection;

public interface IMiddlewareInstaller
{
int MiddleWareOrder { get; }
void InstallMiddleWare(WebApplication app);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.DependencyInjection;

public interface IServiceInstaller
{
int ServiceOrder { get; }
void InstallerService(IServiceCollection services, IConfiguration configuration);
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
using CleanArchitecture.Maui.MobileUi.WebApi.Options;
using NSwag;
using NSwag.Generation.Processors.Security;

namespace CleanArchitecture.Maui.MobileUi.WebApi.DependencyInjection;

public class OpenApiServices : IServiceInstaller, IMiddlewareInstaller
{
public int ServiceOrder => 3;

public void InstallerService(IServiceCollection services, IConfiguration configuration)
{
services.AddOpenApiDocument(configure =>
Expand All @@ -18,12 +21,14 @@ public void InstallerService(IServiceCollection services, IConfiguration configu
In = OpenApiSecurityApiKeyLocation.Header,
Description = "Type into the textbox: Bearer {your JWT token}."
});
configure.OperationProcessors.Add(
new AspNetCoreOperationSecurityScopeProcessor("JWT"));
});
}

public int MiddleWareOrder => 3;

public void InstallMiddleWare(WebApplication app)
{
app.UseOpenApi();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.DependencyInjection;

public class ProjectServices : IServiceInstaller
{
public int ServiceOrder => 3;

public void InstallerService(IServiceCollection services, IConfiguration configuration)
{
services.AddApplicationService();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.Endpoints.Admin.AccessControl;

public sealed class GetConfigurationEndpoint : IEndpointsDefinition
{
public void DefineEndpoints(WebApplication app)
public void DefineEndpoints(IEndpointRouteBuilder app)
{
app.MapGet("api/Admin/AccessControl",
GetConfiguration)
.RequireAuthorization(Permissions.ViewAccessControl)
.WithName("GetConfiguration")
.WithOpenApi();
.WithName("AccessControl_GetConfiguration")
.WithGroupName("AccessControl")
.WithTags(["AccessControl"]);
}

private static async Task<AccessControlVm> GetConfiguration(IMediator mediator, CancellationToken cancellationToken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.Endpoints.Admin.AccessControl;

public sealed class UpdateConfigurationEndpoint : IEndpointsDefinition
{
public void DefineEndpoints(WebApplication app)
public void DefineEndpoints(IEndpointRouteBuilder app)
{
app.MapPut("api/Admin/AccessControl", PutUpdateConfiguration)
.Produces(StatusCodes.Status204NoContent)
.RequireAuthorization(Permissions.ConfigureAccessControl)
.WithName("UpdateConfiguration")
.WithOpenApi();
.WithName("AccessControl_UpdateConfiguration")
.WithGroupName("Admin")
.WithTags(["AccessControl"]);
}

private static async Task<IResult> PutUpdateConfiguration(ISender mediator, [FromBody] RoleDto updatedRole,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.Endpoints.Admin.Roles;

public sealed class DeleteRoleEndpoint : IEndpointsDefinition
{
public void DefineEndpoints(WebApplication app)
public void DefineEndpoints(IEndpointRouteBuilder app)
{
app.MapDelete("api/Admin/Roles/{id}", DeleteRole)
.RequireAuthorization(Permissions.ManageRoles)
.Produces(StatusCodes.Status204NoContent)
.Produces(StatusCodes.Status404NotFound)
.WithName("Delete Role")
.WithOpenApi();
.WithName("Roles_DeleteRole")
.WithGroupName("Roles")
.WithTags(["Roles"]);
}

private static async Task<IResult> DeleteRole(string id, ISender sender, CancellationToken cancellationToken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.Endpoints.Admin.Roles;

public sealed class GetRolesEndpoint : IEndpointsDefinition
{
public void DefineEndpoints(WebApplication app)
public void DefineEndpoints(IEndpointRouteBuilder app)
{
app.MapGet("api/Admin/Roles", GetRoles)
.RequireAuthorization(Permissions.ViewRoles)
.WithName("Get Roles")
.WithOpenApi();
.WithName("Roles_GetRoles")
.WithGroupName("Roles")
.WithTags(["Roles"]);
}

private static async Task<RolesVm> GetRoles(ISender sender, CancellationToken cancellationToken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.Endpoints.Admin.Roles;

public sealed class PostRoleEndpoint : IEndpointsDefinition
{
public void DefineEndpoints(WebApplication app)
public void DefineEndpoints(IEndpointRouteBuilder app)
{
app.MapPost("api/Admin/Roles", PostRole)
.RequireAuthorization(Permissions.ManageRoles)
.Produces(StatusCodes.Status204NoContent)
.WithName("Post Roles")
.WithOpenApi();
.WithName("Roles_PostRoles")
.WithGroupName("Roles")
.WithTags(["Roles"]);
}

private static async Task<IResult> PostRole([FromBody] RoleDto newRole, ISender sender,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.Endpoints.Admin.Roles;

public sealed class PutRoleEndpoint : IEndpointsDefinition
{
public void DefineEndpoints(WebApplication app)
public void DefineEndpoints(IEndpointRouteBuilder app)
{
app.MapPut("api/Admin/Roles/{id}", PutRole)
.RequireAuthorization(Permissions.ManageRoles)
.Produces(StatusCodes.Status204NoContent)
.Produces(StatusCodes.Status400BadRequest)
.WithName("Put Roles")
.WithOpenApi();
.WithName("Roles_PutRoles")
.WithGroupName("Roles")
.WithTags(["Roles"]);
}

private static async Task<IResult> PutRole([FromRoute] string id, [FromBody] RoleDto updatedRole, ISender sender,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.Endpoints.Admin.Users;

public sealed class GetUserEndpoint : IEndpointsDefinition
{
public void DefineEndpoints(WebApplication app)
public void DefineEndpoints(IEndpointRouteBuilder app)
{
app.MapGet("api/Admin/Users/{id}", GetUser)
.RequireAuthorization(Permissions.ViewUsers)
.WithName("Get User")
.WithOpenApi();
.WithName("Users_GetUser")
.WithGroupName("Users")
.WithTags(["Users"]);
}

private static async Task<UserDetailsVm> GetUser(string id, ISender sender, CancellationToken cancellationToken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.Endpoints.Admin.Users;

public sealed class GetUsersEndpoint : IEndpointsDefinition
{
public void DefineEndpoints(WebApplication app)
public void DefineEndpoints(IEndpointRouteBuilder app)
{
app.MapGet("api/Admin/Users", GetUser)
.RequireAuthorization(Permissions.ViewUsers | Permissions.ManageUsers);
.RequireAuthorization(Permissions.ViewUsers | Permissions.ManageUsers)
.WithName("Users_GetUsers")
.WithGroupName("Users")
.WithTags(["Users"]);
}

private async Task<UsersVm> GetUser(ISender sender,CancellationToken cancellationToken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.Endpoints.Admin.Users;

public sealed class PutUserEndpoint : IEndpointsDefinition
{
public void DefineEndpoints(WebApplication app)
public void DefineEndpoints(IEndpointRouteBuilder app)
{
app.MapPut("api/Admin/Users/{id}", PutUser)
.RequireAuthorization(Permissions.ManageUsers)
.Produces(StatusCodes.Status204NoContent)
.Produces(StatusCodes.Status400BadRequest)
.WithName("Put User")
.WithOpenApi();
.WithName("Users_PutUser")
.WithGroupName("Users")
.WithTags(["Users"]);
}

private async Task<IResult> PutUser([FromRoute] string id, [FromBody] UserDto updatedUser, ISender sender,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.Endpoints;

public interface IEndpointsDefinition
{
void DefineEndpoints(WebApplication app);
void DefineEndpoints(IEndpointRouteBuilder endpoint);
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.Endpoints.TodoItems;

public sealed class DeleteTodoItemEndpoint : IEndpointsDefinition
{
public void DefineEndpoints(WebApplication app)
public void DefineEndpoints(IEndpointRouteBuilder app)
{
app.MapDelete("api/TodoItems/{id:int}", DeleteTodoItem)
.RequireAuthorization(Permissions.Todo)
.Produces(StatusCodes.Status204NoContent)
.WithName("Delete Todo Item")
.WithOpenApi();
.WithName("TodoItems_DeleteTodoItem")
.WithGroupName("TodoItems")
.WithTags(["TodoItems"]);
}

private static async Task<IResult> DeleteTodoItem([FromRoute] int id, ISender sender, CancellationToken cancellationToken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ namespace CleanArchitecture.Maui.MobileUi.WebApi.Endpoints.TodoItems;

public sealed class PostTodoItemEndpoint : IEndpointsDefinition
{
public void DefineEndpoints(WebApplication app)
public void DefineEndpoints(IEndpointRouteBuilder app)
{
app.MapPost("api/TodoItems", PostTodoItem)
.RequireAuthorization(Permissions.Todo)
.WithName("Post Todo Item")
.WithOpenApi();
.WithName("TodoItems_PostTodoItem")
.WithGroupName("TodoItems")
.WithTags(["TodoItems"]);
}

private async Task<int> PostTodoItem(CreateTodoItemRequest request, ISender sender, CancellationToken cancellationToken)
Expand Down
Loading

0 comments on commit 8742d48

Please sign in to comment.