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 CreateExamAsync(AssignmentDto assignmentDto) { try { Assignment newAssi = _mapper.Map(assignmentDto); await _examRepository.AddAsync(newAssi); var context = _unitOfWork.GetDbContext(); 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 GetExamByIdAsync(Guid id) { var assignment = await _examRepository.GetFullExamByIdAsync(id); if (assignment == null) { throw new InvalidOperationException(""); } return _mapper.Map(assignment); } public async Task GetAllExamPreviewsAsync(Guid userId) { var assignments = await _examRepository.GetExamPreviewsByUserAsync(userId); var result = _mapper.Map>(assignments); return ApiResponse.Success(result: result); } public Task GetAllAsync(QueryParameter query) { throw new NotImplementedException(); } public async Task GetAsync(Guid id) { var assignment = await _examRepository.GetFullExamByIdAsync(id); if (assignment == null) { return ApiResponse.Error("获取失败"); } var result = _mapper.Map(assignment); return ApiResponse.Success(result: result); } public Task AddAsync(AssignmentDto model) { throw new NotImplementedException(); } public Task UpdateAsync(AssignmentDto model) { throw new NotImplementedException(); } public async Task DeleteAsync(Guid id) { try { var assignment = await _unitOfWork.GetRepository().GetFirstOrDefaultAsync(predicate: a => a.Id == id); if (assignment == null) return ApiResponse.Error("找不到该试卷"); _unitOfWork.GetRepository().Delete(id); _unitOfWork.GetRepository().Delete(assignment.ExamStructId); if (await _unitOfWork.SaveChangesAsync() > 0) { return ApiResponse.Success(); } return ApiResponse.Error("删除失败"); } catch (Exception ex) { return ApiResponse.Error("内部问题"); } } public async Task SubmissionAssignment(SubmissionDto submissionDto) { try { var submission = _mapper.Map(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 AssignmentToAllStudentsAsync(Guid id) { throw new NotImplementedException(); } public Task AssignmentToStudentsAsync(Guid assignementId, Guid studentId) { throw new NotImplementedException(); } public async Task GetAllSubmissionAsync(Guid id) { try { var result = await _examRepository.GetAllSubmissionPreviewsByUserAsync(id); var allExam = _mapper.Map>(result); return ApiResponse.Success(result: allExam); } catch (Exception ex) { return ApiResponse.Error($"Submission 内部错误, {ex.Message}"); } } } }