using System.Linq; using System.Threading.Tasks; using _0_Framework.Application; using _0_Framework.InfraStructure; using AccountManagement.Application.Contracts.Media; using AccountManagement.Application.Contracts.Task; using AccountManagement.Application.Contracts.TaskSchedule; using AccountManagement.Domain.TaskScheduleAgg; using Microsoft.EntityFrameworkCore; namespace AccountMangement.Infrastructure.EFCore.Repository; public class TaskScheduleRepository : RepositoryBase, ITaskScheduleRepository { private readonly AccountContext _accountContext; public TaskScheduleRepository(AccountContext accountContext) : base(accountContext) { _accountContext = accountContext; } public async Task GetDetails(long id) { var taskSchedule = await _accountContext.TaskSchedules.Include(x => x.TasksList).ThenInclude(x => x.Assigns) .Include(x => x.TasksList).ThenInclude(x => x.TaskMedias).ThenInclude(x => x.Media).FirstOrDefaultAsync(x => x.id == id); if (taskSchedule == null) { return null; } var firstTaskDetails = taskSchedule.TasksList.First(); var firstTimeAssigns = firstTaskDetails.Assigns.Where(x => x.FirstTimeCreation).ToList(); var assignedIds = firstTimeAssigns.Select(x => x.AssignedId).ToList(); var senderId = firstTaskDetails.SenderId; var assignedAccounts = await _accountContext.Accounts.Where(x => assignedIds.Contains(x.id)).ToListAsync(); var sender = await _accountContext.Accounts.FirstOrDefaultAsync(x => senderId == x.id); var viewModel = new TaskScheduleDetailsViewModel() { Title = firstTaskDetails.Title, Description = firstTaskDetails.Description, ContractingPartyName = firstTaskDetails.ContractingPartyName, AssignedName = assignedAccounts.Select(x => x.Fullname).ToList(), CreationDateFa = firstTaskDetails.CreationDate.ToFarsi(), SenderName = sender.Fullname, TaskScheduleType = taskSchedule.Type, TaskScheduleUnitType = taskSchedule.UnitType, UnitNumber = taskSchedule.UnitNumber, Count = taskSchedule.Type == TaskScheduleType.Limited ? taskSchedule.Count : "نامحدود", FirstEndTaskDate = firstTaskDetails.Assigns.FirstOrDefault()?.EndTaskDate.ToFarsi() ?? "", Medias = firstTaskDetails.TaskMedias.Select(x => new MediaViewModel() { Category = x.Media.Category, Id = x.MediaId, Type = x.Media.Type, Path = x.Media.Path, }).ToList(), }; return viewModel; } }