Files
tiku-backend.net/Tiku.Api/Controllers/StudentLearningContextController.cs
xiong 3f5957d744
Some checks failed
ci / release-gate (push) Has been cancelled
feat(content): establish v2 learning delivery foundation
2026-08-06 09:52:18 +08:00

65 lines
2.5 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Tiku.Api.Contracts;
using Tiku.Api.Security;
using Tiku.Application.Learning;
using Tiku.Application.Security;
namespace Tiku.Api.Controllers;
[ApiController]
[Tags("学生端-学习上下文")]
[Authorize(Policy = TikuPolicies.CurrentTenantMember)]
[RequireSaasFeature(SaasFeatureCatalog.Practice)]
[Produces("application/json")]
[Route("api/student")]
public sealed class StudentLearningContextController(
IStudentLearningTargetService service,
IStudentLearningCatalogService catalog,
LearningActorResolver actorResolver) : ControllerBase
{
[HttpGet("learning-context")]
[EndpointSummary("查询学生可用业务与当前学习目标")]
[ProducesResponseType<LearningContextItem>(StatusCodes.Status200OK)]
public Task<LearningContextItem> GetContext(CancellationToken cancellationToken)
{
return service.GetContextAsync(actorResolver.Resolve(), cancellationToken);
}
[HttpGet("learning-targets")]
[EndpointSummary("查询当前业务可选目标")]
[ProducesResponseType<IReadOnlyCollection<LearningTargetItem>>(StatusCodes.Status200OK)]
public Task<IReadOnlyCollection<LearningTargetItem>> GetTargets(
[FromQuery] Guid businessLineId,
CancellationToken cancellationToken)
{
return service.GetTargetsAsync(actorResolver.Resolve(), businessLineId, cancellationToken);
}
[HttpGet("catalog/resources")]
[EndpointSummary("查询由当前套餐、目标和班级授权编译出的认证学习目录")]
[ProducesResponseType<StudentLearningCatalogItem>(StatusCodes.Status200OK)]
public Task<StudentLearningCatalogItem> GetCatalog(
[FromQuery] Guid businessLineId,
CancellationToken cancellationToken)
{
return catalog.GetAsync(actorResolver.Resolve(), businessLineId, cancellationToken);
}
[HttpPut("learning-targets/{businessLineId:guid}")]
[EndpointSummary("变更当前业务的主目标和备选目标")]
[ProducesResponseType<LearningTargetSelectionItem>(StatusCodes.Status200OK)]
[ProducesResponseType<ProblemDetails>(StatusCodes.Status409Conflict)]
public Task<LearningTargetSelectionItem> ChangeTargets(
Guid businessLineId,
ChangeLearningTargetsDto request,
CancellationToken cancellationToken)
{
return service.ChangeTargetsAsync(
actorResolver.Resolve(),
businessLineId,
request.ToCommand(),
cancellationToken);
}
}