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