using Entities.Contracts;
using Entities.DTO;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using System.Net;
using System.Security.Claims;
using TechHelper.Services;
namespace TechHelper.Server.Controllers
{
///
/// 班级管理控制器
/// 处理班级相关的操作,如用户注册到班级、获取班级学生等
///
[Route("api/class")]
[ApiController]
public class ClassController : ControllerBase
{
private IClassService _classService;
private UserManager _userManager;
///
/// 初始化班级控制器
///
/// 班级服务
/// 用户管理服务
public ClassController(IClassService classService, UserManager userManager)
{
_classService = classService;
_userManager = userManager;
}
///
/// 用户注册到班级
///
/// 用户注册到班级的数据传输对象
/// 操作结果
/// 注册成功
/// 注册失败
[HttpPost("userRegiste")]
public async Task UserRegisterToClass(
[FromBody] UserRegistrationToClassDto toClass)
{
var result = await _classService.UserRegister(toClass);
if (!result.Status) return BadRequest(result.Message);
return Ok();
}
///
/// 获取班级学生列表
/// 仅限教师角色访问,根据教师所在班级信息获取学生列表
///
/// 班级学生列表
/// 成功获取学生列表
/// 权限不足或班级信息缺失
[HttpPost("getClassStudents")]
public async Task GetClassStudents()
{
if (User.IsInRole("Teacher"))
{
var gradeClaim = User.FindFirst("Grade")?.Value;
var classClaim = User.FindFirst("Class")?.Value;
if (string.IsNullOrEmpty(gradeClaim) || string.IsNullOrEmpty(classClaim))
{
return BadRequest("未识别到你加入的班级信息(年级或班级声明缺失)。");
}
if (!byte.TryParse(gradeClaim, out byte grade) || !byte.TryParse(classClaim, out byte cla))
{
return BadRequest("你班级或年级信息格式不正确。");
}
var classDto = new ClassDto
{
Grade = grade,
Class = cla
};
var result = await _classService.GetClassStudents(classDto);
var css = result.Result as ICollection;
if (css == null) return BadRequest("你还没有学生");
List sts = new List();
css?.ToList().ForEach(s => sts.Add(new StudentDto
{
DisplayName = s.Student.DisplayName,
Id = s.Student.Id,
}));
if (!result.Status)
{
return BadRequest(result.Message);
}
return Ok(sts);
}
else
{
return BadRequest("你没有权限查看,未识别到你的教师身份。");
}
}
///
/// 创建新班级
///
/// 班级数据传输对象
/// 操作结果
/// 班级创建成功
/// 班级创建失败
[HttpPost("Create")]
public async Task Create(
[FromBody] ClassDto classDto)
{
var result = await _classService.AddAsync(classDto);
if (!result.Status) return BadRequest(result.Message);
return Ok();
}
///
/// 获取指定年级的所有班级列表
///
/// 年级编号
/// 班级列表
/// 成功获取班级列表
/// 获取失败
[HttpPost("GetGradeClasses")]
public async Task GetGradeClasses(
[FromBody] byte classDto)
{
var result = await _classService.GetGradeClasses(classDto);
if (!result.Status) return BadRequest(result.Message);
return Ok(result.Result);
}
}
}