60 lines
1.8 KiB
C#
60 lines
1.8 KiB
C#
using BeReadyBackend.DTO.Groups;
|
|
using BeReadyBackend.Models;
|
|
using BeReadyBackend.Repositories;
|
|
using BeReadyBackend.Services;
|
|
using BeReadyBackend.Specifications.Groups;
|
|
using BeReadyBackend.Specifications.Users;
|
|
using FastEndpoints;
|
|
using Group = BeReadyBackend.Models.Group;
|
|
|
|
namespace BeReadyBackend.Endpoints.Groups;
|
|
|
|
public class CreateGroupEndpoint(
|
|
UserGroupsRepository userGroupsRepository,
|
|
GroupsRepository groupsRepository,
|
|
UsersRepository usersRepository,
|
|
UserService userService,
|
|
AutoMapper.IMapper mapper) : Endpoint<CreateGroupDto>
|
|
{
|
|
public override void Configure()
|
|
{
|
|
Post("/Groups/");
|
|
}
|
|
|
|
public override async Task HandleAsync(CreateGroupDto req, CancellationToken ct)
|
|
{
|
|
int userId = userService.GetUserIdFromToken();
|
|
|
|
Group group = new();
|
|
mapper.Map(req, group);
|
|
group.CreationDate = DateTime.Now;
|
|
group.UserGroups = [];
|
|
|
|
await groupsRepository.AddAsync(group, ct);
|
|
|
|
UserGroup userGroup;
|
|
foreach (CreateUserGroupDto user in req.UserGroups!)
|
|
{
|
|
User? userChecking = await usersRepository.SingleOrDefaultAsync(new GetUserByIdSpec(user.UserId), ct);
|
|
if (userChecking is null) continue;
|
|
userGroup = new UserGroup
|
|
{
|
|
UserId = user.UserId,
|
|
GroupId = group.Id,
|
|
Grade = "Member"
|
|
};
|
|
group.UserGroups?.Add(userGroup);
|
|
}
|
|
|
|
userGroup = new UserGroup
|
|
{
|
|
UserId = userId,
|
|
GroupId = group.Id,
|
|
Grade = "Admin"
|
|
};
|
|
group.UserGroups?.Add(userGroup);
|
|
|
|
await userGroupsRepository.AddRangeAsync(group.UserGroups!, ct);
|
|
await Send.OkAsync(await groupsRepository.ProjectToSingleAsync<GetGroupDto>(new GetGroupByIdSpec(group.Id), ct), ct);
|
|
}
|
|
} |