feat: add practice session workflow endpoints

This commit is contained in:
xiong
2026-07-26 15:25:33 +08:00
parent db319ef5a2
commit e505384ecf
7 changed files with 1090 additions and 1 deletions

View File

@@ -15,6 +15,88 @@ public sealed class LearningController(
ICurrentUser currentUser,
ICurrentTenant currentTenant) : ControllerBase
{
[HttpPost("practice-sessions")]
[EndpointSummary("创建练习会话")]
[ProducesResponseType<PracticeSessionItem>(StatusCodes.Status200OK)]
[ProducesResponseType<ProblemDetails>(StatusCodes.Status409Conflict)]
public async Task<ActionResult<PracticeSessionItem>> CreatePracticeSession(
CreatePracticeSessionDto request,
CancellationToken cancellationToken)
{
return Ok(await learningActivityService.CreatePracticeSessionAsync(
ResolveActor(),
request.ToCommand(),
cancellationToken));
}
[HttpGet("practice-sessions/detail")]
[EndpointSummary("获取练习会话详情")]
[ProducesResponseType<PracticeSessionDetailItem>(StatusCodes.Status200OK)]
[ProducesResponseType<ProblemDetails>(StatusCodes.Status404NotFound)]
public async Task<ActionResult<PracticeSessionDetailItem>> GetPracticeSessionDetail(
[FromQuery] PracticeSessionQueryDto query,
CancellationToken cancellationToken)
{
return Ok(await learningActivityService.GetPracticeSessionDetailAsync(
ResolveActor(),
query.ToFilter(),
cancellationToken));
}
[HttpPost("practice-sessions/submit")]
[EndpointSummary("提交练习会话并生成报告")]
[ProducesResponseType<PracticeSessionReportItem>(StatusCodes.Status200OK)]
[ProducesResponseType<ProblemDetails>(StatusCodes.Status404NotFound)]
public async Task<ActionResult<PracticeSessionReportItem>> SubmitPracticeSession(
SubmitPracticeSessionDto request,
CancellationToken cancellationToken)
{
return Ok(await learningActivityService.SubmitPracticeSessionAsync(
ResolveActor(),
request.ToFilter(),
cancellationToken));
}
[HttpGet("practice-sessions/report")]
[EndpointSummary("获取练习会话报告")]
[ProducesResponseType<PracticeSessionReportItem>(StatusCodes.Status200OK)]
[ProducesResponseType<ProblemDetails>(StatusCodes.Status404NotFound)]
public async Task<ActionResult<PracticeSessionReportItem>> GetPracticeSessionReport(
[FromQuery] PracticeSessionQueryDto query,
CancellationToken cancellationToken)
{
return Ok(await learningActivityService.GetPracticeSessionReportAsync(
ResolveActor(),
query.ToFilter(),
cancellationToken));
}
[HttpGet("practice-reports")]
[EndpointSummary("查询练习报告列表")]
[ProducesResponseType<LearningList<PracticeSessionReportItem>>(StatusCodes.Status200OK)]
public async Task<ActionResult<LearningList<PracticeSessionReportItem>>> GetPracticeReports(
[FromQuery] PracticeSessionQueryDto query,
CancellationToken cancellationToken)
{
return Ok(await learningActivityService.GetPracticeReportsAsync(
ResolveActor(),
query.ToFilter(),
cancellationToken));
}
[HttpGet("practice-sessions/history")]
[EndpointSummary("查询练习历史")]
[ProducesResponseType<LearningList<PracticeHistoryItem>>(StatusCodes.Status200OK)]
public async Task<ActionResult<LearningList<PracticeHistoryItem>>> GetPracticeHistory(
[FromQuery] PracticeSessionQueryDto query,
CancellationToken cancellationToken)
{
return Ok(await learningActivityService.GetPracticeHistoryAsync(
ResolveActor(),
query.ToFilter(),
cancellationToken));
}
[HttpPost("answers")]
[EndpointSummary("提交题目答案")]
[ProducesResponseType<AnswerRecordItem>(StatusCodes.Status200OK)]