using GroupService.Infrastructure; using GroupService.WebApi.Application.GroupInvitation; using IM.ASPNETCore; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Security.Claims; namespace GroupService.WebApi.Controllers.GroupInvitation { [Authorize] [Route("api/[controller]/[action]")] [ApiController] public class GroupInvitationController : ControllerBase { private readonly GroupInvitationService service; public GroupInvitationController(GroupInvitationService service) { this.service = service; } [HttpPost] [UnitOfWork(typeof(GroupDbContext))] public async Task Send([FromBody] GroupInvitationRequest request) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); return Ok(await service.CreateAsync(Guid.Parse(userId), request.UserId, request.GroupId)); } [HttpGet] public async Task Get([FromQuery] Guid invitationId) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); return Ok(await service.GetByIdAsync(invitationId, Guid.Parse(userId))); } [HttpPost] [UnitOfWork(typeof(GroupDbContext))] public async Task Handle([FromQuery] Guid invitationId, [FromQuery] GroupInvitationAction action) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); return Ok(await service.HandleAsync(new GroupInvitationHandleCommand(invitationId, Guid.Parse(userId), action))); } } }