Files
TechHelper/TechHelper.Server/Services/ExamService.cs
SpecialX a21ca80782 1
2025-06-27 19:03:10 +08:00

181 lines
4.3 KiB
C#

using AutoMapper;
using Entities.Contracts;
using Entities.DTO;
using Microsoft.VisualBasic;
using SharedDATA.Api;
using TechHelper.Context;
using TechHelper.Server.Repositories;
using TechHelper.Services;
namespace TechHelper.Server.Services
{
public class ExamService : IExamService
{
private readonly IUnitOfWork _unitOfWork;
private readonly IExamRepository _examRepository;
private readonly IMapper _mapper;
public ExamService(IUnitOfWork unitOfWork, IExamRepository examRepository, IMapper mapper)
{
_unitOfWork = unitOfWork;
_examRepository = examRepository;
_mapper = mapper;
}
public async Task<ApiResponse> CreateExamAsync(AssignmentDto assignmentDto)
{
try
{
Assignment newAssi = _mapper.Map<Assignment>(assignmentDto);
await _examRepository.AddAsync(newAssi);
var context = _unitOfWork.GetDbContext<ApplicationContext>();
foreach (var entry in context.ChangeTracker.Entries())
{
if (entry.State == Microsoft.EntityFrameworkCore.EntityState.Added)
{
if (entry.Entity is Question newQues)
{
newQues.CreatorId = newAssi.CreatorId;
}
}
}
if (await _unitOfWork.SaveChangesAsync() > 0)
{
return ApiResponse.Success();
}
return ApiResponse.Error("保存失败");
}
catch (Exception ex)
{
return ApiResponse.Error(ex.Message);
}
}
public async Task<AssignmentDto> GetExamByIdAsync(Guid id)
{
var assignment = await _examRepository.GetFullExamByIdAsync(id);
if (assignment == null)
{
throw new InvalidOperationException("");
}
return _mapper.Map<AssignmentDto>(assignment);
}
public async Task<ApiResponse> GetAllExamPreviewsAsync(Guid userId)
{
var assignments = await _examRepository.GetExamPreviewsByUserAsync(userId);
var result = _mapper.Map<List<AssignmentDto>>(assignments);
return ApiResponse.Success(result: result);
}
public Task<ApiResponse> GetAllAsync(QueryParameter query)
{
throw new NotImplementedException();
}
public async Task<ApiResponse> GetAsync(Guid id)
{
var assignment = await _examRepository.GetFullExamByIdAsync(id);
if (assignment == null)
{
return ApiResponse.Error("获取失败");
}
var result = _mapper.Map<AssignmentDto>(assignment);
return ApiResponse.Success(result: result);
}
public Task<ApiResponse> AddAsync(AssignmentDto model)
{
throw new NotImplementedException();
}
public Task<ApiResponse> UpdateAsync(AssignmentDto model)
{
throw new NotImplementedException();
}
public async Task<ApiResponse> DeleteAsync(Guid id)
{
try
{
var assignment = await _unitOfWork.GetRepository<Assignment>().GetFirstOrDefaultAsync(predicate: a => a.Id == id);
if (assignment == null) return ApiResponse.Error("找不到该试卷");
_unitOfWork.GetRepository<Assignment>().Delete(id);
_unitOfWork.GetRepository<AssignmentQuestion>().Delete(assignment.ExamStructId);
if (await _unitOfWork.SaveChangesAsync() > 0)
{
return ApiResponse.Success();
}
return ApiResponse.Error("删除失败");
}
catch (Exception ex)
{
return ApiResponse.Error("内部问题");
}
}
public async Task<ApiResponse> SubmissionAssignment(SubmissionDto submissionDto)
{
try
{
var submission = _mapper.Map<Submission>(submissionDto);
await _examRepository.AddAsync(submission);
if (await _unitOfWork.SaveChangesAsync() > 0)
{
return ApiResponse.Success("保存成功");
}
return ApiResponse.Error("保存失败");
}
catch (Exception ex)
{
return ApiResponse.Error($"出现了错误,{ex.Message} innerEx:{ex.InnerException}");
}
}
public Task<ApiResponse> AssignmentToAllStudentsAsync(Guid id)
{
throw new NotImplementedException();
}
public Task<ApiResponse> AssignmentToStudentsAsync(Guid assignementId, Guid studentId)
{
throw new NotImplementedException();
}
public async Task<ApiResponse> GetAllSubmissionAsync(Guid id)
{
try
{
var result = await _examRepository.GetAllSubmissionPreviewsByUserAsync(id);
var allExam = _mapper.Map<List<AssignmentDto>>(result);
return ApiResponse.Success(result: allExam);
}
catch (Exception ex)
{
return ApiResponse.Error($"Submission 内部错误, {ex.Message}");
}
}
}
}