using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using ROLAC.API.Authorization;
using ROLAC.API.DTOs.Invitations;
using ROLAC.API.Services;
namespace ROLAC.API.Controllers;
///
/// Admin endpoints for generating and e-mailing first-login invitation links.
/// The public consume/validate endpoints live on so they can set the
/// refresh-token cookie and stay anonymous.
///
[ApiController]
[Route("api/invitations")]
[Authorize]
public class InvitationsController : ControllerBase
{
private readonly IInvitationService _invitations;
public InvitationsController(IInvitationService invitations) => _invitations = invitations;
/// POST /api/invitations — generate a link for a member; returns { token, expiresAt }.
[HttpPost]
[HasPermission(Modules.Users, PermissionActions.Write)]
public async Task Create([FromBody] CreateInvitationRequest request)
{
try { return Ok(await _invitations.CreateAsync(request)); }
catch (InvalidOperationException ex) { return BadRequest(new { message = ex.Message }); }
}
/// POST /api/invitations/send — e-mail an already-generated link to the member.
[HttpPost("send")]
[HasPermission(Modules.Users, PermissionActions.Write)]
public async Task Send([FromBody] SendInvitationRequest request)
{
try { await _invitations.SendEmailAsync(request.MemberId, request.Link); return NoContent(); }
catch (InvalidOperationException ex) { return BadRequest(new { message = ex.Message }); }
}
}