diff --git a/CreateEffectEndpoint.cs b/CreateEffectEndpoint.cs new file mode 100644 index 0000000..a4eb0d7 --- /dev/null +++ b/CreateEffectEndpoint.cs @@ -0,0 +1,34 @@ +using API.DTO.Effect.Request; +using API.DTO.Effect.Response; + +using FastEndpoints; +namespace API.Endpoints.Effect; + +public class CreateEffectEndpoint(AppDbContext appDbContext) : Endpoint +{ + public override void Configure() + { + Post("/effect/create"); + AllowAnonymous(); + } + + public override async Task HandleAsync(CreateEffectDto req, CancellationToken ct) + { + Models.Effect effect = new() + { + Label = req.Label, + }; + + appDbContext.Effects.Add(effect); + await appDbContext.SaveChangesAsync(ct); + Console.WriteLine("Effect added"); + + GetEffectDto responseDto = new() + { + Id = effect.Id, + Label = req.Label, + }; + + await Send.OkAsync(responseDto, ct); + } +} \ No newline at end of file diff --git a/DeleteEffectEndpoint.cs b/DeleteEffectEndpoint.cs new file mode 100644 index 0000000..6a79b77 --- /dev/null +++ b/DeleteEffectEndpoint.cs @@ -0,0 +1,36 @@ +using FastEndpoints; +using Microsoft.EntityFrameworkCore; + +namespace API.Endpoints.Effect; + +public class DeleteEffectRequest +{ + public int Id { get; set; } +} +public class DeleteEffectEndpoint(AppDbContext appDbContext) : Endpoint +{ + public override void Configure() + { + Delete("/effects/{@id}", x => new { x.Id }); + AllowAnonymous(); + } + + public override async Task HandleAsync(DeleteEffectRequest req, CancellationToken ct) + { + Models.Effect? effectToDelete = await appDbContext + .Effects + .SingleOrDefaultAsync(a => a.Id == req.Id, cancellationToken: ct); + + if (effectToDelete == null) + { + Console.WriteLine($"Aucun effet avec l'ID {req.Id} trouvé."); + await Send.NotFoundAsync(ct); + return; + } + + appDbContext.Effects.Remove(effectToDelete); + await appDbContext.SaveChangesAsync(ct); + + await Send.NoContentAsync(ct); + } +} \ No newline at end of file diff --git a/GetAllEffectsEndpoint.cs b/GetAllEffectsEndpoint.cs new file mode 100644 index 0000000..c4f253d --- /dev/null +++ b/GetAllEffectsEndpoint.cs @@ -0,0 +1,27 @@ +using API.DTO.Effect.Response; +using FastEndpoints; +using Microsoft.EntityFrameworkCore; + +namespace API.Endpoints.Effect; + +public class GetAllEffectsEndpoint(AppDbContext appDbContext) : EndpointWithoutRequest> +{ + public override void Configure() + { + Get("/effects"); + AllowAnonymous(); + } + + public override async Task HandleAsync(CancellationToken ct) + { + List responseDto = await appDbContext.Effects + .Select(a => new GetEffectDto + { + Id = a.Id, + Label = a.Label, + } + ).ToListAsync(ct); + + await Send.OkAsync(responseDto, ct); + } +} \ No newline at end of file diff --git a/GetEffectEndpoint.cs b/GetEffectEndpoint.cs new file mode 100644 index 0000000..c6230f1 --- /dev/null +++ b/GetEffectEndpoint.cs @@ -0,0 +1,42 @@ +using API.DTO.Effect.Response; +using FastEndpoints; +using Microsoft.AspNetCore.Authentication; +using Microsoft.EntityFrameworkCore; + +namespace API.Endpoints.Effect; + +public class GetEffectRequest +{ + public int Id { get; set; } +} + +public class GetEffectEndpoint(AppDbContext appDbContext) : Endpoint +{ + public override void Configure() + { + Get("/effect/{@id}", x => new { x.Id }); + AllowAnonymous(); + } + + public override async Task HandleAsync(GetEffectRequest req, CancellationToken ct) + { + Models.Effect? effect = await appDbContext + .Effects + .SingleOrDefaultAsync(x => x.Id == req.Id, cancellationToken: ct); + + if (effect == null) + { + Console.WriteLine("Aucun effet avec l'ID {req.Id} trouvé."); + await Send.NotFoundAsync(ct); + return; + } + + GetEffectDto responseDto = new() + { + Id = effect.Id, + Label = effect.Label, + }; + await Send.OkAsync(responseDto, ct); + + } +} \ No newline at end of file diff --git a/UpdateEffectEndpoint.cs b/UpdateEffectEndpoint.cs new file mode 100644 index 0000000..2728b81 --- /dev/null +++ b/UpdateEffectEndpoint.cs @@ -0,0 +1,42 @@ +using API.DTO.Effect.Request; +using API.DTO.Effect.Response; +using FastEndpoints; +using Microsoft.AspNetCore.Server.Kestrel; +using Microsoft.EntityFrameworkCore; + +namespace API.Endpoints.Effect; + +public class UpdateEffectEndpoint(AppDbContext appDbContext) : Endpoint +{ + public override void Configure() + { + Put("/effect/{@id}", x => new { x.Id }); + AllowAnonymous(); + } + + public override async Task HandleAsync(UpdateEffectDto req, CancellationToken ct) + { + Models.Effect? effectToEdit = await appDbContext + .Effects + .SingleOrDefaultAsync(x => x.Id == req.Id, cancellationToken: ct); + + if (effectToEdit == null) + { + Console.WriteLine("Aucun effet avec l'id {req.Id} trouvé."); + await Send.NotFoundAsync(ct); + return; + + } + effectToEdit.Label = req.Label; + await appDbContext.SaveChangesAsync(ct); + + GetEffectDto responseDto = new() + { + Id = req.Id, + Label = req.Label, + }; + await Send.OkAsync(responseDto, ct); + + } + +} \ No newline at end of file