Files
MetaCourseApi/MetaCourse.Api/Endpoints/Progress/MarkResourceProgressEndpoint.cs
T
2026-05-05 10:39:43 +02:00

43 lines
1.3 KiB
C#

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<MarkResourceProgressDto>
{
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);
}
}