using IM.ASPNETCore; using MessageService.Infrastructure; using MessageService.WebApi.Application.Conversation; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Security.Claims; namespace MessageService.WebApi.Controllers.Conversation { [Route("api/[controller]/[action]")] [Authorize] [ApiController] public class ConversationController : ControllerBase { private readonly ConversationService service; public ConversationController(ConversationService service) { this.service = service; } [HttpGet] public async Task List(CancellationToken cancellationToken) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); return Ok(await service.GetByOwnerIdAsync(Guid.Parse(userId!), cancellationToken)); } [HttpGet] public async Task Get([FromQuery]Guid id, CancellationToken cancellationToken) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); return Ok(await service.GetByIdAsync(id, Guid.Parse(userId!), cancellationToken)); } [HttpPost] [UnitOfWork(typeof(MessageDbContext))] public async Task MarkRead([FromQuery] Guid conversationId, long? lastReadSequenceId, CancellationToken cancellationToken) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); return Ok(await service.MarkAsReadAsync(conversationId, Guid.Parse(userId!), lastReadSequenceId, cancellationToken)); } } }