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 BeReadyBackend.DTO.Achievements;
|
||||
using BeReadyBackend.Models;
|
||||
|
||||
namespace BeReadyBackend.MappingProfiles;
|
||||
|
||||
@@ -6,6 +8,6 @@ public class DtoToEntityMappings : Profile
|
||||
{
|
||||
public DtoToEntityMappings()
|
||||
{
|
||||
|
||||
CreateMap<UnlockAchievementDto, UserAchievement>();
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
using AutoMapper;
|
||||
using BeReadyBackend.DTO.Achievements;
|
||||
using BeReadyBackend.Models;
|
||||
|
||||
namespace BeReadyBackend.MappingProfiles;
|
||||
|
||||
@@ -6,5 +8,11 @@ public class EntityToDtoMappings : Profile
|
||||
{
|
||||
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