108 lines
2.8 KiB
C#
108 lines
2.8 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>();
|
|
_assignQuestionRepo = _unitOfWork.GetRepository<AssignmentQuestion>();
|
|
}
|
|
|
|
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(AssignmentQuestion assignment)
|
|
{
|
|
}
|
|
|
|
public async Task AddAsync(Question assignment)
|
|
{
|
|
}
|
|
|
|
public async Task AddAsync(AssignmentClass assignment)
|
|
{
|
|
}
|
|
|
|
public async Task AddAsync(Submission submission)
|
|
{
|
|
await _unitOfWork.GetRepository<Submission>().InsertAsync(submission);
|
|
}
|
|
|
|
public async Task<IEnumerable<Assignment>> GetAllSubmissionPreviewsByUserAsync(Guid id)
|
|
{
|
|
var submissions = await _unitOfWork.GetRepository<Submission>().GetAllAsync(predicate: s => s.StudentId == id, include: i => i.Include(s => s.Assignment));
|
|
if (submissions == null || !submissions.Any())
|
|
return Enumerable.Empty<Assignment>();
|
|
return submissions.ToList().Select(s => s.Assignment).Where(a => a != null).Distinct().ToList();
|
|
}
|
|
}
|
|
}
|