评教系统
This commit is contained in:
@@ -13,7 +13,7 @@ using Microsoft.EntityFrameworkCore;
|
||||
namespace Jiaowu.Api.Controllers;
|
||||
|
||||
[ApiController]
|
||||
[Authorize(Roles = AttendanceRoles)]
|
||||
[Authorize]
|
||||
[Route("api/attendance")]
|
||||
public sealed class AttendanceController(
|
||||
AppDbContext db,
|
||||
@@ -27,6 +27,7 @@ public sealed class AttendanceController(
|
||||
SystemRoles.Teacher;
|
||||
|
||||
[HttpGet("my-tasks")]
|
||||
[Authorize(Roles = AttendanceRoles)]
|
||||
public async Task<ActionResult> GetMyTasks(
|
||||
Guid? academicTermId,
|
||||
CancellationToken cancellationToken)
|
||||
@@ -57,6 +58,7 @@ public sealed class AttendanceController(
|
||||
}
|
||||
|
||||
[HttpGet("sheets")]
|
||||
[Authorize(Roles = AttendanceRoles)]
|
||||
public async Task<ActionResult> GetSheets(
|
||||
Guid teachingTaskId,
|
||||
CancellationToken cancellationToken)
|
||||
@@ -88,6 +90,7 @@ public sealed class AttendanceController(
|
||||
}
|
||||
|
||||
[HttpPost("sheets")]
|
||||
[Authorize(Roles = AttendanceRoles)]
|
||||
public async Task<ActionResult> CreateSheet(
|
||||
AttendanceSheetRequest request,
|
||||
CancellationToken cancellationToken)
|
||||
@@ -123,6 +126,7 @@ public sealed class AttendanceController(
|
||||
}
|
||||
|
||||
[HttpGet("sheets/{id:guid}")]
|
||||
[Authorize(Roles = AttendanceRoles)]
|
||||
public async Task<ActionResult> GetSheet(Guid id, CancellationToken cancellationToken)
|
||||
{
|
||||
var sheet = await db.AttendanceSheets.AsNoTracking()
|
||||
@@ -184,6 +188,7 @@ public sealed class AttendanceController(
|
||||
}
|
||||
|
||||
[HttpPut("sheets/{id:guid}/records")]
|
||||
[Authorize(Roles = AttendanceRoles)]
|
||||
public async Task<ActionResult> UpdateRecords(
|
||||
Guid id,
|
||||
AttendanceRecordsRequest request,
|
||||
@@ -193,6 +198,7 @@ public sealed class AttendanceController(
|
||||
.Include(x => x.Records)
|
||||
.Include(x => x.TeachingTask)
|
||||
.ThenInclude(x => x!.Teachers)
|
||||
.ThenInclude(x => x.Teacher)
|
||||
.FirstOrDefaultAsync(x => x.Id == id, cancellationToken);
|
||||
if (sheet is null) return NotFound();
|
||||
if (!CanManageSheet(sheet)) return Forbid();
|
||||
@@ -213,6 +219,7 @@ public sealed class AttendanceController(
|
||||
}
|
||||
|
||||
[HttpPost("sheets/{id:guid}/import")]
|
||||
[Authorize(Roles = AttendanceRoles)]
|
||||
public async Task<ActionResult> Import(
|
||||
Guid id,
|
||||
IFormFile file,
|
||||
@@ -223,6 +230,7 @@ public sealed class AttendanceController(
|
||||
.ThenInclude(x => x.Student)
|
||||
.Include(x => x.TeachingTask)
|
||||
.ThenInclude(x => x!.Teachers)
|
||||
.ThenInclude(x => x.Teacher)
|
||||
.FirstOrDefaultAsync(x => x.Id == id, cancellationToken);
|
||||
if (sheet is null) return NotFound();
|
||||
if (!CanManageSheet(sheet)) return Forbid();
|
||||
@@ -262,6 +270,7 @@ public sealed class AttendanceController(
|
||||
}
|
||||
|
||||
[HttpGet("sheets/{id:guid}/export.xlsx")]
|
||||
[Authorize(Roles = AttendanceRoles)]
|
||||
public async Task<ActionResult> Export(Guid id, CancellationToken cancellationToken)
|
||||
{
|
||||
var sheetData = await db.AttendanceSheets.AsNoTracking()
|
||||
@@ -308,11 +317,13 @@ public sealed class AttendanceController(
|
||||
}
|
||||
|
||||
[HttpPost("sheets/{id:guid}/submit")]
|
||||
[Authorize(Roles = AttendanceRoles)]
|
||||
public async Task<ActionResult> Submit(Guid id, CancellationToken cancellationToken)
|
||||
{
|
||||
var sheet = await db.AttendanceSheets
|
||||
.Include(x => x.TeachingTask)
|
||||
.ThenInclude(x => x!.Teachers)
|
||||
.ThenInclude(x => x.Teacher)
|
||||
.FirstOrDefaultAsync(x => x.Id == id, cancellationToken);
|
||||
if (sheet is null) return NotFound();
|
||||
if (!CanManageSheet(sheet)) return Forbid();
|
||||
@@ -496,6 +507,7 @@ public sealed class AttendanceController(
|
||||
.Include(r => r.AttendanceSheet)
|
||||
.ThenInclude(s => s!.TeachingTask)
|
||||
.ThenInclude(t => t!.Teachers)
|
||||
.ThenInclude(x => x.Teacher)
|
||||
.FirstOrDefaultAsync(r =>
|
||||
r.AttendanceSheetId == attendanceSheetId &&
|
||||
r.StudentId == studentId,
|
||||
@@ -538,11 +550,13 @@ public sealed class AttendanceController(
|
||||
}
|
||||
|
||||
[HttpDelete("sheets/{id:guid}")]
|
||||
[Authorize(Roles = AttendanceRoles)]
|
||||
public async Task<ActionResult> Delete(Guid id, CancellationToken cancellationToken)
|
||||
{
|
||||
var sheet = await db.AttendanceSheets
|
||||
.Include(x => x.TeachingTask)
|
||||
.ThenInclude(x => x!.Teachers)
|
||||
.ThenInclude(x => x.Teacher)
|
||||
.FirstOrDefaultAsync(x => x.Id == id, cancellationToken);
|
||||
if (sheet is null) return NotFound();
|
||||
if (!CanManageSheet(sheet)) return Forbid();
|
||||
|
||||
Reference in New Issue
Block a user