From bb1120f9671200e3334851a85394019f5730c2c3 Mon Sep 17 00:00:00 2001 From: sanchezvem Date: Mon, 18 May 2026 14:25:56 +0100 Subject: [PATCH] Fixed error with achievements and upgrade of spec to list challenges and proofs --- .../Users/GetAllUserChallengesEndpoint.cs | 17 +++++--------- .../Users/GetAllUserProofsEndpoint.cs | 22 +++++-------------- .../MappingProfiles/EntityToDtoMappings.cs | 1 - BeReadyBackend/Services/AchievementService.cs | 6 +++-- .../GetUserRandomChallengeByIdSpec.cs | 14 ++++++++++++ .../Users/GetProofOrChallengeByUserIdSpec.cs | 15 ------------- .../Users/GetUserProofByUserIdSpec.cs | 13 +++++++++++ 7 files changed, 42 insertions(+), 46 deletions(-) create mode 100644 BeReadyBackend/Specifications/RandomChallenges/GetUserRandomChallengeByIdSpec.cs delete mode 100644 BeReadyBackend/Specifications/Users/GetProofOrChallengeByUserIdSpec.cs create mode 100644 BeReadyBackend/Specifications/Users/GetUserProofByUserIdSpec.cs diff --git a/BeReadyBackend/Endpoints/Users/GetAllUserChallengesEndpoint.cs b/BeReadyBackend/Endpoints/Users/GetAllUserChallengesEndpoint.cs index dd82479..b2d22e6 100644 --- a/BeReadyBackend/Endpoints/Users/GetAllUserChallengesEndpoint.cs +++ b/BeReadyBackend/Endpoints/Users/GetAllUserChallengesEndpoint.cs @@ -2,12 +2,12 @@ using BeReadyBackend.Models; using BeReadyBackend.Repositories; using BeReadyBackend.Services; -using BeReadyBackend.Specifications.Users; +using BeReadyBackend.Specifications.RandomChallenges; using FastEndpoints; namespace BeReadyBackend.Endpoints.Users; -public class GetAllUserChallengesEndpoint(UsersRepository usersRepository, UserService userService, AutoMapper.IMapper mapper) : EndpointWithoutRequest> +public class GetAllUserChallengesEndpoint(UserRandomChallengesRepository userRandomChallengesRepository, UserService userService, AutoMapper.IMapper mapper) : EndpointWithoutRequest> { public override void Configure() { @@ -18,18 +18,11 @@ public class GetAllUserChallengesEndpoint(UsersRepository usersRepository, UserS { int userId = userService.GetUserIdFromToken(); - User? user = await usersRepository.SingleOrDefaultAsync(new GetProofOrChallengeByUserIdSpec(userId), ct); + List? userRandomChallenge = await userRandomChallengesRepository.ListAsync(new GetUserRandomChallengeByIdSpec(userId), ct); - if (user is null) - { - await Send.NotFoundAsync(ct); - return; - } - - List challenges = user.UserRandomChallenges? - .Where(x => x.Proof is not null) + List challenges = userRandomChallenge .Select(x => mapper.Map(x.RandomChallenge)) - .ToList() ?? []; + .ToList() ; await Send.OkAsync(challenges.OrderByDescending(x => x.ChallengeStartDate).ToList(), ct); } diff --git a/BeReadyBackend/Endpoints/Users/GetAllUserProofsEndpoint.cs b/BeReadyBackend/Endpoints/Users/GetAllUserProofsEndpoint.cs index ffcf34f..39c3fc0 100644 --- a/BeReadyBackend/Endpoints/Users/GetAllUserProofsEndpoint.cs +++ b/BeReadyBackend/Endpoints/Users/GetAllUserProofsEndpoint.cs @@ -7,7 +7,7 @@ using FastEndpoints; namespace BeReadyBackend.Endpoints.Users; -public class GetAllUserProofsEndpoint(UsersRepository usersRepository, UserService userService) : EndpointWithoutRequest> +public class GetAllUserProofsEndpoint(UserRandomChallengesRepository userRandomChallengesRepository, UserService userService, AutoMapper.IMapper mapper) : EndpointWithoutRequest> { public override void Configure() { @@ -18,22 +18,12 @@ public class GetAllUserProofsEndpoint(UsersRepository usersRepository, UserServi { int userId = userService.GetUserIdFromToken(); - User? user = await usersRepository.SingleOrDefaultAsync(new GetProofOrChallengeByUserIdSpec(userId), ct); - - if (user is null) - { - await Send.NotFoundAsync(ct); - return; - } - - List proofs = user.UserRandomChallenges? - .Where(x => x.Proof is not null) - .Select(x => new GetUserProofDto - { - Proof = x.Proof - }) - .ToList() ?? []; + List userProofs = await userRandomChallengesRepository.ListAsync(new GetUserProofByUserIdSpec(userId), ct); + List proofs = userProofs + .Select( mapper.Map) + .ToList(); + await Send.OkAsync(proofs, ct); } } \ No newline at end of file diff --git a/BeReadyBackend/MappingProfiles/EntityToDtoMappings.cs b/BeReadyBackend/MappingProfiles/EntityToDtoMappings.cs index d5d8eb0..aab8c56 100644 --- a/BeReadyBackend/MappingProfiles/EntityToDtoMappings.cs +++ b/BeReadyBackend/MappingProfiles/EntityToDtoMappings.cs @@ -31,7 +31,6 @@ public class EntityToDtoMappings : Profile CreateMap(); - CreateMap(); CreateMap(); CreateMap() diff --git a/BeReadyBackend/Services/AchievementService.cs b/BeReadyBackend/Services/AchievementService.cs index 5e9b585..03f76df 100644 --- a/BeReadyBackend/Services/AchievementService.cs +++ b/BeReadyBackend/Services/AchievementService.cs @@ -3,6 +3,7 @@ using BeReadyBackend.Repositories; using BeReadyBackend.Specifications.Achievements; using BeReadyBackend.Specifications.Friends; using BeReadyBackend.Specifications.Posts; +using BeReadyBackend.Specifications.RandomChallenges; using BeReadyBackend.Specifications.UserAchievements; using BeReadyBackend.Specifications.Users; @@ -13,7 +14,8 @@ public class AchievementService( AchievementsRepository achievementsRepository, UserAchievementsRepository userAchievementsRepository, UserPostsRepository userPostsRepository, - UserFriendsRepository userFriendsRepository) + UserFriendsRepository userFriendsRepository, + UserRandomChallengesRepository userRandomChallengesRepository) { public async Task Unlock(int userId, int achievementId) { @@ -39,7 +41,7 @@ public class AchievementService( User? user = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(userId)); if (user is null) return; - int challengesCounter = await usersRepository.CountAsync(new GetProofOrChallengeByUserIdSpec(userId)); + int challengesCounter = await userRandomChallengesRepository.CountAsync(new GetUserRandomChallengeByIdSpec(userId)); int likedCounter = await userPostsRepository.CountAsync(new GetPostsLikedByUserSpec(userId)); int friendsCounter = await userFriendsRepository.CountAsync(new GetFriendsByUserIdSpec(userId)); int friendsRequestsCounter = await userFriendsRepository.CountAsync(new GetFriendRequestSpec(userId)); diff --git a/BeReadyBackend/Specifications/RandomChallenges/GetUserRandomChallengeByIdSpec.cs b/BeReadyBackend/Specifications/RandomChallenges/GetUserRandomChallengeByIdSpec.cs new file mode 100644 index 0000000..185b4fe --- /dev/null +++ b/BeReadyBackend/Specifications/RandomChallenges/GetUserRandomChallengeByIdSpec.cs @@ -0,0 +1,14 @@ +using Ardalis.Specification; +using BeReadyBackend.Models; + +namespace BeReadyBackend.Specifications.RandomChallenges; + +public class GetUserRandomChallengeByIdSpec : Specification +{ + public GetUserRandomChallengeByIdSpec(int userId) + { + Query + .Include(x => x.RandomChallenge) + .Where(x => x.UserId == userId && x.Proof != null); + } +} \ No newline at end of file diff --git a/BeReadyBackend/Specifications/Users/GetProofOrChallengeByUserIdSpec.cs b/BeReadyBackend/Specifications/Users/GetProofOrChallengeByUserIdSpec.cs deleted file mode 100644 index e28b7ba..0000000 --- a/BeReadyBackend/Specifications/Users/GetProofOrChallengeByUserIdSpec.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Ardalis.Specification; -using BeReadyBackend.Models; - -namespace BeReadyBackend.Specifications.Users; - -public class GetProofOrChallengeByUserIdSpec : SingleResultSpecification -{ - public GetProofOrChallengeByUserIdSpec(int userId) - { - Query - .Include(x => x.UserRandomChallenges!) - .ThenInclude(x => x.RandomChallenge) - .Where(x => x.Id == userId); - } -} \ No newline at end of file diff --git a/BeReadyBackend/Specifications/Users/GetUserProofByUserIdSpec.cs b/BeReadyBackend/Specifications/Users/GetUserProofByUserIdSpec.cs new file mode 100644 index 0000000..8d6f963 --- /dev/null +++ b/BeReadyBackend/Specifications/Users/GetUserProofByUserIdSpec.cs @@ -0,0 +1,13 @@ +using Ardalis.Specification; +using BeReadyBackend.Models; + +namespace BeReadyBackend.Specifications.Users; + +public class GetUserProofByUserIdSpec : Specification +{ + public GetUserProofByUserIdSpec(int userId) + { + Query + .Where(x => x.UserId == userId && x.Proof != null); + } +} \ No newline at end of file