Files
BeReadyBackend/BeReadyBackend/Endpoints/Groups/CreateGroupEndpoint.cs
T

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);
}
}