diff --git a/SDG-Backend-Barracuda/Models/CardModel.cs b/SDG-Backend-Barracuda/Models/CardModel.cs index 25bed95..c0f8797 100644 --- a/SDG-Backend-Barracuda/Models/CardModel.cs +++ b/SDG-Backend-Barracuda/Models/CardModel.cs @@ -4,43 +4,66 @@ using Npgsql; namespace SDG_Backend_Barracuda.Models; public record Card(int Id, string Value); -public record CardInput(string Value); +public record CardInformation(string Value); -public interface ICardModel : IDatabaseModel +public interface ICardModel : IDatabaseModel { } -public class CardModel(NpgsqlDataSource dataSource) : ICardModel +public class CardModel(NpgsqlDataSource dataSource) : ICardModel, IEndpointRouteHandler { - public async Task> GetAllAsync() + public static void MapEndpoints(IEndpointRouteBuilder router) + { + var cardEndpoint = router.MapGroup("/card"); + + cardEndpoint.MapPost("/", async (CardInformation input, ICardModel model) => + { + var newCard = await model.Create(input); + return Results.Created($"/card/{newCard.Id}", newCard); + }); + + cardEndpoint.MapGet("/", async (ICardModel model) => + Results.Ok(await model.GetAll())); + + cardEndpoint.MapGet("/{id}", async (int id, ICardModel model) => + await model.GetById(id) is { } c ? Results.Ok(c) : Results.NotFound()); + + cardEndpoint.MapPut("/{id}", async (int id, CardInformation input, ICardModel model) => + await model.Update(id, input) is { } c ? Results.Ok(c) : Results.NotFound()); + + cardEndpoint.MapDelete("/{id}", async (int id, ICardModel model) => + await model.Delete(id) ? Results.NoContent() : Results.NotFound()); + } + + public async Task> GetAll() { await using var connection = await dataSource.OpenConnectionAsync(); var sql = """SELECT "Id", "Value" FROM "Card";"""; return await connection.QueryAsync(sql); } - public async Task GetByIdAsync(int id) + public async Task GetById(int id) { await using var connection = await dataSource.OpenConnectionAsync(); var sql = """SELECT "Id", "Value" FROM "Card" WHERE "Id" = @Id;"""; return await connection.QueryFirstOrDefaultAsync(sql, new { Id = id }); } - public async Task CreateAsync(CardInput input) + public async Task Create(CardInformation input) { await using var connection = await dataSource.OpenConnectionAsync(); var sql = """INSERT INTO "Card" ("Value") VALUES (@Value) RETURNING "Id", "Value";"""; return await connection.QuerySingleAsync(sql, input); } - public async Task UpdateAsync(int id, CardInput input) + public async Task Update(int id, CardInformation input) { await using var connection = await dataSource.OpenConnectionAsync(); var sql = """UPDATE "Card" SET "Value" = @Value WHERE "Id" = @Id RETURNING "Id", "Value";"""; return await connection.QueryFirstOrDefaultAsync(sql, new { Id = id, Value = input.Value }); } - public async Task DeleteAsync(int id) + public async Task Delete(int id) { await using var connection = await dataSource.OpenConnectionAsync(); var sql = """DELETE FROM "Card" WHERE "Id" = @Id;"""; diff --git a/SDG-Backend-Barracuda/Models/IDatabaseModel.cs b/SDG-Backend-Barracuda/Models/IDatabaseModel.cs index 2defbb4..7b6dd83 100644 --- a/SDG-Backend-Barracuda/Models/IDatabaseModel.cs +++ b/SDG-Backend-Barracuda/Models/IDatabaseModel.cs @@ -2,9 +2,9 @@ public interface IDatabaseModel { - Task> GetAllAsync(); - Task GetByIdAsync(int id); - Task CreateAsync(TInput input); - Task UpdateAsync(int id, TInput input); - Task DeleteAsync(int id); + Task> GetAll(); + Task GetById(int id); + Task Create(TInput input); + Task Update(int id, TInput input); + Task Delete(int id); } diff --git a/SDG-Backend-Barracuda/Models/IEndpointRouteHandler.cs b/SDG-Backend-Barracuda/Models/IEndpointRouteHandler.cs new file mode 100644 index 0000000..6bb0da5 --- /dev/null +++ b/SDG-Backend-Barracuda/Models/IEndpointRouteHandler.cs @@ -0,0 +1,6 @@ +namespace SDG_Backend_Barracuda.Models; + +public interface IEndpointRouteHandler +{ + static abstract void MapEndpoints(IEndpointRouteBuilder routes); +} \ No newline at end of file diff --git a/SDG-Backend-Barracuda/Program.cs b/SDG-Backend-Barracuda/Program.cs index d0bd4dc..3ee5b1e 100644 --- a/SDG-Backend-Barracuda/Program.cs +++ b/SDG-Backend-Barracuda/Program.cs @@ -37,34 +37,6 @@ if (app.Environment.IsDevelopment()) app.UseHttpsRedirection(); -app.MapPost("/card", async (CardInput input, ICardModel card) => -{ - var newCard = await card.CreateAsync(input); - return Results.Created($"/card/{newCard.Id}", newCard); -}); - -app.MapGet("/card", async (ICardModel card) => -{ - var result = await card.GetAllAsync(); - return Results.Ok(result); -}); - -app.MapGet("/card/{id}", async (int id, ICardModel card) => -{ - var newCard = await card.GetByIdAsync(id); - return newCard is not null ? Results.Ok(newCard) : Results.NotFound(); -}); - -app.MapPut("/card/{id}", async (int id, CardInput input, ICardModel card) => -{ - var newCard = await card.UpdateAsync(id, input); - return newCard is not null ? Results.Ok(newCard) : Results.NotFound(); -}); - -app.MapDelete("/card/{id}", async (int id, ICardModel card) => -{ - var success = await card.DeleteAsync(id); - return success ? Results.NoContent() : Results.NotFound(); -}); +CardModel.MapEndpoints(app); app.Run(); \ No newline at end of file