using Govor.API.Services.AdminsStuff.Interfaces; using Govor.Contracts.DTOs; using Govor.Contracts.Requests; using Govor.Core.Repositories.Invaites; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace Govor.API.Controllers.AdminStuff; [Route("api/[controller]")] [ApiController] [Authorize] public class InviteUserController : Controller { private readonly IInvitesRepository _repository; private readonly IInvitationGenerator _invitationGenerator; private readonly ILogger _logger; public InviteUserController(IInvitationGenerator invitationGenerator, IInvitesRepository repository, ILogger logger) { _invitationGenerator = invitationGenerator; _logger = logger; _repository = repository; } [HttpPost("[action]")] public async Task 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 GetAllInvitations() { try { _logger.LogInformation("Getting all invitations by administrator"); var read = await _repository.GetAllAsync(); List dto = new List(); 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}"); } } }