using Entities.Contracts; using Entities.DTO; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using TechHelper.Services; using TechHelper.Services.Beta; namespace TechHelper.Server.Controllers { [Route("api/submission-detail")] [ApiController] [Authorize] public class SubmissionDetailController : ControllerBase { private readonly UserManager _userManager; private readonly ISubmissionDetailService _submissionDetailService; public SubmissionDetailController(UserManager userManager, ISubmissionDetailService submissionDetailService) { _userManager = userManager; _submissionDetailService = submissionDetailService; } #region 基本CRUD操作 /// /// 获取所有提交详情 /// /// 查询参数 /// 提交详情列表 [HttpGet()] [Authorize(Roles = "Admin,Teacher")] public async Task GetAllAsync([FromQuery] QueryParameter query) { var result = await _submissionDetailService.GetAllAsync(query); return result.Status ? Ok(result) : BadRequest(result.Message); } /// /// 根据ID获取提交详情 /// /// 提交详情ID /// 提交详情详情 [HttpGet("{id:guid}")] public async Task GetAsync(Guid id) { var result = await _submissionDetailService.GetAsync(id); return result.Status ? Ok(result) : BadRequest(result.Message); } /// /// 创建提交详情 /// /// 提交详情数据传输对象 /// 创建结果 [HttpPost()] public async Task AddAsync([FromBody] SubmissionDetailDto model) { var result = await _submissionDetailService.AddAsync(model); return result.Status ? StatusCode(201, result) : BadRequest(result.Message); } /// /// 更新提交详情 /// /// 提交详情ID /// 提交详情数据传输对象 /// 更新结果 [HttpPut("{id:guid}")] public async Task UpdateAsync(Guid id, [FromBody] SubmissionDetailDto model) { if (id != model.Id) { return BadRequest("路由ID与请求体中的ID不匹配。"); } var result = await _submissionDetailService.UpdateAsync(model); return result.Status ? Ok(result) : BadRequest(result.Message); } /// /// 删除提交详情 /// /// 提交详情ID /// 删除结果 [HttpDelete("delete/{id:guid}")] public async Task DeleteAsync(Guid id) { var result = await _submissionDetailService.DeleteAsync(id); return result.Status ? NoContent() : BadRequest(result.Message); } #endregion #region 特殊操作 /// /// 根据提交ID获取提交详情列表 /// /// 提交ID /// 提交详情列表 [HttpGet("by-submission/{submissionId:guid}")] public async Task GetBySubmissionIdAsync(Guid submissionId) { var result = await _submissionDetailService.GetBySubmissionIdAsync(submissionId); return result.Status ? Ok(result) : BadRequest(result.Message); } /// /// 根据学生ID和考试ID获取提交详情 /// /// 学生ID /// 考试ID /// 提交详情列表 [HttpGet("by-student-exam")] public async Task GetByStudentAndExamAsync([FromQuery] Guid studentId, [FromQuery] Guid examId) { var result = await _submissionDetailService.GetByStudentAndExamAsync(studentId, examId); return result.Status ? Ok(result) : BadRequest(result.Message); } /// /// 批量创建提交详情 /// /// 提交ID /// 提交详情列表 /// 创建结果 [HttpPost("batch-create/{submissionId:guid}")] public async Task BatchCreateAsync(Guid submissionId, [FromBody] List details) { var result = await _submissionDetailService.BatchCreateAsync(submissionId, details); return result.Status ? StatusCode(201, result) : BadRequest(result.Message); } /// /// 批量更新提交详情 /// /// 提交详情列表 /// 更新结果 [HttpPut("batch-update")] public async Task BatchUpdateAsync([FromBody] List details) { var result = await _submissionDetailService.BatchUpdateAsync(details); return result.Status ? Ok(result) : BadRequest(result.Message); } /// /// 更新提交详情评分 /// /// 提交详情ID /// 分数 /// 反馈 /// 更新结果 [HttpPut("{detailId:guid}/score")] public async Task UpdateScoreAsync(Guid detailId, [FromQuery] float? points, [FromQuery] string? feedback) { var result = await _submissionDetailService.UpdateScoreAsync(detailId, points, feedback); return result.Status ? Ok(result) : BadRequest(result.Message); } /// /// 获取错题详情 /// /// 学生ID /// 考试ID /// 错题详情列表 [HttpGet("error-details")] [Authorize(Roles = "Student,Teacher")] public async Task GetErrorDetailsAsync([FromQuery] Guid studentId, [FromQuery] Guid examId) { var result = await _submissionDetailService.GetErrorDetailsAsync(studentId, examId); return result.Status ? Ok(result) : BadRequest(result.Message); } /// /// 获取正确题详情 /// /// 学生ID /// 考试ID /// 正确题详情列表 [HttpGet("correct-details")] [Authorize(Roles = "Student,Teacher")] public async Task GetCorrectDetailsAsync([FromQuery] Guid studentId, [FromQuery] Guid examId) { var result = await _submissionDetailService.GetCorrectDetailsAsync(studentId, examId); return result.Status ? Ok(result) : BadRequest(result.Message); } /// /// 获取未批改的提交详情 /// /// 未批改的提交详情列表 [HttpGet("ungraded")] [Authorize(Roles = "Teacher")] public async Task GetUngradedDetailsAsync() { var user = await _userManager.FindByEmailAsync(User.Identity.Name); if (user == null) { return NotFound("未找到当前用户信息。"); } var result = await _submissionDetailService.GetUngradedDetailsAsync(user.Id); return result.Status ? Ok(result) : BadRequest(result.Message); } /// /// 批量更新提交详情状态 /// /// 提交ID /// 状态 /// 更新结果 [HttpPut("{submissionId:guid}/status")] public async Task UpdateStatusAsync(Guid submissionId, [FromQuery] SubmissionStatus status) { var result = await _submissionDetailService.UpdateStatusAsync(submissionId, status); return result.Status ? Ok(result) : BadRequest(result.Message); } #endregion } }