Files
TechHelper/TechHelper.Server/Repositories/ExamRepository.cs
2025-06-24 11:37:12 +08:00

103 lines
2.3 KiB
C#

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<Assignment> _assignmentRepo;
private readonly IRepository<Question> _questionRepo;
private readonly IRepository<AssignmentQuestion> _assignQuestionRepo;
public ExamRepository(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
_assignmentRepo = _unitOfWork.GetRepository<Assignment>();
}
public async Task<Assignment?> 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<AssignmentQuestion?> 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<AssignmentQuestion>();
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<IEnumerable<Assignment>> 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(QuestionGroupDto qg)
{
if (qg.ValidQuestionGroup)
{
}
}
public async Task AddAsync(AssignmentQuestion assignment)
{
}
public async Task AddAsync(Question assignment)
{
}
public async Task AddAsync(AssignmentClass assignment)
{
}
}
}