重构项目结构,移除Assignment相关功能,优化Submission模块
Some checks failed
TechAct / explore-gitea-actions (push) Failing after 12s
Some checks failed
TechAct / explore-gitea-actions (push) Failing after 12s
This commit is contained in:
@@ -1,11 +1,15 @@
|
||||
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
|
||||
{
|
||||
@@ -17,7 +21,7 @@ namespace TechHelper.Server.Controllers
|
||||
[ApiController]
|
||||
public class ClassController : ControllerBase
|
||||
{
|
||||
private IClassService _classService;
|
||||
private TechHelper.Services.Beta.IClassService _classService;
|
||||
private UserManager<User> _userManager;
|
||||
|
||||
/// <summary>
|
||||
@@ -25,12 +29,159 @@ namespace TechHelper.Server.Controllers
|
||||
/// </summary>
|
||||
/// <param name="classService">班级服务</param>
|
||||
/// <param name="userManager">用户管理服务</param>
|
||||
public ClassController(IClassService classService, UserManager<User> userManager)
|
||||
public ClassController(TechHelper.Services.Beta.IClassService classService, UserManager<User> userManager)
|
||||
{
|
||||
_classService = classService;
|
||||
_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 _classService.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 _classService.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]
|
||||
public async Task<IActionResult> 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<IActionResult> Create([FromBody] ClassCreateDto dto)
|
||||
{
|
||||
var result = await _classService.AdminAddAsync(dto);
|
||||
|
||||
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 = "Admin")]
|
||||
public async Task<IActionResult> Update([FromBody] ClassDto model)
|
||||
{
|
||||
var result = await _classService.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 _classService.DeleteAsync(id);
|
||||
|
||||
if (!result.Status)
|
||||
{
|
||||
return BadRequest(result.Message);
|
||||
}
|
||||
|
||||
return Ok(result.Message);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 班级用户管理
|
||||
|
||||
/// <summary>
|
||||
/// 验证班级信息是否存在
|
||||
/// </summary>
|
||||
/// <param name="toClass">包含学校名称、年级和班级名称的数据传输对象</param>
|
||||
/// <returns>验证结果和班级信息</returns>
|
||||
/// <response code="200">验证成功,返回班级信息</response>
|
||||
/// <response code="400">验证失败</response>
|
||||
[HttpPost("validate")]
|
||||
[Authorize(Roles = "Student,Teacher,Admin")]
|
||||
public async Task<IActionResult> ValidateClassInfo(
|
||||
[FromBody] ClassValidDto toClass)
|
||||
{
|
||||
var result = await _classService.ValidateClassRegistration(toClass);
|
||||
|
||||
if (!result.Status) return BadRequest(result.Message);
|
||||
|
||||
return Ok(result.Result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 用户注册到班级
|
||||
/// </summary>
|
||||
@@ -39,107 +190,68 @@ namespace TechHelper.Server.Controllers
|
||||
/// <response code="200">注册成功</response>
|
||||
/// <response code="400">注册失败</response>
|
||||
[HttpPost("userRegiste")]
|
||||
[Authorize(Roles = "Student,Teacher,Admin")]
|
||||
public async Task<IActionResult> UserRegisterToClass(
|
||||
[FromBody] UserRegistrationToClassDto toClass)
|
||||
[FromBody] RegisterUserToClassDto toClass)
|
||||
{
|
||||
|
||||
var result = await _classService.UserRegister(toClass);
|
||||
|
||||
if (!result.Status) return BadRequest(result.Message);
|
||||
|
||||
return Ok();
|
||||
return Ok(result.Message);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取班级学生列表
|
||||
/// 仅限教师角色访问,根据教师所在班级信息获取学生列表
|
||||
/// 根据班级ID获取班级学生列表
|
||||
/// </summary>
|
||||
/// <param name="classId">班级ID</param>
|
||||
/// <returns>班级学生列表</returns>
|
||||
/// <response code="200">成功获取学生列表</response>
|
||||
/// <response code="400">权限不足或班级信息缺失</response>
|
||||
[HttpPost("getClassStudents")]
|
||||
public async Task<IActionResult> GetClassStudents()
|
||||
/// <response code="400">班级未找到或获取失败</response>
|
||||
[HttpGet("students/{classId}")]
|
||||
[Authorize(Roles = "Teacher,Admin")]
|
||||
public async Task<IActionResult> GetClassStudentsById(Guid classId)
|
||||
{
|
||||
if (User.IsInRole("Teacher"))
|
||||
var result = await _classService.GetClassStudentsAsync(classId);
|
||||
|
||||
if (!result.Status)
|
||||
{
|
||||
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<ClassStudent>;
|
||||
if (css == null) return BadRequest("你还没有学生");
|
||||
|
||||
|
||||
List<StudentDto> sts = new List<StudentDto>();
|
||||
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);
|
||||
return BadRequest(result.Message);
|
||||
}
|
||||
else
|
||||
{
|
||||
return BadRequest("你没有权限查看,未识别到你的教师身份。");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建新班级
|
||||
/// </summary>
|
||||
/// <param name="classDto">班级数据传输对象</param>
|
||||
/// <returns>操作结果</returns>
|
||||
/// <response code="200">班级创建成功</response>
|
||||
/// <response code="400">班级创建失败</response>
|
||||
[HttpPost("Create")]
|
||||
public async Task<IActionResult> Create(
|
||||
[FromBody] ClassDto classDto)
|
||||
{
|
||||
var result = await _classService.AddAsync(classDto);
|
||||
if (!result.Status) return BadRequest(result.Message);
|
||||
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取指定年级的所有班级列表
|
||||
/// </summary>
|
||||
/// <param name="classDto">年级编号</param>
|
||||
/// <returns>班级列表</returns>
|
||||
/// <response code="200">成功获取班级列表</response>
|
||||
/// <response code="400">获取失败</response>
|
||||
[HttpPost("GetGradeClasses")]
|
||||
public async Task<IActionResult> GetGradeClasses(
|
||||
[FromBody] byte classDto)
|
||||
{
|
||||
var result = await _classService.GetGradeClasses(classDto);
|
||||
if (!result.Status) return BadRequest(result.Message);
|
||||
|
||||
return Ok(result.Result);
|
||||
}
|
||||
|
||||
|
||||
[HttpGet("classes")]
|
||||
[Authorize(Roles = "Teacher, Student")]
|
||||
public async Task<IActionResult> 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<IActionResult> 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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user