fixed generation of random challenge
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
using BeReadyBackend.Models;
|
using BeReadyBackend.DTO.RandomChallenges;
|
||||||
|
using BeReadyBackend.Models;
|
||||||
using BeReadyBackend.Repositories;
|
using BeReadyBackend.Repositories;
|
||||||
using BeReadyBackend.Specifications.RandomChallenges;
|
using BeReadyBackend.Specifications.RandomChallenges;
|
||||||
using BeReadyBackend.Specifications.Users;
|
using BeReadyBackend.Specifications.Users;
|
||||||
@@ -6,20 +7,29 @@ using FastEndpoints;
|
|||||||
|
|
||||||
namespace BeReadyBackend.Endpoints.RandomChallenges;
|
namespace BeReadyBackend.Endpoints.RandomChallenges;
|
||||||
|
|
||||||
|
public class GenerateRequest
|
||||||
|
{
|
||||||
|
public DateOnly Today { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
public class GenerateRandomChallengeEndpoint(
|
public class GenerateRandomChallengeEndpoint(
|
||||||
RandomChallengesRepository randomChallengesRepository,
|
RandomChallengesRepository randomChallengesRepository,
|
||||||
UserRandomChallengesRepository userRandomChallengesRepository,
|
UserRandomChallengesRepository userRandomChallengesRepository,
|
||||||
UsersRepository usersRepository)
|
UsersRepository usersRepository)
|
||||||
: EndpointWithoutRequest
|
: Endpoint<GenerateRequest, GetRandomChallengeDto>
|
||||||
{
|
{
|
||||||
public override void Configure()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Post("/RandomChallenges/");
|
Post("/RandomChallenges/");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async Task HandleAsync(CancellationToken ct)
|
public override async Task HandleAsync(GenerateRequest req, CancellationToken ct)
|
||||||
{
|
{
|
||||||
RandomChallenge? randomChallenge = await randomChallengesRepository.FirstOrDefaultAsync(new GetRandomChallengesNotAlreadyPastSpec(), ct);
|
RandomChallenge? randomChallenge = await randomChallengesRepository.SingleOrDefaultAsync(new GetRandomChallengeByDateSpec(req.Today), ct);
|
||||||
|
|
||||||
|
if (randomChallenge is null)
|
||||||
|
{
|
||||||
|
randomChallenge = await randomChallengesRepository.FirstOrDefaultAsync(new GetRandomChallengesNotAlreadyPastSpec(), ct);
|
||||||
if (randomChallenge is null)
|
if (randomChallenge is null)
|
||||||
{
|
{
|
||||||
await Send.StringAsync("Il n'y a plus de défis en stock", 500, cancellation: ct);
|
await Send.StringAsync("Il n'y a plus de défis en stock", 500, cancellation: ct);
|
||||||
@@ -39,7 +49,8 @@ public class GenerateRandomChallengeEndpoint(
|
|||||||
randomChallenge.IsAlreadyPast = true;
|
randomChallenge.IsAlreadyPast = true;
|
||||||
randomChallenge.GeneratedAt = DateTime.Now;
|
randomChallenge.GeneratedAt = DateTime.Now;
|
||||||
await randomChallengesRepository.SaveChangesAsync(ct);
|
await randomChallengesRepository.SaveChangesAsync(ct);
|
||||||
|
}
|
||||||
|
|
||||||
await Send.NoContentAsync(ct);
|
await Send.OkAsync(await randomChallengesRepository.ProjectToSingleAsync<GetRandomChallengeDto>(new GetRandomChallengeByIdSpec(randomChallenge.Id), ct), ct);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using Ardalis.Specification;
|
||||||
|
using BeReadyBackend.Models;
|
||||||
|
|
||||||
|
namespace BeReadyBackend.Specifications.RandomChallenges;
|
||||||
|
|
||||||
|
public class GetRandomChallengeByDateSpec : SingleResultSpecification<RandomChallenge>
|
||||||
|
{
|
||||||
|
public GetRandomChallengeByDateSpec(DateOnly today)
|
||||||
|
{
|
||||||
|
Query
|
||||||
|
.Where(x => x.GeneratedAt != null && DateOnly.FromDateTime(x.GeneratedAt.Value) == today);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user