using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; using System.Text.Json; using AyCode.Core.Helpers; using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models.ClientSide.Messages; using AyCode.Models.Enums; using TIAM.Database.DataLayers.Admins; using TIAM.Entities.Emails; using AyCode.Services.SignalRs; using TIAM.Services; using AyCode.Core.Loggers; using AyCode.Core.Extensions; using TIAM.Entities.Products; using AyCode.Core.Consts; using AyCode.Core; using TIAM.Core.Consts; namespace TIAMWebApp.Server.Controllers { [Authorize] [ApiController] [Route("api/v1/[controller]")] public class MessageAPIController : ControllerBase { private readonly AdminDal _adminDal; private readonly TIAM.Core.Loggers.ILogger _logger; private readonly IConfiguration _configuration; private readonly IWebHostEnvironment _webHostEnvironment; private readonly IMessageSenderService _messageSenderService; public MessageAPIController(IEnumerable logWriters, IConfiguration configuration, IWebHostEnvironment webHostEnvironment, IMessageSenderService messageSenderService, AdminDal adminDal) { _adminDal = adminDal; _logger = new TIAM.Core.Loggers.Logger(logWriters.ToArray()); _configuration = configuration; _webHostEnvironment = webHostEnvironment; _messageSenderService = messageSenderService; } [AllowAnonymous] [HttpPost] [Route(APIUrls.SendEmailRouteName)] public async Task SendEmail([FromBody] JsonElement serializedMessageSenderModel) { _logger.Debug($"SendEmail called!"); var message = JObject.Parse(serializedMessageSenderModel.GetRawText()).ToObject>(); if (message == null) return BadRequest("Invalid request"); if (message.MessageType == MessageTypesEnum.email) { _logger.Debug($"EmailMessage!!!"); var messageElement = message.Message; _logger.Debug(message.Message.Subject); messageElement.EmailAddress = TiamConstClient.SystemEmailAddress; await _adminDal.AddEmailMessageAsync(messageElement); var result = await _messageSenderService.SendMessageAsync(messageElement, (int)message.MessageType); //_adminDal.AddEmailMessageAsync((TIAM.Entities.Emails.EmailMessage)SerializedMessageSenderModel.Message); _logger.Debug($"SendEmail result: {result}"); return Ok(result); } else { return BadRequest("Invalid request"); } } /// /// /// /// UserPropductMappingId /// [NonAction] [ApiExplorerSettings(IgnoreApi = true)] [SignalR(SignalRTags.GetTransfersMessagesByDriverId)] public async Task> GetTransfersMessagesByDriverId(Guid driverId) { _logger.Info($@"GetAllMessagesByDriverId called; driverId: {driverId}"); return await _adminDal.GetTransfersMessagesByDriverIdAsync(driverId); } [NonAction] [ApiExplorerSettings(IgnoreApi = true)] [SignalR(SignalRTags.GetMessagesByUserId)] public async Task> GetMessagesByUserId(Guid userId) { _logger.Info($@"GetMessagesByUserId called with userId: {userId}"); return await _adminDal.GetEmailMessagesByUserId(userId); } [AllowAnonymous] [HttpGet] [Route(APIUrls.GetMessagesByContextIdRouteName + "/{contextId}")] [Tags("Finished", "Messages")] [SignalR(SignalRTags.GetMessagesByContextId)] public async Task GetMessagesByContextId(Guid contextId) { _logger.Info($@"GetMessagessByContextId called with ownerId: {contextId}"); var messages = await _adminDal.GetEmailMessagesByContextIdAsync(contextId); return messages.ToJson(); } [AllowAnonymous] [HttpGet] [Route(APIUrls.GetAllMessagesRouteName)] [Tags("Finished", "Messages")] [SignalR(SignalRTags.GetAllMessages)] public async Task GetAllMessages() { _logger.Info($@"GetMessages called"); var messages = await _adminDal.GetAllEmailMessagesAsync(); return messages.ToJson(); } [NonAction] [ApiExplorerSettings(IgnoreApi = true)] [SignalR(SignalRTags.UpdateMessage)] public async Task UpdateMessages([FromBody] EmailMessage message) { _logger.Info($@"UpdateMessages called"); if (await _adminDal.UpdateEmailMessageAsync(message)) return message; return null; } } }