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; namespace TIAMWebApp.Server.Controllers { [Authorize] [ApiController] [Route("api/v1/[controller]")] public class MessageAPIController : ControllerBase { private AdminDal _adminDal; private readonly TIAM.Core.Loggers.ILogger _logger; private readonly IConfiguration _configuration; private readonly IWebHostEnvironment _webHostEnvironment; private 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) { Console.WriteLine("SendEmail called!"); var message = JObject.Parse(SerializedMessageSenderModel.GetRawText()).ToObject>(); if (message != null) { if (message.MessageType == MessageTypesEnum.email) { Console.WriteLine($"EmailMessage!!!"); var messageElement = message.Message; Console.WriteLine(message.Message); var result = await _messageSenderService.SendMessageAsync(messageElement, (int)message.MessageType); //_adminDal.AddEmailMessageAsync((TIAM.Entities.Emails.EmailMessage)SerializedMessageSenderModel.Message); messageElement.EmailAddress = "noreply@anataworld.com"; await _adminDal.AddEmailMessageAsync(messageElement); Console.WriteLine("SendEmail result: " + result); return Ok(result); } else { return BadRequest("Invalid request"); // Access BaseClass properties } } return BadRequest("Invalid request"); } [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); //put Company id and name into a dictionary 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(); //put Company id and name into a dictionary return messages.ToJson(); } } }