65 lines
2.5 KiB
C#
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);
|
|
}
|
|
}
|