diff --git a/CreateColorEndpoint.cs b/CreateColorEndpoint.cs new file mode 100644 index 0000000..c194cea --- /dev/null +++ b/CreateColorEndpoint.cs @@ -0,0 +1,35 @@ +using API.DTO.Color.Request; +using API.DTO.Color.Response; +using FastEndpoints; + +namespace API.Endpoints.Color; + +public class CreateColorEndpoint(AppDbContext appDbContext) : Endpoint +{ + public override void Configure() + { + Post("/color/create"); + AllowAnonymous(); + } + + public override async Task HandleAsync(CreateColorDto req, CancellationToken ct) + { + Models.Color color = new() + { + Label = req.Label, + }; + + appDbContext.Colors.Add(color); + await appDbContext.SaveChangesAsync(ct); + Console.WriteLine("Added Color"); + + GetColorDto responseDto = new() + { + Id = color.Id, + Label = req.Label, + }; + + await Send.OkAsync(responseDto, ct); + } + +} \ No newline at end of file diff --git a/DeleteColorEndpoint.cs b/DeleteColorEndpoint.cs new file mode 100644 index 0000000..6f7847a --- /dev/null +++ b/DeleteColorEndpoint.cs @@ -0,0 +1,37 @@ +using FastEndpoints; +using Microsoft.EntityFrameworkCore; + +namespace API.Endpoints.Color; + +public class DeleteColorRequest +{ + public int Id { get; set; } +} + +public class DeleteColorEndpoint(AppDbContext appDbContext) : Endpoint +{ + public override void Configure() + { + Delete("/colors/{@id}", x => new { x.Id }); + AllowAnonymous(); + } + + public override async Task HandleAsync(DeleteColorRequest req, CancellationToken ct) + { + Models.Color? colorToDelete = await appDbContext + .Colors + .SingleOrDefaultAsync(a => a.Id == req.Id, cancellationToken: ct); + + if (colorToDelete == null) + { + Console.WriteLine($"Aucune couleur avec l'ID {req.Id} trouvé."); + await Send.NotFoundAsync(ct); + return; + } + + appDbContext.Colors.Remove(colorToDelete); + await appDbContext.SaveChangesAsync(ct); + + await Send.NoContentAsync(ct); + } +} \ No newline at end of file diff --git a/GetAllColorsEndpoint.cs b/GetAllColorsEndpoint.cs new file mode 100644 index 0000000..0d1a089 --- /dev/null +++ b/GetAllColorsEndpoint.cs @@ -0,0 +1,26 @@ +using API.DTO.Color.Response; +using FastEndpoints; +using Microsoft.EntityFrameworkCore; + +namespace API.Endpoints.Color; + +public class GetAllColorsEndpoint(AppDbContext appDbContext) : EndpointWithoutRequest> +{ + public override void Configure() + { + Get("/colors"); + AllowAnonymous(); + } + + public override async Task HandleAsync(CancellationToken ct) + { + List responseDto = await appDbContext.Colors + .Select(a => new GetColorDto + { + Id = a.Id, + Label = a.Label, + } + ).ToListAsync(ct); + await Send.OkAsync(responseDto, ct); + } +} \ No newline at end of file diff --git a/GetColorEndpoint.cs b/GetColorEndpoint.cs new file mode 100644 index 0000000..f309862 --- /dev/null +++ b/GetColorEndpoint.cs @@ -0,0 +1,42 @@ +using API.DTO.Color.Response; +using FastEndpoints; +using Microsoft.AspNetCore.Authentication; +using Microsoft.EntityFrameworkCore; + +namespace API.Endpoints.Color; + +public class GetColorRequest +{ + public int Id { get; set; } +} + +public class GetColorEndpoint(AppDbContext appDbContext) : Endpoint +{ + public override void Configure() + { + Get("/colors/{@id}", x => new { x.Id}); + AllowAnonymous(); + } + + public override async Task HandleAsync(GetColorRequest req, CancellationToken ct) + { + Models.Color? color = await appDbContext + .Colors + .SingleOrDefaultAsync(x => x.Id == req.Id, cancellationToken: ct); + + if (color == null) + { + Console.WriteLine("Aucune couleur avec l'ID {req.Id} trouvé."); + await Send.NotFoundAsync(ct); + return; + } + + GetColorDto responseDto = new() + { + Id = color.Id, + Label = color.Label, + }; + await Send.OkAsync(responseDto, ct); + + } +} \ No newline at end of file diff --git a/UpdateColorEndpoint.cs b/UpdateColorEndpoint.cs new file mode 100644 index 0000000..be82f4b --- /dev/null +++ b/UpdateColorEndpoint.cs @@ -0,0 +1,42 @@ +using API.DTO.Color.Request; +using API.DTO.Color.Response; +using FastEndpoints; +using Microsoft.AspNetCore.Server.Kestrel; +using Microsoft.EntityFrameworkCore; + +namespace API.Endpoints.Color; + +public class UpdateColorEndpoint(AppDbContext appDbContext) : Endpoint +{ + public override void Configure() + { + Put("/colors/{@id}", x => new { x.Id }); + AllowAnonymous(); + } + + public override async Task HandleAsync(UpdateColorDto req, CancellationToken ct) + { + Models.Color? colorToEdit = await appDbContext + .Colors + .SingleOrDefaultAsync(x => x.Id == req.Id, cancellationToken: ct); + + if (colorToEdit == null) + { + Console.WriteLine("Aucune couleur avec l'id {req.Id} trouvé."); + await Send.NotFoundAsync(ct); + return; + + } + colorToEdit.Label = req.Label; + await appDbContext.SaveChangesAsync(ct); + + GetColorDto responseDto = new() + { + Id = req.Id, + Label = req.Label, + }; + await Send.OkAsync(responseDto, ct); + + } + +} \ No newline at end of file