using System; using System.Collections.Generic; using System.Linq; using _0_Framework.Application; using _0_Framework.InfraStructure; using AccountManagement.Application.Contracts.TaskMessage; using AccountManagement.Domain.AccountAgg; using AccountManagement.Domain.AccountLeftWorkAgg; using AccountManagement.Domain.TaskMessageAgg; using AccountManagement.Domain.TaskMessageItemsAgg; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; namespace AccountMangement.Infrastructure.EFCore.Repository; public class TaskMessageRepository : RepositoryBase, ITaskMessageRepository { private readonly AccountContext _accountContext; private readonly IHttpContextAccessor _contextAccessor; private readonly IAccountRepository _accountRepository; public TaskMessageRepository(AccountContext accountContext, IHttpContextAccessor contextAccessor, IAccountRepository accountRepository) : base(accountContext) { _accountContext = accountContext; _contextAccessor = contextAccessor; _accountRepository = accountRepository; } public void CreateTaskMessageItems(long senderId, long receiverId, long messageId) { var messageItems = new TaskMessageItems(senderId, receiverId, messageId); _accountContext.Add(messageItems); _accountContext.SaveChanges(); } public List GetTaskMessages(long assignId) { var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value); var positionId =int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); var raw = _accountContext.TaskMessages.Include(x => x.TaskMessageItemsList).Include(x => x.Assign).Where(x => x.AssignId == assignId ).Select( x => new TaskMessageViewModel() { SenderId = x.TaskMessageItemsList.First().SenderAccountId, ReceiverId = x.TaskMessageItemsList.First().ReceiverAccountId, CreationDate = $"{x.CreationDate.ToFarsi()} {x.CreationDate.DayOfWeek.DayOfWeeKToPersian()} {x.CreationDate.Hour}:{x.CreationDate.Minute}", Message = x.Message, TypeOfMessage = x.TypeOfMessage, RequestedDateFa = x.RequestedDateFa }).ToList(); List res = raw.Select(x => new TaskMessageViewModel() { SenderId = x.SenderId, CreationDate = x.CreationDate, Message = x.Message, TypeOfMessage = x.TypeOfMessage, ReceiverId = x.ReceiverId, SenderName = _accountRepository.GetAccountViewModel(x.SenderId).Fullname }).ToList(); return res; } }