using Entities.Contracts; using Entities.DTO; using Microsoft.EntityFrameworkCore; using SharedDATA.Api; using TechHelper.Repository; namespace TechHelper.Server.Repositories { public class ExamRepository : IExamRepository { private readonly IUnitOfWork _unitOfWork; private readonly IRepository _assignmentRepo; private readonly IRepository _questionRepo; private readonly IRepository _assignQuestionRepo; public ExamRepository(IUnitOfWork unitOfWork) { _unitOfWork = unitOfWork; _assignmentRepo = _unitOfWork.GetRepository(); _assignQuestionRepo = _unitOfWork.GetRepository(); } public async Task GetFullExamByIdAsync(Guid assignmentId) { var result = await _assignmentRepo.GetFirstOrDefaultAsync( predicate: a => a.Id == assignmentId, include: i => i.Include(a => a.ExamStruct) ); result.ExamStruct = await GetNeed(result.ExamStructId)?? null; return result; } public async Task GetNeed(Guid id) { var result = await _assignQuestionRepo.GetFirstOrDefaultAsync( predicate: aq => aq.Id == id, include: i => i .Include(aq => aq.ChildrenAssignmentQuestion) .Include(aq => aq.Question) .ThenInclude(q => q.Lesson) .Include(aq => aq.Question) .ThenInclude(q => q.KeyPoint) ); if (result == null) { return null; } var loadedChildren = new List(); foreach (var child in result.ChildrenAssignmentQuestion) { var loadedChild = await GetNeed(child.Id); if (loadedChild != null) { loadedChildren.Add(loadedChild); } } result.ChildrenAssignmentQuestion = loadedChildren; return result; } public async Task> GetExamPreviewsByUserAsync(Guid userId) { return await _assignmentRepo.GetAllAsync( predicate: a => a.CreatorId == userId && !a.IsDeleted); } public async Task AddAsync(Assignment assignment) { await _assignmentRepo.InsertAsync(assignment); } public async Task AddAsync(AssignmentQuestion assignment) { } public async Task AddAsync(Question assignment) { } public async Task AddAsync(AssignmentClass assignment) { } } }