Files
BeReadyBackend/BeReadyBackend/Endpoints/RandomChallenges/GenerateRandomChallengeEndpoint.cs
T

55 lines
1.8 KiB
C#

using BeReadyBackend.Models;
using BeReadyBackend.Repositories;
using BeReadyBackend.Specifications.RandomChallenges;
using BeReadyBackend.Specifications.Users;
using FastEndpoints;
namespace BeReadyBackend.Endpoints.RandomChallenges;
public class GenerateRandomChallengeEndpoint(
RandomChallengesRepository randomChallengesRepository,
UserRandomChallengesRepository userRandomChallengesRepository,
UsersRepository usersRepository)
: EndpointWithoutRequest
{
public override void Configure()
{
Post("/RandomChallenges/");
}
public override async Task HandleAsync(CancellationToken ct)
{
RandomChallenge? randomChallenge = await randomChallengesRepository.FirstOrDefaultAsync(new GetRandomChallengesNotAlreadyPastSpec(), ct);
if (randomChallenge is null)
{
await Send.StringAsync("Il n'y a plus de défis en stock", 500, cancellation: ct);
return;
}
List<User> userList = await usersRepository.ListAsync(new GetAllUsersSpec(), ct);
// foreach (User user in userList)
// {
// UserRandomChallenge userRandomChallenge = new()
// {
// UserId = user.Id,
// RandomChallengeId = randomChallenge.Id
// };
//
// await userRandomChallengesRepository.AddAsync(userRandomChallenge, ct);
// }
List<UserRandomChallenge> userRandomChallenges = userList.Select(user => new UserRandomChallenge
{
UserId = user.Id,
RandomChallengeId = randomChallenge.Id
}).ToList();
await userRandomChallengesRepository.AddRangeAsync(userRandomChallenges, ct);
randomChallenge.IsAlreadyPast = true;
await randomChallengesRepository.SaveChangesAsync(ct);
await Send.NoContentAsync(ct);
}
}