Files
TechHelper/TechHelper.Server/Controllers/QuestionController.cs
SpecialX ac900159ba
Some checks failed
TechAct / explore-gitea-actions (push) Failing after 12s
重构项目结构,移除Assignment相关功能,优化Submission模块
2025-10-09 18:57:28 +08:00

189 lines
5.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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