Cleaned code

This commit is contained in:
2026-03-01 14:50:01 +01:00
parent 70de2a5a66
commit 2e868889fc
41 changed files with 94 additions and 98 deletions
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourcePerFileMappings">
<file url="file://$APPLICATION_CONFIG_DIR$/consoles/db/d39cb28a-f071-4fe6-bb03-b2350028b821/console.sql" value="d39cb28a-f071-4fe6-bb03-b2350028b821" />
</component>
</project>
+4 -4
View File
@@ -15,19 +15,19 @@ public class BeReadyDbContext : DbContext
public DbSet<UserFriend> UserFriends { get; set; } public DbSet<UserFriend> UserFriends { get; set; }
public DbSet<UserGroup> UserGroups { get; set; } public DbSet<UserGroup> UserGroups { get; set; }
public DbSet<UserRandomChallenge> UserRandomChallenges { get; set; } public DbSet<UserRandomChallenge> UserRandomChallenges { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{ {
string connectionString = string connectionString =
"Server=romaric-thibault.fr;" + "Server=romaric-thibault.fr;" +
"Database=beready;" + "Database=beready;" +
"User Id=beready;" + "User Id=beready;" +
"Password=beready;" + "Password=beready;" +
"TrustServerCertificate=true;"; "TrustServerCertificate=true;";
optionsBuilder.UseSqlServer(connectionString); optionsBuilder.UseSqlServer(connectionString);
} }
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {
modelBuilder.Entity<UserFriend>() modelBuilder.Entity<UserFriend>()
@@ -11,7 +11,7 @@ public class GetGroupDetailsDto
public string? Description { get; set; } public string? Description { get; set; }
public int Duration { get; set; } public int Duration { get; set; }
public DateTime CreationDate { get; set; } public DateTime CreationDate { get; set; }
public List<GetMessageDto>? Messages { get; set; } public List<GetMessageDto>? Messages { get; set; }
public List<GetUserGroupDto>? Users { get; set; } public List<GetUserGroupDto>? Users { get; set; }
} }
-1
View File
@@ -8,5 +8,4 @@ public class GetUserDto
public string? Username { get; set; } public string? Username { get; set; }
public int DesignationId { get; set; } public int DesignationId { get; set; }
public GetUserStatsDto? GetUserStatsDto { get; set; } public GetUserStatsDto? GetUserStatsDto { get; set; }
} }
@@ -1,6 +1,6 @@
namespace BeReadyBackend.DTO.Users; namespace BeReadyBackend.DTO.Users;
public class PatchUserPasswordDto public class PatchUserPasswordDto
{ {
public string? Password { get; set; } public string? Password { get; set; }
} }
@@ -19,9 +19,9 @@ public class GetLockedAchievementsEndpoint(
public override async Task HandleAsync(CancellationToken ct) public override async Task HandleAsync(CancellationToken ct)
{ {
int userId = userService.GetUserIdFromToken(); int userId = userService.GetUserIdFromToken();
List<GetAchievementDto> achievementsLocked = await achievementsRepository.ProjectToListAsync<GetAchievementDto>(new GetLockedAchievementsSpec(userId), ct); List<GetAchievementDto> achievementsLocked = await achievementsRepository.ProjectToListAsync<GetAchievementDto>(new GetLockedAchievementsSpec(userId), ct);
await Send.OkAsync(achievementsLocked, ct); await Send.OkAsync(achievementsLocked, ct);
} }
} }
@@ -15,13 +15,13 @@ public class GetUserAchievementsEndpoint(
{ {
Get("/Achievements/Users/"); Get("/Achievements/Users/");
} }
public override async Task HandleAsync(CancellationToken ct) public override async Task HandleAsync(CancellationToken ct)
{ {
int userId = userService.GetUserIdFromToken(); int userId = userService.GetUserIdFromToken();
List<GetAchievementDto> userAchievements = await userAchievementsRepository.ProjectToListAsync<GetAchievementDto>(new GetUserAchievementByUserIdSpec(userId), ct); List<GetAchievementDto> userAchievements = await userAchievementsRepository.ProjectToListAsync<GetAchievementDto>(new GetUserAchievementByUserIdSpec(userId), ct);
await Send.OkAsync(userAchievements, ct); await Send.OkAsync(userAchievements, ct);
} }
} }
@@ -22,7 +22,7 @@ public class UnlockAchievementEndpoint(
public override async Task HandleAsync(UnlockAchievementDto req, CancellationToken ct) public override async Task HandleAsync(UnlockAchievementDto req, CancellationToken ct)
{ {
int userId = userService.GetUserIdFromToken(); int userId = userService.GetUserIdFromToken();
Achievement? achievement = await achievementsRepository.SingleOrDefaultAsync(new GetAchievementByIdSpec(req.AchievementId), ct); Achievement? achievement = await achievementsRepository.SingleOrDefaultAsync(new GetAchievementByIdSpec(req.AchievementId), ct);
if (achievement is null) if (achievement is null)
@@ -37,7 +37,7 @@ public class UnlockAchievementEndpoint(
await Send.StringAsync("Le succès est déjà attribué à cet utilisateur", 500, cancellation: ct); await Send.StringAsync("Le succès est déjà attribué à cet utilisateur", 500, cancellation: ct);
return; return;
} }
await userAchievementsRepository.AddAsync(mapper.Map<UserAchievement>(req), ct); await userAchievementsRepository.AddAsync(mapper.Map<UserAchievement>(req), ct);
await Send.OkAsync(ct); await Send.OkAsync(ct);
} }
@@ -28,7 +28,7 @@ public class AcceptFriendRequestEndpoint(UserService userService, UserFriendsRep
await Send.NotFoundAsync(ct); await Send.NotFoundAsync(ct);
return; return;
} }
userFriend.IsAccepted = true; userFriend.IsAccepted = true;
UserFriend friend = new() UserFriend friend = new()
@@ -37,7 +37,7 @@ public class AcceptFriendRequestEndpoint(UserService userService, UserFriendsRep
FriendId = req.FriendId, FriendId = req.FriendId,
IsAccepted = true IsAccepted = true
}; };
await userFriendsRepository.AddAsync(friend, ct); await userFriendsRepository.AddAsync(friend, ct);
await userFriendsRepository.SaveChangesAsync(ct); await userFriendsRepository.SaveChangesAsync(ct);
await Send.OkAsync(ct); await Send.OkAsync(ct);
@@ -6,7 +6,8 @@ using FastEndpoints;
namespace BeReadyBackend.Endpoints.Friends; namespace BeReadyBackend.Endpoints.Friends;
public class GetAllFriendRequestsEndpoint(UserFriendsRepository userFriendsRepository, UserService userService, AutoMapper.IMapper mapper) : EndpointWithoutRequest<List<GetFriendRequestDto>> public class GetAllFriendRequestsEndpoint(UserFriendsRepository userFriendsRepository, UserService userService, AutoMapper.IMapper mapper)
: EndpointWithoutRequest<List<GetFriendRequestDto>>
{ {
public override void Configure() public override void Configure()
{ {
@@ -16,7 +17,7 @@ public class GetAllFriendRequestsEndpoint(UserFriendsRepository userFriendsRepos
public override async Task HandleAsync(CancellationToken ct) public override async Task HandleAsync(CancellationToken ct)
{ {
int userId = userService.GetUserIdFromToken(); int userId = userService.GetUserIdFromToken();
await Send.OkAsync(await userFriendsRepository.ProjectToListAsync<GetFriendRequestDto>(new GetFriendRequestSpec(userId), ct), ct); await Send.OkAsync(await userFriendsRepository.ProjectToListAsync<GetFriendRequestDto>(new GetFriendRequestSpec(userId), ct), ct);
} }
} }
@@ -17,7 +17,7 @@ public class GetAllFriendsEndpoint(UserFriendsRepository userFriendsRepository,
public override async Task HandleAsync(CancellationToken ct) public override async Task HandleAsync(CancellationToken ct)
{ {
int userId = userService.GetUserIdFromToken(); int userId = userService.GetUserIdFromToken();
await Send.OkAsync(await userFriendsRepository.ProjectToListAsync<GetFriendDto>(new GetFriendsByUserIdSpec(userId), ct), ct); await Send.OkAsync(await userFriendsRepository.ProjectToListAsync<GetFriendDto>(new GetFriendsByUserIdSpec(userId), ct), ct);
} }
} }
@@ -28,7 +28,7 @@ public class RejectFriendRequestEndpoint(UserService userService, UserFriendsRep
await Send.NotFoundAsync(ct); await Send.NotFoundAsync(ct);
return; return;
} }
await userFriendsRepository.DeleteAsync(userFriend, ct); await userFriendsRepository.DeleteAsync(userFriend, ct);
await Send.OkAsync(ct); await Send.OkAsync(ct);
} }
@@ -15,7 +15,7 @@ public class SendFriendRequestEndpoint(UserFriendsRepository userFriendsReposito
{ {
public override void Configure() public override void Configure()
{ {
Post("/Friends/{@Id}/", x => new {x.FriendId}); Post("/Friends/{@Id}/", x => new { x.FriendId });
} }
public override async Task HandleAsync(SendFriendRequest req, CancellationToken ct) public override async Task HandleAsync(SendFriendRequest req, CancellationToken ct)
@@ -28,11 +28,11 @@ public class SendFriendRequestEndpoint(UserFriendsRepository userFriendsReposito
await Send.StringAsync("Cet utilisateur est déjà ami avec cette personne", 400, cancellation: ct); await Send.StringAsync("Cet utilisateur est déjà ami avec cette personne", 400, cancellation: ct);
return; return;
} }
userFriend = mapper.Map<UserFriend>(req); userFriend = mapper.Map<UserFriend>(req);
userFriend.UserId = userId; userFriend.UserId = userId;
userFriend.IsAccepted = false; userFriend.IsAccepted = false;
await userFriendsRepository.AddAsync(userFriend, ct); await userFriendsRepository.AddAsync(userFriend, ct);
await Send.OkAsync(ct); await Send.OkAsync(ct);
} }
@@ -29,7 +29,7 @@ public class CreateGroupEndpoint(
group.IsFinished = false; group.IsFinished = false;
group.CreationDate = DateTime.Now; group.CreationDate = DateTime.Now;
group.UserGroups = []; group.UserGroups = [];
await groupsRepository.AddAsync(group, ct); await groupsRepository.AddAsync(group, ct);
await groupsRepository.SaveChangesAsync(ct); await groupsRepository.SaveChangesAsync(ct);
@@ -56,7 +56,7 @@ public class CreateGroupEndpoint(
Score = 0 Score = 0
}; };
group.UserGroups?.Add(userGroup); group.UserGroups?.Add(userGroup);
await userGroupsRepository.AddRangeAsync(group.UserGroups!, ct); await userGroupsRepository.AddRangeAsync(group.UserGroups!, ct);
await userGroupsRepository.SaveChangesAsync(ct); await userGroupsRepository.SaveChangesAsync(ct);
@@ -41,7 +41,7 @@ public class DeleteGroupEndpoint(GroupsRepository groupsRepository, UserGroupsRe
if (group.UserGroups?.Count > 0) if (group.UserGroups?.Count > 0)
await userGroupsRepository.DeleteRangeAsync(group.UserGroups, ct); await userGroupsRepository.DeleteRangeAsync(group.UserGroups, ct);
await groupsRepository.DeleteAsync(group, ct); await groupsRepository.DeleteAsync(group, ct);
await userGroupsRepository.SaveChangesAsync(ct); await userGroupsRepository.SaveChangesAsync(ct);
await Send.OkAsync(ct); await Send.OkAsync(ct);
@@ -14,8 +14,8 @@ public class GroupRankingRequest
} }
public class GetGroupRankingEndpoint( public class GetGroupRankingEndpoint(
GroupsRepository groupsRepository, GroupsRepository groupsRepository,
UsersRepository usersRepository, UsersRepository usersRepository,
UserGroupsRepository userGroupsRepository) UserGroupsRepository userGroupsRepository)
: Endpoint<GroupRankingRequest, List<GetGroupRankingDto>> : Endpoint<GroupRankingRequest, List<GetGroupRankingDto>>
{ {
@@ -41,6 +41,7 @@ public class GetGroupRankingEndpoint(
User? votedUser = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(member.VotedProofId.Value), ct); User? votedUser = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(member.VotedProofId.Value), ct);
if (votedUser is not null) votedUser.Score++; if (votedUser is not null) votedUser.Score++;
} }
await usersRepository.SaveChangesAsync(ct); await usersRepository.SaveChangesAsync(ct);
await userGroupsRepository.SaveChangesAsync(ct); await userGroupsRepository.SaveChangesAsync(ct);
@@ -52,8 +53,9 @@ public class GetGroupRankingEndpoint(
User? user = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(groupScore[i].UserId), ct); User? user = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(groupScore[i].UserId), ct);
if (user != null) user.Score += points[i]; if (user != null) user.Score += points[i];
} }
await usersRepository.SaveChangesAsync(ct); await usersRepository.SaveChangesAsync(ct);
await Send.OkAsync(groupScore, ct); await Send.OkAsync(groupScore, ct);
} }
} }
@@ -24,7 +24,7 @@ public class CreateUserEndpoint(UsersRepository usersRepository, AutoMapper.IMap
await Send.StringAsync("Un utilisateur possède déjà ce pseudo ou cette email", 400, cancellation: ct); await Send.StringAsync("Un utilisateur possède déjà ce pseudo ou cette email", 400, cancellation: ct);
return; return;
} }
string salt = new Password().IncludeLowercase().IncludeUppercase().IncludeNumeric().LengthRequired(24).Next(); string salt = new Password().IncludeLowercase().IncludeUppercase().IncludeNumeric().LengthRequired(24).Next();
user = mapper.Map<User>(req); user = mapper.Map<User>(req);
@@ -38,7 +38,7 @@ public class CreateUserEndpoint(UsersRepository usersRepository, AutoMapper.IMap
user.TotalPodium = 0; user.TotalPodium = 0;
user.TotalBonusChallenge = 0; user.TotalBonusChallenge = 0;
user.Series = 0; user.Series = 0;
await usersRepository.AddAsync(user, ct); await usersRepository.AddAsync(user, ct);
await Send.OkAsync(ct); await Send.OkAsync(ct);
} }
@@ -15,7 +15,7 @@ public class DeleteUserEndpoint(UsersRepository usersRepository, UserService use
public override async Task HandleAsync(CancellationToken ct) public override async Task HandleAsync(CancellationToken ct)
{ {
int userId = userService.GetUserIdFromToken(); int userId = userService.GetUserIdFromToken();
await usersRepository.DeleteAsync((await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(userId), ct))!, ct); await usersRepository.DeleteAsync((await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(userId), ct))!, ct);
await Send.OkAsync(ct); await Send.OkAsync(ct);
} }
@@ -13,11 +13,11 @@ public class GetAllUserChallengesEndpoint(UsersRepository usersRepository, UserS
{ {
Get("/Users/Challenges/"); Get("/Users/Challenges/");
} }
public override async Task HandleAsync(CancellationToken ct) public override async Task HandleAsync(CancellationToken ct)
{ {
int userId = userService.GetUserIdFromToken(); int userId = userService.GetUserIdFromToken();
User? user = await usersRepository.SingleOrDefaultAsync(new GetProofOrChallengeByUserIdSpec(userId), ct); User? user = await usersRepository.SingleOrDefaultAsync(new GetProofOrChallengeByUserIdSpec(userId), ct);
if (user is null) if (user is null)
@@ -25,13 +25,13 @@ public class GetAllUserChallengesEndpoint(UsersRepository usersRepository, UserS
await Send.NotFoundAsync(ct); await Send.NotFoundAsync(ct);
return; return;
} }
List<GetUserChallengeDto> challenges = []; List<GetUserChallengeDto> challenges = [];
if (user.UserRandomChallenges is not null) if (user.UserRandomChallenges is not null)
challenges.AddRange(user.UserRandomChallenges.Select(x => mapper.Map<GetUserChallengeDto>(x.RandomChallenge))); challenges.AddRange(user.UserRandomChallenges.Select(x => mapper.Map<GetUserChallengeDto>(x.RandomChallenge)));
if (user.UserGroups is not null) if (user.UserGroups is not null)
challenges.AddRange(user.UserGroups.Select(x => mapper.Map<GetUserChallengeDto>(x.Group))); challenges.AddRange(user.UserGroups.Select(x => mapper.Map<GetUserChallengeDto>(x.Group)));
await Send.OkAsync(challenges, ct); await Send.OkAsync(challenges, ct);
} }
} }
@@ -13,11 +13,11 @@ public class GetAllUserProofsEndpoint(UsersRepository usersRepository, UserServi
{ {
Get("/Users/Proofs/"); Get("/Users/Proofs/");
} }
public override async Task HandleAsync(CancellationToken ct) public override async Task HandleAsync(CancellationToken ct)
{ {
int userId = userService.GetUserIdFromToken(); int userId = userService.GetUserIdFromToken();
User? user = await usersRepository.SingleOrDefaultAsync(new GetProofOrChallengeByUserIdSpec(userId), ct); User? user = await usersRepository.SingleOrDefaultAsync(new GetProofOrChallengeByUserIdSpec(userId), ct);
if (user is null) if (user is null)
@@ -25,13 +25,13 @@ public class GetAllUserProofsEndpoint(UsersRepository usersRepository, UserServi
await Send.NotFoundAsync(ct); await Send.NotFoundAsync(ct);
return; return;
} }
List<GetUserProofDto> proofs = []; List<GetUserProofDto> proofs = [];
if (user.UserRandomChallenges is not null) if (user.UserRandomChallenges is not null)
proofs.AddRange(user.UserRandomChallenges.Select(x => mapper.Map<GetUserProofDto>(x.RandomChallenge))); proofs.AddRange(user.UserRandomChallenges.Select(x => mapper.Map<GetUserProofDto>(x.RandomChallenge)));
if (user.UserGroups is not null) if (user.UserGroups is not null)
proofs.AddRange(user.UserGroups.Select(x => mapper.Map<GetUserProofDto>(x.Group))); proofs.AddRange(user.UserGroups.Select(x => mapper.Map<GetUserProofDto>(x.Group)));
await Send.OkAsync(proofs, ct); await Send.OkAsync(proofs, ct);
} }
} }
@@ -12,7 +12,7 @@ public class GetAllUsersEndpoint(UsersRepository usersRepository, UserService us
{ {
Get("/Users/"); Get("/Users/");
} }
public override async Task HandleAsync(CancellationToken ct) public override async Task HandleAsync(CancellationToken ct)
{ {
int userId = userService.GetUserIdFromToken(); int userId = userService.GetUserIdFromToken();
@@ -17,9 +17,9 @@ public class GetUserDetailsEndpoint(UsersRepository usersRepository, UserService
public override async Task HandleAsync(CancellationToken ct) public override async Task HandleAsync(CancellationToken ct)
{ {
int userId = userService.GetUserIdFromToken(); int userId = userService.GetUserIdFromToken();
User? user = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(userId), ct); User? user = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(userId), ct);
await Send.OkAsync(mapper.Map<GetUserDetailsDto>(user), ct); await Send.OkAsync(mapper.Map<GetUserDetailsDto>(user), ct);
} }
} }
@@ -16,7 +16,7 @@ public class GetUserEndpoint(UsersRepository usersRepository, UserService userSe
{ {
public override void Configure() public override void Configure()
{ {
Get("/Users/{@Id}/", x => new {x.Id}); Get("/Users/{@Id}/", x => new { x.Id });
} }
public override async Task HandleAsync(UserRequest req, CancellationToken ct) public override async Task HandleAsync(UserRequest req, CancellationToken ct)
@@ -28,7 +28,7 @@ public class GetUserEndpoint(UsersRepository usersRepository, UserService userSe
await Send.NotFoundAsync(ct); await Send.NotFoundAsync(ct);
return; return;
} }
await Send.OkAsync(mapper.Map<GetUserDto>(user), ct); await Send.OkAsync(mapper.Map<GetUserDto>(user), ct);
} }
} }
@@ -17,7 +17,7 @@ public class PatchUserDesignationEndpoint(UsersRepository usersRepository, UserS
public override async Task HandleAsync(PatchUserDesignationDto req, CancellationToken ct) public override async Task HandleAsync(PatchUserDesignationDto req, CancellationToken ct)
{ {
int userId = userService.GetUserIdFromToken(); int userId = userService.GetUserIdFromToken();
User? user = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(userId), ct); User? user = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(userId), ct);
if (user is null) if (user is null)
@@ -18,7 +18,7 @@ public class PatchUserPasswordEndpoint(UsersRepository usersRepository, UserServ
public override async Task HandleAsync(PatchUserPasswordDto req, CancellationToken ct) public override async Task HandleAsync(PatchUserPasswordDto req, CancellationToken ct)
{ {
int userId = userService.GetUserIdFromToken(); int userId = userService.GetUserIdFromToken();
User? user = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(userId), ct); User? user = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(userId), ct);
if (user is null) if (user is null)
@@ -26,10 +26,10 @@ public class PatchUserPasswordEndpoint(UsersRepository usersRepository, UserServ
await Send.NotFoundAsync(ct); await Send.NotFoundAsync(ct);
return; return;
} }
string salt = new Password().IncludeLowercase().IncludeUppercase().IncludeNumeric().LengthRequired(24).Next(); string salt = new Password().IncludeLowercase().IncludeUppercase().IncludeNumeric().LengthRequired(24).Next();
user.Password = BCrypt.Net.BCrypt.HashPassword(req.Password + salt); user.Password = BCrypt.Net.BCrypt.HashPassword(req.Password + salt);
await usersRepository.SaveChangesAsync(ct); await usersRepository.SaveChangesAsync(ct);
await Send.OkAsync(ct); await Send.OkAsync(ct);
} }
@@ -18,7 +18,7 @@ public class UpdateUserEndpoint(UsersRepository usersRepository, UserService use
public override async Task HandleAsync(UpdateUserDto req, CancellationToken ct) public override async Task HandleAsync(UpdateUserDto req, CancellationToken ct)
{ {
int userId = userService.GetUserIdFromToken(); int userId = userService.GetUserIdFromToken();
User? user = await usersRepository.FirstOrDefaultAsync(new GetUserByCriteriaSpec(req.Username!, req.Email!, userId), ct); User? user = await usersRepository.FirstOrDefaultAsync(new GetUserByCriteriaSpec(req.Username!, req.Email!, userId), ct);
if (user is not null) if (user is not null)
@@ -26,17 +26,17 @@ public class UpdateUserEndpoint(UsersRepository usersRepository, UserService use
await Send.StringAsync("Un utilisateur possède déjà ce pseudo ou cette email", 400, cancellation: ct); await Send.StringAsync("Un utilisateur possède déjà ce pseudo ou cette email", 400, cancellation: ct);
return; return;
} }
user = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(userId), ct); user = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(userId), ct);
if (user is null) if (user is null)
{ {
await Send.NotFoundAsync(ct); await Send.NotFoundAsync(ct);
return; return;
} }
mapper.Map(req, user); mapper.Map(req, user);
await usersRepository.SaveChangesAsync(ct); await usersRepository.SaveChangesAsync(ct);
await Send.OkAsync(ct); await Send.OkAsync(ct);
} }
+4 -3
View File
@@ -9,17 +9,17 @@ public class GroupHub : Hub
{ {
await Clients.Group($"group-{groupId}").SendAsync("ReceiveProof", proofUrl); await Clients.Group($"group-{groupId}").SendAsync("ReceiveProof", proofUrl);
} }
public async Task SendMessageToGroup(int groupId, string message) public async Task SendMessageToGroup(int groupId, string message)
{ {
await Clients.Group($"group-{groupId}").SendAsync("ReceiveMessage", message); await Clients.Group($"group-{groupId}").SendAsync("ReceiveMessage", message);
} }
public async Task StartVoteIntoGroup(int groupId) public async Task StartVoteIntoGroup(int groupId)
{ {
await Clients.Group($"group-{groupId}").SendAsync("StartVote"); await Clients.Group($"group-{groupId}").SendAsync("StartVote");
} }
public override async Task OnConnectedAsync() public override async Task OnConnectedAsync()
{ {
HttpContext? httpContext = Context.GetHttpContext(); HttpContext? httpContext = Context.GetHttpContext();
@@ -27,6 +27,7 @@ public class GroupHub : Hub
{ {
await Groups.AddToGroupAsync(Context.ConnectionId, $"group-{groupId}"); await Groups.AddToGroupAsync(Context.ConnectionId, $"group-{groupId}");
} }
await base.OnConnectedAsync(); await base.OnConnectedAsync();
} }
} }
@@ -11,12 +11,12 @@ public class DtoToEntityMappings : Profile
public DtoToEntityMappings() public DtoToEntityMappings()
{ {
CreateMap<UnlockAchievementDto, UserAchievement>(); CreateMap<UnlockAchievementDto, UserAchievement>();
CreateMap<CreateUserDto, User>(); CreateMap<CreateUserDto, User>();
CreateMap<UpdateUserDto, User>(); CreateMap<UpdateUserDto, User>();
CreateMap<PatchUserDesignationDto, User>(); CreateMap<PatchUserDesignationDto, User>();
CreateMap<CreateGroupDto, Group>() CreateMap<CreateGroupDto, Group>()
.ForMember(dest => dest.UserGroups, opt => opt.Ignore()); .ForMember(dest => dest.UserGroups, opt => opt.Ignore());
} }
} }
@@ -19,22 +19,22 @@ public class EntityToDtoMappings : Profile
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Achievement!.Id)) .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.Label, opt => opt.MapFrom(src => src.Achievement!.Label))
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Achievement!.Description)); .ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Achievement!.Description));
CreateMap<User, GetUserDto>() CreateMap<User, GetUserDto>()
.ForMember(dest => dest.GetUserStatsDto, opt => opt.MapFrom(src => src)); .ForMember(dest => dest.GetUserStatsDto, opt => opt.MapFrom(src => src));
CreateMap<User, GetUserDetailsDto>() CreateMap<User, GetUserDetailsDto>()
.ForMember(dest => dest.GetUserStatsDto, opt => opt.MapFrom(src => src)); .ForMember(dest => dest.GetUserStatsDto, opt => opt.MapFrom(src => src));
CreateMap<User, GetUserStatsDto>(); CreateMap<User, GetUserStatsDto>();
CreateMap<UserGroup, GetUserProofDto>(); CreateMap<UserGroup, GetUserProofDto>();
CreateMap<UserRandomChallenge, GetUserProofDto>(); CreateMap<UserRandomChallenge, GetUserProofDto>();
CreateMap<RandomChallenge, GetUserChallengeDto>() CreateMap<RandomChallenge, GetUserChallengeDto>()
.ForMember(dest => dest.ChallengeTitle, opt => opt.MapFrom(src => src.Libelle)) .ForMember(dest => dest.ChallengeTitle, opt => opt.MapFrom(src => src.Libelle))
.ForMember(dest => dest.ChallengeDuration, opt => opt.MapFrom(src => src.Duration)); .ForMember(dest => dest.ChallengeDuration, opt => opt.MapFrom(src => src.Duration));
CreateMap<Group, GetUserChallengeDto>() CreateMap<Group, GetUserChallengeDto>()
.ForMember(dest => dest.ChallengeTitle, opt => opt.MapFrom(src => src.Title)) .ForMember(dest => dest.ChallengeTitle, opt => opt.MapFrom(src => src.Title))
.ForMember(dest => dest.ChallengeDescription, opt => opt.MapFrom(src => src.Description)) .ForMember(dest => dest.ChallengeDescription, opt => opt.MapFrom(src => src.Description))
@@ -43,7 +43,7 @@ public class EntityToDtoMappings : Profile
CreateMap<UserFriend, GetFriendDto>() CreateMap<UserFriend, GetFriendDto>()
.ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.Friend!.Username)) .ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.Friend!.Username))
.ForMember(dest => dest.Score, opt => opt.MapFrom(src => src.Friend!.Score)); .ForMember(dest => dest.Score, opt => opt.MapFrom(src => src.Friend!.Score));
CreateMap<UserFriend, GetFriendRequestDto>() CreateMap<UserFriend, GetFriendRequestDto>()
.ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.User!.Username)) .ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.User!.Username))
.ForMember(dest => dest.Score, opt => opt.MapFrom(src => src.User!.Score)); .ForMember(dest => dest.Score, opt => opt.MapFrom(src => src.User!.Score));
@@ -57,17 +57,17 @@ public class EntityToDtoMappings : Profile
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.GroupId)) .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.GroupId))
.ForMember(dest => dest.Label, opt => opt.MapFrom(src => src.Group!.Label)) .ForMember(dest => dest.Label, opt => opt.MapFrom(src => src.Group!.Label))
.ForMember(dest => dest.IsFinished, opt => opt.MapFrom(src => src.Group!.IsFinished)); .ForMember(dest => dest.IsFinished, opt => opt.MapFrom(src => src.Group!.IsFinished));
CreateMap<Group, GetGroupDetailsDto>() CreateMap<Group, GetGroupDetailsDto>()
.ForMember(dest => dest.Users, opt => opt.MapFrom(src => src.UserGroups)) .ForMember(dest => dest.Users, opt => opt.MapFrom(src => src.UserGroups))
.ForMember(dest => dest.Messages, opt => opt.MapFrom(src => src.Messages)); .ForMember(dest => dest.Messages, opt => opt.MapFrom(src => src.Messages));
CreateMap<Message, GetMessageDto>() CreateMap<Message, GetMessageDto>()
.ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.User!.Username)); .ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.User!.Username));
CreateMap<UserGroup, GetProofDto>() CreateMap<UserGroup, GetProofDto>()
.ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.User!.Username)); .ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.User!.Username));
CreateMap<UserGroup, GetGroupRankingDto>() CreateMap<UserGroup, GetGroupRankingDto>()
.ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.User!.Username)); .ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.User!.Username));
} }
+1 -1
View File
@@ -7,6 +7,6 @@ public class Achievement
[Key] public int Id { get; set; } [Key] public int Id { get; set; }
[Required] public string? Label { get; set; } [Required] public string? Label { get; set; }
[Required] public string? Description { get; set; } [Required] public string? Description { get; set; }
public List<UserAchievement>? UserAchievements { get; set; } public List<UserAchievement>? UserAchievements { get; set; }
} }
+1 -1
View File
@@ -6,6 +6,6 @@ public class Designation
{ {
[Key] public int Id { get; set; } [Key] public int Id { get; set; }
[Required] public string? Label { get; set; } [Required] public string? Label { get; set; }
public List<User>? Users { get; set; } public List<User>? Users { get; set; }
} }
+2 -2
View File
@@ -7,12 +7,12 @@ public class Group
[Key] public int Id { get; set; } [Key] public int Id { get; set; }
[Required, MaxLength(100)] public string? Label { get; set; } [Required, MaxLength(100)] public string? Label { get; set; }
[Required] public bool IsFinished { get; set; } [Required] public bool IsFinished { get; set; }
[Required] public string? Title { get; set; } [Required] public string? Title { get; set; }
[Required] public string? Description { get; set; } [Required] public string? Description { get; set; }
[Required] public int Duration { get; set; } [Required] public int Duration { get; set; }
[Required] public DateTime CreationDate { get; set; } [Required] public DateTime CreationDate { get; set; }
public List<Message>? Messages { get; set; } public List<Message>? Messages { get; set; }
public List<UserGroup>? UserGroups { get; set; } public List<UserGroup>? UserGroups { get; set; }
} }
+2 -2
View File
@@ -7,10 +7,10 @@ public class Message
[Key] public int Id { get; set; } [Key] public int Id { get; set; }
[Required] public string? Libelle { get; set; } [Required] public string? Libelle { get; set; }
[Required] public DateTime SendDate { get; set; } [Required] public DateTime SendDate { get; set; }
public User? User { get; set; } public User? User { get; set; }
[Required] public int UserId { get; set; } [Required] public int UserId { get; set; }
public Group? Group { get; set; } public Group? Group { get; set; }
[Required] public int GroupId { get; set; } [Required] public int GroupId { get; set; }
} }
+2 -2
View File
@@ -6,8 +6,8 @@ public class RandomChallenge
{ {
[Key] public int Id { get; set; } [Key] public int Id { get; set; }
[Required] public string? Libelle { get; set; } [Required] public string? Libelle { get; set; }
[Required] public int Duration {get; set;} [Required] public int Duration { get; set; }
[Required] public bool IsAlreadyPast { get; set; } [Required] public bool IsAlreadyPast { get; set; }
public List<UserRandomChallenge>? UserRandomChallenges { get; set; } public List<UserRandomChallenge>? UserRandomChallenges { get; set; }
} }
+3 -3
View File
@@ -12,16 +12,16 @@ public class User
[Required] public DateTime CreationDate { get; set; } [Required] public DateTime CreationDate { get; set; }
[Required, MaxLength(60)] public string? Password { get; set; } [Required, MaxLength(60)] public string? Password { get; set; }
[Required] public string? Salt { get; set; } [Required] public string? Salt { get; set; }
[Required, ] public int Score { get; set; } [Required,] public int Score { get; set; }
[Required] public int TotalWin { get; set; } [Required] public int TotalWin { get; set; }
[Required] public int TotalChallenge { get; set; } [Required] public int TotalChallenge { get; set; }
[Required] public int TotalPodium { get; set; } [Required] public int TotalPodium { get; set; }
[Required] public int TotalBonusChallenge { get; set; } [Required] public int TotalBonusChallenge { get; set; }
[Required] public int Series { get; set; } [Required] public int Series { get; set; }
public Designation? Designation { get; set; } public Designation? Designation { get; set; }
public int? DesignationId { get; set; } public int? DesignationId { get; set; }
public List<UserFriend>? UserFriends { get; set; } public List<UserFriend>? UserFriends { get; set; }
public List<Message>? Messages { get; set; } public List<Message>? Messages { get; set; }
public List<UserRandomChallenge>? UserRandomChallenges { get; set; } public List<UserRandomChallenge>? UserRandomChallenges { get; set; }
+1 -1
View File
@@ -12,6 +12,6 @@ public class UserFriend
public User? Friend { get; set; } public User? Friend { get; set; }
public int FriendId { get; set; } public int FriendId { get; set; }
[Required] public bool IsAccepted { get; set; } [Required] public bool IsAccepted { get; set; }
} }
+2 -2
View File
@@ -11,9 +11,9 @@ public class UserGroup
public Group? Group { get; set; } public Group? Group { get; set; }
[Required] public int GroupId { get; set; } [Required] public int GroupId { get; set; }
public string? Proof { get; set; } public string? Proof { get; set; }
[Required] public string? Grade { get; set; } [Required] public string? Grade { get; set; }
public int? VotedProofId { get; set; } public int? VotedProofId { get; set; }
[Required] public int Score { get; set; } [Required] public int Score { get; set; }
+1 -1
View File
@@ -11,6 +11,6 @@ public class UserRandomChallenge
public RandomChallenge? RandomChallenge { get; set; } public RandomChallenge? RandomChallenge { get; set; }
[Required] public int RandomChallengeId { get; set; } [Required] public int RandomChallengeId { get; set; }
public string? Proof { get; set; } public string? Proof { get; set; }
} }
+5 -5
View File
@@ -6,16 +6,16 @@ namespace BeReadyBackend.Services;
public class UserService public class UserService
{ {
private readonly IHttpContextAccessor _httpContextAccessor; private readonly IHttpContextAccessor _httpContextAccessor;
public UserService(IHttpContextAccessor httpContextAccessor) public UserService(IHttpContextAccessor httpContextAccessor)
{ {
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
} }
public int GetUserIdFromToken() public int GetUserIdFromToken()
{ {
ClaimsPrincipal user = _httpContextAccessor.HttpContext!.User; ClaimsPrincipal user = _httpContextAccessor.HttpContext!.User;
string? userId = user.Claims.FirstOrDefault(x => x.Type == "UserId")?.Value; string? userId = user.Claims.FirstOrDefault(x => x.Type == "UserId")?.Value;
return int.Parse(userId!); return int.Parse(userId!);
} }
} }
@@ -9,6 +9,5 @@ public class GetLockedAchievementsSpec : Specification<Achievement>
{ {
Query Query
.Where(x => x.UserAchievements != null && x.UserAchievements.All(y => y.UserId != userId)); .Where(x => x.UserAchievements != null && x.UserAchievements.All(y => y.UserId != userId));
} }
} }
@@ -5,7 +5,7 @@ namespace BeReadyBackend.Specifications.Groups;
public class GetGroupsByUserIdSpec : Specification<UserGroup> public class GetGroupsByUserIdSpec : Specification<UserGroup>
{ {
public GetGroupsByUserIdSpec(int userId) public GetGroupsByUserIdSpec(int userId)
{ {
Query Query
.Include(x => x.Group) .Include(x => x.Group)