using FastEndpoints; using MetaCourse.Api.Data; using MetaCourse.Api.DTOs.Progress; using MetaCourse.Api.Entities; using Microsoft.EntityFrameworkCore; namespace MetaCourse.Api.Endpoints.Progress; public class MarkResourceProgressEndpoint(AppDbContext db) : Endpoint { public override void Configure() { Post("api/resources/{resourceId}/progress"); AllowAnonymous(); Summary(s => s.Summary = "Marque une ressource comme terminée ou non terminée pour un utilisateur"); } public override async Task HandleAsync(MarkResourceProgressDto req, CancellationToken ct) { var progress = await db.UserResourceProgresses .FirstOrDefaultAsync(p => p.UserId == req.UserId && p.ResourceId == req.ResourceId, ct); if (progress is null) { db.UserResourceProgresses.Add(new UserResourceProgress { UserId = req.UserId, ResourceId = req.ResourceId, Completed = req.Completed, CompletedAt = req.Completed ? DateTime.UtcNow : null }); } else { progress.Completed = req.Completed; progress.CompletedAt = req.Completed ? DateTime.UtcNow : null; } await db.SaveChangesAsync(ct); await SendNoContentAsync(ct); } }