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 { /// /// 题目管理控制器 /// 处理题目相关的操作,如CRUD、按标题查找等 /// [Route("api/question")] [ApiController] public class QuestionController : ControllerBase { private readonly IQuestionService _questionService; private readonly UserManager _userManager; /// /// 初始化题目控制器 /// /// 题目服务 /// 用户管理服务 public QuestionController(IQuestionService questionService, UserManager userManager) { _questionService = questionService; _userManager = userManager; } #region 题目基本信息CRUD操作 /// /// 获取题目列表(支持搜索和分页) /// /// 查询参数 /// 题目列表 /// 成功获取题目列表 /// 获取失败 [HttpGet] [Authorize(Roles = "Teacher,Admin")] public async Task GetAll([FromQuery] QueryParameter query) { var result = await _questionService.GetAllAsync(query); if (!result.Status) { return BadRequest(result.Message); } return Ok(result.Result); } /// /// 根据ID获取题目详细信息 /// /// 题目ID /// 题目详细信息 /// 成功获取题目信息 /// 题目未找到或获取失败 [HttpGet("{id}")] [Authorize(Roles = "Teacher,Admin")] public async Task GetById(Guid id) { var result = await _questionService.GetAsync(id); if (!result.Status) { return BadRequest(result.Message); } return Ok(result.Result); } /// /// 创建新题目 /// /// 题目数据传输对象 /// 创建结果 /// 创建成功 /// 创建失败 [HttpPost] [Authorize(Roles = "Teacher,Admin")] public async Task Create([FromBody] QuestionDto model) { var result = await _questionService.AddAsync(model); if (!result.Status) { return BadRequest(result.Message); } return Ok(result.Result); } /// /// 更新题目信息 /// /// 题目数据传输对象 /// 更新结果 /// 更新成功 /// 更新失败 [HttpPut] [Authorize(Roles = "Teacher,Admin")] public async Task Update([FromBody] QuestionDto model) { var result = await _questionService.UpdateAsync(model); if (!result.Status) { return BadRequest(result.Message); } return Ok(result.Result); } /// /// 删除题目(软删除) /// /// 题目ID /// 删除结果 /// 删除成功 /// 删除失败 [HttpDelete("{id}")] [Authorize(Roles = "Admin")] public async Task Delete(Guid id) { var result = await _questionService.DeleteAsync(id); if (!result.Status) { return BadRequest(result.Message); } return Ok(result.Message); } #endregion #region 题目业务逻辑操作 /// /// 根据标题查找题目 /// /// 题目标题 /// 题目信息 /// 成功找到题目 /// 题目未找到或查找失败 [HttpGet("by-title/{title}")] [Authorize(Roles = "Teacher,Admin")] public async Task GetByTitle(string title) { var result = await _questionService.FindByTitle(title); if (!result.Status) { return BadRequest(result.Message); } return Ok(result.Result); } /// /// 批量检查题目标题是否存在 /// /// 题目标题集合 /// 标题存在性检查结果 /// 检查成功 /// 检查失败 [HttpPost("check-titles")] [Authorize(Roles = "Teacher,Admin")] public async Task CheckTitlesExistence([FromBody] List titles) { var result = await _questionService.CheckTitlesExistence(titles); if (!result.Status) { return BadRequest(result.Message); } return Ok(result.Result); } #endregion } }