From 5407c7db553fb287112b624429a7acca2d54648a Mon Sep 17 00:00:00 2001 From: Chris McInnes Date: Wed, 1 Apr 2026 11:11:19 +1030 Subject: [PATCH] Replace api with controller instead of minimalapi --- Emergence.api/Controllers/TenantController.cs | 24 ++++++++++++ Emergence.api/Emergence.api.csproj | 1 + Emergence.api/Emergence.api.http | 12 ++---- Emergence.api/Endpoints/UserEndpoints.cs | 30 -------------- Emergence.api/Extensions/EndpointExtension.cs | 39 ------------------- Emergence.api/Interfaces/IEndpoint.cs | 7 ---- Emergence.api/Program.cs | 18 +++++---- Emergence.api/Properties/launchSettings.json | 4 +- Emergence.models/TenantModel.cs | 14 +++++++ Emergence.models/UserModel.cs | 13 ------- .../Extensions/ServiceBuilderExtension.cs | 3 +- Emergence.services/Interface/IService.cs | 4 +- .../Interface/ITenantService.cs | 8 ++++ Emergence.services/Interface/IUserService.cs | 11 ------ Emergence.services/Services/TenantService.cs | 29 ++++++++++++++ Emergence.services/Services/UserService.cs | 26 ------------- Emergence.slnx | 2 +- 17 files changed, 98 insertions(+), 147 deletions(-) create mode 100644 Emergence.api/Controllers/TenantController.cs delete mode 100644 Emergence.api/Endpoints/UserEndpoints.cs delete mode 100644 Emergence.api/Extensions/EndpointExtension.cs delete mode 100644 Emergence.api/Interfaces/IEndpoint.cs create mode 100644 Emergence.models/TenantModel.cs delete mode 100644 Emergence.models/UserModel.cs create mode 100644 Emergence.services/Interface/ITenantService.cs delete mode 100644 Emergence.services/Interface/IUserService.cs create mode 100644 Emergence.services/Services/TenantService.cs delete mode 100644 Emergence.services/Services/UserService.cs diff --git a/Emergence.api/Controllers/TenantController.cs b/Emergence.api/Controllers/TenantController.cs new file mode 100644 index 0000000..07f2504 --- /dev/null +++ b/Emergence.api/Controllers/TenantController.cs @@ -0,0 +1,24 @@ +using Microsoft.AspNetCore.Mvc; +using Emergence.models; +using Emergence.services.Interface; +using Microsoft.AspNetCore.Http.HttpResults; + +namespace Emergence.api.Controllers; + +[ApiController] +[Route("[controller]", Name = "Tenant", Order = 1)] +public class TenantController : ControllerBase +{ + private readonly ITenantService _tenantService; + public TenantController(ITenantService tenantService) + { + _tenantService = tenantService; + } + + [HttpGet(Name = "GetTenants"), ProducesResponseType(StatusCodes.Status200OK), ProducesResponseType(StatusCodes.Status404NotFound)] + public async Task>, NotFound>> GetAsync() + { + var tenants = await _tenantService.GetAllAsync(); + return tenants is IList result ? TypedResults.Ok(result) : TypedResults.NotFound(); + } +} diff --git a/Emergence.api/Emergence.api.csproj b/Emergence.api/Emergence.api.csproj index e00a355..e2d0283 100644 --- a/Emergence.api/Emergence.api.csproj +++ b/Emergence.api/Emergence.api.csproj @@ -8,6 +8,7 @@ + diff --git a/Emergence.api/Emergence.api.http b/Emergence.api/Emergence.api.http index 20f1a6b..d188f07 100644 --- a/Emergence.api/Emergence.api.http +++ b/Emergence.api/Emergence.api.http @@ -1,11 +1,7 @@ -@Emergence.api_HostAddress = http://localhost:5235 +@Emergence.api_HostAddress = http://localhost:5283 -GET {{Emergence.api_HostAddress}}/users/ +GET {{Emergence.api_HostAddress}}/tenant/ Accept: application/json + ### -GET {{Emergence.api_HostAddress}}/users/2 -Accept: application/json -### -GET {{Emergence.api_HostAddress}}/openapi/emergence.yaml -Accept: application/json -### \ No newline at end of file +GET {{Emergence.api_HostAddress}}/openapi/v1.json diff --git a/Emergence.api/Endpoints/UserEndpoints.cs b/Emergence.api/Endpoints/UserEndpoints.cs deleted file mode 100644 index a92ed08..0000000 --- a/Emergence.api/Endpoints/UserEndpoints.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Emergence.api.Interfaces; -using Emergence.models; -using Emergence.services.Interface; -using Microsoft.AspNetCore.Http.HttpResults; - -namespace Emergence.api.Endpoints; - -public class UserEndpoints : IEndpoint -{ - private readonly IUserService _userService; - - public UserEndpoints(IUserService userService) - { - _userService = userService; - } - - public void MapEndPoint(IEndpointRouteBuilder app) - { - var endpoints = app.MapGroup("/users") - .WithTags("User Items"); - - endpoints.MapGet("/", GetAll).Produces>(StatusCodes.Status200OK).Produces(StatusCodes.Status404NotFound).WithName("Get All Users"); - endpoints.MapGet("/{id}", GetById).Produces(StatusCodes.Status200OK).Produces(StatusCodes.Status404NotFound).WithName("Get User By Id"); - } - - public async Task>, NotFound>> GetAll() => - await _userService.GetAllAsync() is List result ? TypedResults.Ok(result) : TypedResults.NotFound(); - public async Task, NotFound>> GetById(int id) => - await _userService.GetByIdAsync(id) is UserModel result ? TypedResults.Ok(result) : TypedResults.NotFound(); -} diff --git a/Emergence.api/Extensions/EndpointExtension.cs b/Emergence.api/Extensions/EndpointExtension.cs deleted file mode 100644 index 714ddc5..0000000 --- a/Emergence.api/Extensions/EndpointExtension.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Emergence.api.Interfaces; -using Microsoft.Extensions.DependencyInjection.Extensions; -using System.Reflection; - -namespace Emergence.api.Extensions; - -public static class EndpointExtension -{ - public static IServiceCollection AddEndpoints(this IServiceCollection services, Assembly assembly) - { - // Find all classes that implement IEndpoint and register them for DI - ServiceDescriptor[] serviceDescriptors = assembly - .DefinedTypes - .Where(type => type is { IsAbstract: false, IsInterface: false } && - type.IsAssignableTo(typeof(IEndpoint))) - .Select(type => ServiceDescriptor.Transient(typeof(IEndpoint), type)) - .ToArray(); - - services.TryAddEnumerable(serviceDescriptors); - - return services; - } - - public static IApplicationBuilder MapEndpoints(this WebApplication app, RouteGroupBuilder? routeGroupBuilder = null) - { - IEnumerable endpoints = app.Services - .GetRequiredService>(); - - IEndpointRouteBuilder builder = - routeGroupBuilder is null ? app : routeGroupBuilder; - - foreach (IEndpoint endpoint in endpoints) - { - endpoint.MapEndPoint(builder); - } - - return app; - } -} diff --git a/Emergence.api/Interfaces/IEndpoint.cs b/Emergence.api/Interfaces/IEndpoint.cs deleted file mode 100644 index 4584542..0000000 --- a/Emergence.api/Interfaces/IEndpoint.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Emergence.api.Interfaces -{ - public interface IEndpoint - { - void MapEndPoint(IEndpointRouteBuilder app); - } -} diff --git a/Emergence.api/Program.cs b/Emergence.api/Program.cs index ae644fc..6438d55 100644 --- a/Emergence.api/Program.cs +++ b/Emergence.api/Program.cs @@ -1,22 +1,26 @@ -using Emergence.api.Extensions; using Emergence.services.Extensions; var builder = WebApplication.CreateBuilder(args); // Add services to the container. +builder.Services.AddEmergenceServices(); + +builder.Services.AddControllers(); // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi builder.Services.AddOpenApi(); -builder.Services.AddServices(); -builder.Services.AddEndpoints(typeof(Program).Assembly); var app = builder.Build(); - -app.UseHttpsRedirection(); -app.MapEndpoints(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { - app.MapOpenApi("/openapi/emergence.yaml"); + app.MapOpenApi(); } + +app.UseHttpsRedirection(); + +app.UseAuthorization(); + +app.MapControllers(); + app.Run(); diff --git a/Emergence.api/Properties/launchSettings.json b/Emergence.api/Properties/launchSettings.json index 9d92552..8bdfc6c 100644 --- a/Emergence.api/Properties/launchSettings.json +++ b/Emergence.api/Properties/launchSettings.json @@ -5,7 +5,7 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": false, - "applicationUrl": "http://localhost:5235", + "applicationUrl": "http://localhost:5283", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } @@ -14,7 +14,7 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": false, - "applicationUrl": "https://localhost:7228;http://localhost:5235", + "applicationUrl": "https://localhost:7284;http://localhost:5283", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/Emergence.models/TenantModel.cs b/Emergence.models/TenantModel.cs new file mode 100644 index 0000000..e3c9da5 --- /dev/null +++ b/Emergence.models/TenantModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Emergence.models +{ + public class TenantModel + { + public Guid Id = new Guid(); + public string TenantCode = string.Empty; + public string CompanyName = string.Empty; + public bool IsInactive = false; + } +} diff --git a/Emergence.models/UserModel.cs b/Emergence.models/UserModel.cs deleted file mode 100644 index bdfec25..0000000 --- a/Emergence.models/UserModel.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Emergence.models -{ - public class UserModel - { - public int Id { get; set; } - public string Username { get; set; } - public string Email { get; set; } - } -} diff --git a/Emergence.services/Extensions/ServiceBuilderExtension.cs b/Emergence.services/Extensions/ServiceBuilderExtension.cs index cbc68ff..ab39bde 100644 --- a/Emergence.services/Extensions/ServiceBuilderExtension.cs +++ b/Emergence.services/Extensions/ServiceBuilderExtension.cs @@ -9,9 +9,10 @@ namespace Emergence.services.Extensions { public static class ServiceBuilderExtension { - public static IServiceCollection AddServices(this IServiceCollection services) + public static IServiceCollection AddEmergenceServices(this IServiceCollection services) { services = services.AddTransient(); + services = services.AddTransient(); return services; } diff --git a/Emergence.services/Interface/IService.cs b/Emergence.services/Interface/IService.cs index a59ffb4..6b36ff4 100644 --- a/Emergence.services/Interface/IService.cs +++ b/Emergence.services/Interface/IService.cs @@ -4,9 +4,9 @@ using System.Text; namespace Emergence.services.Interface { - public interface IService where T : class + public interface IService where T : class { public Task> GetAllAsync(); - public Task GetByIdAsync(int id); + public Task GetByIdAsync(I id); } } diff --git a/Emergence.services/Interface/ITenantService.cs b/Emergence.services/Interface/ITenantService.cs new file mode 100644 index 0000000..f4903b2 --- /dev/null +++ b/Emergence.services/Interface/ITenantService.cs @@ -0,0 +1,8 @@ +using Emergence.models; + +namespace Emergence.services.Interface +{ + public interface ITenantService : IService + { + } +} diff --git a/Emergence.services/Interface/IUserService.cs b/Emergence.services/Interface/IUserService.cs deleted file mode 100644 index da13160..0000000 --- a/Emergence.services/Interface/IUserService.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Emergence.models; -using System; -using System.Collections.Generic; -using System.Text; - -namespace Emergence.services.Interface -{ - public interface IUserService : IService - { - } -} diff --git a/Emergence.services/Services/TenantService.cs b/Emergence.services/Services/TenantService.cs new file mode 100644 index 0000000..47e6e42 --- /dev/null +++ b/Emergence.services/Services/TenantService.cs @@ -0,0 +1,29 @@ +using Emergence.models; +using Emergence.services.Interface; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Emergence.services.Services; + +public class TenantService : ITenantService +{ + private List testList = [ + new TenantModel {TenantCode = "FJP", CompanyName ="Fred J Potter" }, + new TenantModel {TenantCode = "JAZZ", CompanyName ="Jazzbond" }, + new TenantModel {TenantCode = "TDT", CompanyName ="The Digital Tailor" }, + new TenantModel {TenantCode = "HBAS", CompanyName ="Hicks Building and Asbestos Services" }, + ]; + + public async Task> GetAllAsync() + { + return testList; + } + + public async Task GetByIdAsync(Guid id) + { +#pragma warning disable CS8603 // Possible null reference return. + return testList.FirstOrDefault(f => f.Id == id); +#pragma warning restore CS8603 // Possible null reference return. + } +} diff --git a/Emergence.services/Services/UserService.cs b/Emergence.services/Services/UserService.cs deleted file mode 100644 index a5a1a71..0000000 --- a/Emergence.services/Services/UserService.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Emergence.models; -using Emergence.services.Interface; - -namespace Emergence.services.Services; - -public class UserService : IUserService -{ - private List testList = [ - new UserModel {Id = 1, Username = "chris", Email ="chris@fjp.com.au" }, - new UserModel {Id = 2, Username = "kim", Email ="kim@fjp.com.au" }, - new UserModel {Id = 3, Username = "amanda", Email ="amanda@fjp.com.au" }, - new UserModel {Id = 4, Username = "reception", Email ="reception@fjp.com.au" }, - ]; - - public async Task> GetAllAsync() - { - return testList; - } - - public async Task GetByIdAsync(int id) - { -#pragma warning disable CS8603 // Possible null reference return. - return testList.FirstOrDefault(f => f.Id == id); -#pragma warning restore CS8603 // Possible null reference return. - } -} diff --git a/Emergence.slnx b/Emergence.slnx index 3469523..cce215e 100644 --- a/Emergence.slnx +++ b/Emergence.slnx @@ -1,5 +1,5 @@ - +