using System.Linq; using System.Threading.Tasks; using _0_Framework.Application; using _0_Framework.InfraStructure; using AccountManagement.Application.Contracts.Media; 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, 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; } }