Created all endpoints and DTO to achievements
This commit is contained in:
@@ -0,0 +1,8 @@
|
|||||||
|
namespace BeReadyBackend.DTO.Achievements;
|
||||||
|
|
||||||
|
public class GetSuccessDto
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string? Label { get; set; }
|
||||||
|
public string? Description { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
namespace BeReadyBackend.DTO.Achievements;
|
||||||
|
|
||||||
|
public class UnlockAchievementDto
|
||||||
|
{
|
||||||
|
public int AchievementId { get; set; }
|
||||||
|
public int UserId { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
using BeReadyBackend.DTO.Achievements;
|
||||||
|
using BeReadyBackend.Repositories;
|
||||||
|
using FastEndpoints;
|
||||||
|
|
||||||
|
namespace BeReadyBackend.Endpoints.Achievements;
|
||||||
|
|
||||||
|
public class GetAllAchievementsEndpoint(AchievementsRepository achievementsRepository) : EndpointWithoutRequest<List<GetSuccessDto>>
|
||||||
|
{
|
||||||
|
public override void Configure()
|
||||||
|
{
|
||||||
|
Get("/Achievements/");
|
||||||
|
AllowAnonymous();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task HandleAsync(CancellationToken ct)
|
||||||
|
{
|
||||||
|
await Send.OkAsync(await achievementsRepository.ProjectToListAsync<GetSuccessDto>(ct), ct);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
using BeReadyBackend.DTO.Achievements;
|
||||||
|
using BeReadyBackend.Models;
|
||||||
|
using BeReadyBackend.Repositories;
|
||||||
|
using BeReadyBackend.Specifications.Achievements;
|
||||||
|
using BeReadyBackend.Specifications.UserAchievements;
|
||||||
|
using BeReadyBackend.Specifications.Users;
|
||||||
|
using FastEndpoints;
|
||||||
|
|
||||||
|
namespace BeReadyBackend.Endpoints.Achievements;
|
||||||
|
|
||||||
|
public class UserAchievementsRequest
|
||||||
|
{
|
||||||
|
public int UserId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GetUserAchievementsEndpoint(
|
||||||
|
UsersRepository usersRepository,
|
||||||
|
UserAchievementsRepository userAchievementsRepository)
|
||||||
|
: Endpoint<UserAchievementsRequest, List<GetSuccessDto>>
|
||||||
|
{
|
||||||
|
public override void Configure()
|
||||||
|
{
|
||||||
|
Get("/Achievements/Users/{@UserId}/", x => new {x.UserId});
|
||||||
|
AllowAnonymous();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task HandleAsync(UserAchievementsRequest req, CancellationToken ct)
|
||||||
|
{
|
||||||
|
User? user = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(req.UserId), ct);
|
||||||
|
|
||||||
|
if (user is null)
|
||||||
|
{
|
||||||
|
await Send.NotFoundAsync(ct);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<GetSuccessDto> userAchievements = await userAchievementsRepository.ProjectToListAsync<GetSuccessDto>(new GetUserAchievementByUserIdSpec(req.UserId), ct);
|
||||||
|
|
||||||
|
await Send.OkAsync(userAchievements, ct);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
using BeReadyBackend.DTO.Achievements;
|
||||||
|
using BeReadyBackend.Models;
|
||||||
|
using BeReadyBackend.Repositories;
|
||||||
|
using BeReadyBackend.Specifications.Achievements;
|
||||||
|
using BeReadyBackend.Specifications.UserAchievements;
|
||||||
|
using BeReadyBackend.Specifications.Users;
|
||||||
|
using FastEndpoints;
|
||||||
|
|
||||||
|
namespace BeReadyBackend.Endpoints.Achievements;
|
||||||
|
|
||||||
|
public class UnlockAchievementEndpoint(
|
||||||
|
UserAchievementsRepository userAchievementsRepository,
|
||||||
|
AchievementsRepository achievementsRepository,
|
||||||
|
UsersRepository usersRepository,
|
||||||
|
AutoMapper.IMapper mapper) : Endpoint<UnlockAchievementDto>
|
||||||
|
{
|
||||||
|
public override void Configure()
|
||||||
|
{
|
||||||
|
Post("/Achievements/{@AchievementId}/Users/{@UserId}/", x => new {x.AchievementId, x.UserId});
|
||||||
|
AllowAnonymous();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task HandleAsync(UnlockAchievementDto req, CancellationToken ct)
|
||||||
|
{
|
||||||
|
User? user = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(req.UserId), ct);
|
||||||
|
Achievement? achievement = await achievementsRepository.SingleOrDefaultAsync(new GetAchievementByIdSpec(req.AchievementId), ct);
|
||||||
|
|
||||||
|
if (user is null || achievement is null)
|
||||||
|
{
|
||||||
|
await Send.NotFoundAsync(ct);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UserAchievement? userAchievement = await userAchievementsRepository.SingleOrDefaultAsync(new GetUserAchievementByIdSpec(req.UserId, req.AchievementId), ct);
|
||||||
|
if (userAchievement is not null)
|
||||||
|
{
|
||||||
|
await Send.StringAsync("Le succès est déjà attribué à cet utilisateur", 500, cancellation: ct);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await userAchievementsRepository.AddAsync(mapper.Map<UserAchievement>(req), ct);
|
||||||
|
await Send.OkAsync(ct);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
|
using BeReadyBackend.DTO.Achievements;
|
||||||
|
using BeReadyBackend.Models;
|
||||||
|
|
||||||
namespace BeReadyBackend.MappingProfiles;
|
namespace BeReadyBackend.MappingProfiles;
|
||||||
|
|
||||||
@@ -6,6 +8,6 @@ public class DtoToEntityMappings : Profile
|
|||||||
{
|
{
|
||||||
public DtoToEntityMappings()
|
public DtoToEntityMappings()
|
||||||
{
|
{
|
||||||
|
CreateMap<UnlockAchievementDto, UserAchievement>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
|
using BeReadyBackend.DTO.Achievements;
|
||||||
|
using BeReadyBackend.Models;
|
||||||
|
|
||||||
namespace BeReadyBackend.MappingProfiles;
|
namespace BeReadyBackend.MappingProfiles;
|
||||||
|
|
||||||
@@ -6,5 +8,11 @@ public class EntityToDtoMappings : Profile
|
|||||||
{
|
{
|
||||||
public EntityToDtoMappings()
|
public EntityToDtoMappings()
|
||||||
{
|
{
|
||||||
|
CreateMap<Achievement, GetSuccessDto>();
|
||||||
|
|
||||||
|
CreateMap<UserAchievement, GetSuccessDto>()
|
||||||
|
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Achievement!.Id))
|
||||||
|
.ForMember(dest => dest.Label, opt => opt.MapFrom(src => src.Achievement!.Label))
|
||||||
|
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Achievement!.Description));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using Ardalis.Specification;
|
||||||
|
using BeReadyBackend.Models;
|
||||||
|
|
||||||
|
namespace BeReadyBackend.Specifications.Achievements;
|
||||||
|
|
||||||
|
public class GetAchievementByIdSpec : SingleResultSpecification<Achievement>
|
||||||
|
{
|
||||||
|
public GetAchievementByIdSpec(int achievementId)
|
||||||
|
{
|
||||||
|
Query
|
||||||
|
.Where(x => x.Id == achievementId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using Ardalis.Specification;
|
||||||
|
using BeReadyBackend.Models;
|
||||||
|
|
||||||
|
namespace BeReadyBackend.Specifications.UserAchievements;
|
||||||
|
|
||||||
|
public class GetUserAchievementByIdSpec : SingleResultSpecification<UserAchievement>
|
||||||
|
{
|
||||||
|
public GetUserAchievementByIdSpec(int userId, int achievementId)
|
||||||
|
{
|
||||||
|
Query
|
||||||
|
.Where(x => x.UserId == userId && x.AchievementId == achievementId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
using Ardalis.Specification;
|
||||||
|
using BeReadyBackend.Models;
|
||||||
|
|
||||||
|
namespace BeReadyBackend.Specifications.UserAchievements;
|
||||||
|
|
||||||
|
public class GetUserAchievementByUserIdSpec : Specification<UserAchievement>
|
||||||
|
{
|
||||||
|
public GetUserAchievementByUserIdSpec(int userId)
|
||||||
|
{
|
||||||
|
Query
|
||||||
|
.Include(x => x.Achievement)
|
||||||
|
.Where(x => x.UserId == userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using Ardalis.Specification;
|
||||||
|
using BeReadyBackend.Models;
|
||||||
|
|
||||||
|
namespace BeReadyBackend.Specifications.Users;
|
||||||
|
|
||||||
|
public class GetUserByIdSpec : SingleResultSpecification<User>
|
||||||
|
{
|
||||||
|
public GetUserByIdSpec(int userId)
|
||||||
|
{
|
||||||
|
Query
|
||||||
|
.Where(x => x.Id == userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user