mirror of
https://github.com/Govor-team/Govor.git
synced 2026-07-21 19:54:55 +00:00
Invitation globale work
+ tests + new services + InvitationDto and IInvitationReqest
This commit is contained in:
@@ -4,6 +4,7 @@ using Govor.Core.Infrastructure.Extensions;
|
||||
using Govor.Core.Models;
|
||||
using Govor.Core.Repositories.Users;
|
||||
using Govor.API.Services;
|
||||
using Govor.API.Services.AdminsStuff.Interfaces;
|
||||
using Govor.Core.Repositories.Admins;
|
||||
using Govor.Core.Repositories.Invaites;
|
||||
|
||||
@@ -15,35 +16,27 @@ public class AuthService : IAccountService
|
||||
private readonly IPasswordHasher _passwordHasher;
|
||||
private readonly IJwtService _jwtService;
|
||||
private readonly IUsersRepository _usersRepository;
|
||||
private readonly IInvitesRepository _invitesRepository;
|
||||
private readonly IAdminsRepository _adminsRepository;
|
||||
|
||||
public AuthService(IUsersRepository usersRepository,
|
||||
IJwtService jwtService,
|
||||
IPasswordHasher passwordHasher,
|
||||
IInvitesRepository invitesRepository,
|
||||
IAdminsRepository adminsRepository)
|
||||
IAdminsRepository adminsRepository
|
||||
)
|
||||
{
|
||||
_usersRepository = usersRepository;
|
||||
_jwtService = jwtService;
|
||||
_passwordHasher = passwordHasher;
|
||||
_invitesRepository = invitesRepository;
|
||||
_adminsRepository = adminsRepository;
|
||||
}
|
||||
|
||||
public async Task<string> RegistrationAsync(string name, string password, string inviteCode)
|
||||
public async Task<string> RegistrationAsync(string name, string password, Invitation invitation)
|
||||
{
|
||||
// 1. Проверка существования имени
|
||||
if (await _usersRepository.ExistsUsernameAsync(name))
|
||||
throw new UserAlreadyExistException(name);
|
||||
|
||||
// 2. Проверка валидности инвайта
|
||||
var invite = await _invitesRepository.FindByCodeAsync(inviteCode);
|
||||
|
||||
// 3. Генерация пароля
|
||||
|
||||
var passwordHash = _passwordHasher.Hash(password);
|
||||
|
||||
// 4. Создание пользователя
|
||||
|
||||
var user = new User
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
@@ -53,22 +46,13 @@ public class AuthService : IAccountService
|
||||
CreatedOn = DateOnly.FromDateTime(DateTime.UtcNow),
|
||||
IconId = Guid.NewGuid(),
|
||||
WasOnline = DateTime.UtcNow,
|
||||
InviteId = invite.Id
|
||||
InviteId = invitation.Id
|
||||
};
|
||||
|
||||
// 5. Добавление пользователя
|
||||
|
||||
await _usersRepository.AddAsync(user);
|
||||
|
||||
// 6. Назначение роли, если инвайт — админский
|
||||
if (invite.IsAdmin)
|
||||
{
|
||||
await _adminsRepository.AddAsync(new Admin
|
||||
{
|
||||
UserId = user.Id
|
||||
});
|
||||
}
|
||||
|
||||
// 7. Генерация токена
|
||||
|
||||
SetRole(user, invitation);
|
||||
|
||||
return _jwtService.GenerateJwtToken(user);
|
||||
}
|
||||
|
||||
@@ -85,6 +69,12 @@ public class AuthService : IAccountService
|
||||
|
||||
return _jwtService.GenerateJwtToken(user);
|
||||
}
|
||||
|
||||
private async void SetRole(User user, Invitation invitation)
|
||||
{
|
||||
if(invitation.IsAdmin)
|
||||
await _adminsRepository.AddAsync(new Admin() { UserId = user.Id });
|
||||
}
|
||||
}
|
||||
|
||||
public class LoginUserException : GovorCoreException { }
|
||||
|
||||
Reference in New Issue
Block a user