using Asp.Versioning; using MediatR; using Microsoft.AspNetCore.Mvc; using Mirea.Api.DataAccess.Application.Cqrs.Discipline.Queries.GetDisciplineDetails; using Mirea.Api.DataAccess.Application.Cqrs.Discipline.Queries.GetDisciplineList; using Mirea.Api.Dto.Responses; using Mirea.Api.Endpoint.Common.Attributes; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Mirea.Api.Endpoint.Controllers.V1; [ApiVersion("1.0")] [CacheMaxAge(true)] public class DisciplineController(IMediator mediator) : BaseController { /// <summary> /// Gets a paginated list of disciplines. /// </summary> /// <param name="page">Page number. Start from 0.</param> /// <param name="pageSize">Number of items per page.</param> /// <returns>Paginated list of disciplines.</returns> [HttpGet] [BadRequestResponse] public async Task<ActionResult<List<DisciplineResponse>>> Get([FromQuery] int? page, [FromQuery] int? pageSize) { var result = await mediator.Send(new GetDisciplineListQuery() { Page = page, PageSize = pageSize }); return Ok(result.Disciplines .Select(d => new DisciplineResponse() { Id = d.Id, Name = d.Name }) ); } /// <summary> /// Gets details of a specific discipline by ID. /// </summary> /// <param name="id">Discipline ID.</param> /// <returns>Details of the specified discipline.</returns> [HttpGet("{id:int}")] [BadRequestResponse] [NotFoundResponse] public async Task<ActionResult<DisciplineResponse>> GetDetails(int id) { var result = await mediator.Send(new GetDisciplineInfoQuery() { Id = id }); return Ok(new DisciplineResponse() { Id = result.Id, Name = result.Name }); } }