using IM_API.Application.Interfaces; using IM_API.Domain.Events; using IM_API.Dtos; using IM_API.Dtos.Message; using IM_API.Interface.Services; using IM_API.Models; using IM_API.Tools; using IM_API.VOs.Message; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.ComponentModel.DataAnnotations; using System.Security.Claims; namespace IM_API.Controllers { [Authorize] [Route("api/[controller]/[action]")] [ApiController] public class MessageController : ControllerBase { private readonly IMessageSevice _messageService; private readonly ILogger _logger; public MessageController(IMessageSevice messageService, ILogger logger) { _messageService = messageService; _logger = logger; } [HttpPost] [ProducesResponseType(typeof(BaseResponse), StatusCodes.Status200OK)] public async Task SendMessage(MessageBaseDto dto) { var userIdstr = User.FindFirstValue(ClaimTypes.NameIdentifier); MessageBaseVo messageBaseVo = new MessageBaseVo(); var handledMessage = await _messageService.HandleFileMessageContentAsync(dto); if(dto.ChatType == Models.ChatType.PRIVATE) { messageBaseVo = await _messageService.SendPrivateMessageAsync(int.Parse(userIdstr), dto.ReceiverId, handledMessage); } else { messageBaseVo = await _messageService.SendGroupMessageAsync(int.Parse(userIdstr), dto.ReceiverId, handledMessage); } if (messageBaseVo.Type != MessageMsgType.Text) { var request = HttpContext?.Request; var baseUrl = $"{request.Scheme}://{request.Host}"; messageBaseVo.Content = UrlTools.ProcessMessageUrl(messageBaseVo.Content, baseUrl); } return Ok(new BaseResponse(messageBaseVo)); } [HttpGet] [ProducesResponseType(typeof(BaseResponse>), StatusCodes.Status200OK)] public async Task GetMessageList([FromQuery]MessageQueryDto dto) { var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier); var msgList = await _messageService.GetMessagesAsync(int.Parse(userIdStr),dto); var res = new BaseResponse>(msgList); return Ok(res); } } }