using Entities.Contracts;
using Entities.DTO;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
using System.Net;
using System.Security.Claims;
using TechHelper.Services.Beta;
using TechHelper.Services;
using Entities.DTO.Class;
namespace TechHelper.Server.Controllers
{
///
/// 班级管理控制器
/// 处理班级相关的操作,如用户注册到班级、获取班级学生等
///
[Route("api/class")]
[ApiController]
public class ClassController : ControllerBase
{
private TechHelper.Services.Beta.IClassService _classService;
private UserManager _userManager;
///
/// 初始化班级控制器
///
/// 班级服务
/// 用户管理服务
public ClassController(TechHelper.Services.Beta.IClassService classService, UserManager userManager)
{
_classService = classService;
_userManager = userManager;
}
#region 班级基本信息CRUD操作
///
/// 获取班级列表(支持搜索)
///
/// 查询参数
/// 班级列表
/// 成功获取班级列表
/// 获取失败
[HttpGet]
[Authorize(Roles = "Teacher,Admin")]
public async Task GetAll([FromQuery] QueryParameter query)
{
var result = await _classService.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 _classService.GetAsync(id);
if (!result.Status)
{
return BadRequest(result.Message);
}
return Ok(result.Result);
}
///
/// 创建新班级
///
/// 班级数据传输对象
/// 创建结果
/// 创建成功
/// 创建失败
[HttpPost]
public async Task Create([FromBody] ClassDto model)
{
var result = await _classService.AddAsync(model);
if (!result.Status)
{
return BadRequest(result.Message);
}
return Ok(result.Result);
}
[HttpPost("AdminCreate")]
[Authorize(Roles = "Admin")]
public async Task Create([FromBody] ClassCreateDto dto)
{
var result = await _classService.AdminAddAsync(dto);
if (!result.Status)
{
return BadRequest(result.Message);
}
return Ok(result.Result);
}
///
/// 更新班级信息
///
/// 班级数据传输对象
/// 更新结果
/// 更新成功
/// 更新失败
[HttpPut]
[Authorize(Roles = "Admin")]
public async Task Update([FromBody] ClassDto model)
{
var result = await _classService.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 _classService.DeleteAsync(id);
if (!result.Status)
{
return BadRequest(result.Message);
}
return Ok(result.Message);
}
#endregion
#region 班级用户管理
///
/// 验证班级信息是否存在
///
/// 包含学校名称、年级和班级名称的数据传输对象
/// 验证结果和班级信息
/// 验证成功,返回班级信息
/// 验证失败
[HttpPost("validate")]
[Authorize(Roles = "Student,Teacher,Admin")]
public async Task ValidateClassInfo(
[FromBody] ClassValidDto toClass)
{
var result = await _classService.ValidateClassRegistration(toClass);
if (!result.Status) return BadRequest(result.Message);
return Ok(result.Result);
}
///
/// 用户注册到班级
///
/// 用户注册到班级的数据传输对象
/// 操作结果
/// 注册成功
/// 注册失败
[HttpPost("userRegiste")]
[Authorize(Roles = "Student,Teacher,Admin")]
public async Task UserRegisterToClass(
[FromBody] RegisterUserToClassDto toClass)
{
var result = await _classService.UserRegister(toClass);
if (!result.Status) return BadRequest(result.Message);
return Ok(result.Message);
}
///
/// 根据班级ID获取班级学生列表
///
/// 班级ID
/// 班级学生列表
/// 成功获取学生列表
/// 班级未找到或获取失败
[HttpGet("students/{classId}")]
[Authorize(Roles = "Teacher,Admin")]
public async Task GetClassStudentsById(Guid classId)
{
var result = await _classService.GetClassStudentsAsync(classId);
if (!result.Status)
{
return BadRequest(result.Message);
}
return Ok(result.Result);
}
[HttpGet("classes")]
[Authorize(Roles = "Teacher, Student")]
public async Task GetUserInjoinedClass()
{
var user = await _userManager.FindByEmailAsync(User.Identity.Name);
var userid = user.Id;
var result = await _classService.GetUserInjoinedClasses(userid);
if (result.Status)
return Ok(result.Result);
else
return BadRequest(result.Message);
}
[HttpGet("injoint/{id:guid}")]
[Authorize(Roles = "Teacher, Student")]
public async Task InjoinClass(Guid id)
{
var user = await _userManager.FindByEmailAsync(User.Identity.Name);
var userid = user.Id;
var registerClass = new RegisterUserToClassDto { ClassId = id, UserId = userid, Role = user.Role ?? UserRoles.Student };
var result = await _classService.UserRegister(registerClass);
if (result.Status)
return Ok(result.Result);
else
return BadRequest(result.Message);
}
#endregion
}
}