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
}
}