Invitation globale work

+ tests
+ new services
+ InvitationDto and IInvitationReqest
This commit is contained in:
Artemy
2025-06-24 21:20:43 +07:00
parent f99ec0b17b
commit 76094af15b
38 changed files with 483 additions and 1640 deletions
@@ -0,0 +1,77 @@
using AutoMapper;
using Govor.API.Services.AdminsStuff.Interfaces;
using Govor.Core.DTOs;
using Govor.Core.Repositories.Invaites;
using Govor.Core.Requests;
using Microsoft.AspNetCore.Mvc;
namespace Govor.API.Controllers.AdminStuff;
[Route("api/[controller]")]
public class InviteUserController : Controller
{
private readonly IInvitesRepository _repository;
private readonly IInvitationGenerator _invitationGenerator;
private readonly ILogger<InviteUserController> _logger;
public InviteUserController(IInvitationGenerator invitationGenerator,
IInvitesRepository repository,
ILogger<InviteUserController> logger)
{
_invitationGenerator = invitationGenerator;
_logger = logger;
_repository = repository;
}
[HttpPost("[action]")]
public async Task<IActionResult> Invitation([FromBody] CreateInvitationRequest createInvitation)
{
try
{
var result = await _invitationGenerator.GenerateInvitationCode(createInvitation.EndDate,
createInvitation.MaxParticipants,
createInvitation.IsAdmin,
createInvitation.Description);
return Ok(result);
}
catch (Exception e)
{
_logger.LogError(e, e.Message);
return BadRequest($"An error occured: {e.Message}");
}
}
[HttpGet]
public async Task<IActionResult> GetAllInvitations()
{
try
{
_logger.LogInformation("Getting all invitations by administrator");
var read = await _repository.GetAllAsync();
List<InvitationDto> dto = new List<InvitationDto>();
foreach (var inv in read)
{
dto.Add(new InvitationDto(){
Id = inv.Id,
Description = inv.Description,
IsAdmin = inv.IsAdmin,
MaxParticipants = inv.MaxParticipants,
Code = inv.Code,
CreatedAt = inv.DateCreated,
EndAt = inv.EndDate,
IsActive = inv.IsActive,
});
}
return Ok(dto);
}
catch (Exception e)
{
_logger.LogError(e, e.Message);
return BadRequest($"An error occured: {e.Message}");
}
}
}
@@ -2,7 +2,7 @@ using Govor.API.Services.AdminsStuff.Interfaces;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Govor.API.Controllers;
namespace Govor.API.Controllers.AdminStuff;
[ApiController]
@@ -12,13 +12,13 @@ public class UsersController : Controller
{
private readonly ILogger<UsersController> _logger;
private readonly IUsersAdministration _users;
public UsersController(ILogger<UsersController> logger, IUsersAdministration users)
public UsersController(ILogger<UsersController> logger, IUsersAdministration users, IInvitationGenerator invitationGenerator)
{
_logger = logger;
_users = users;
}
[HttpGet]
public async Task<IActionResult> AllUsers()
{
+12 -2
View File
@@ -1,3 +1,4 @@
using Govor.API.Services;
using Govor.API.Services.Authentication;
using Govor.Core.DTOs;
using Govor.API.Services.Authentication.Interfaces;
@@ -9,12 +10,14 @@ namespace Govor.API.Controllers;
[Route("api/[controller]")]
public class AuthController : Controller
{
private IInvitesService _invitesService;
private IAccountService _accountService;
private ILogger<AuthController> _logger;
public AuthController(IAccountService accountService, ILogger<AuthController> logger)
public AuthController(IAccountService accountService, IInvitesService invitesService, ILogger<AuthController> logger)
{
_accountService = accountService;
_invitesService = invitesService;
_logger = logger;
}
@@ -29,7 +32,9 @@ public class AuthController : Controller
return BadRequest(ModelState);
}
var token = await _accountService.RegistrationAsync(registrationDto.Name, registrationDto.Password, registrationDto.InviteLink);
var invite = _invitesService.Validate(registrationDto.InviteLink);
var token = await _accountService.RegistrationAsync(registrationDto.Name, registrationDto.Password, invite);
_logger.LogInformation($"Register request for {registrationDto.Name}");
return Ok(new { token });
}
@@ -38,6 +43,11 @@ public class AuthController : Controller
_logger.LogWarning(ex, $"Registration failed for user {registrationDto.Name}");
return BadRequest("Registration failed: user already exists.");
}
catch (InviteLinkInvalidException ex)
{
_logger.LogWarning(ex, $"Invite link invalid: {registrationDto.InviteLink}");
return BadRequest("Invite link invalid.");
}
catch (Exception ex)
{
_logger.LogError(ex, "Unexpected error during registration for user {Name}", registrationDto.Name);