using MediatR; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Mirea.Api.DataAccess.Application.Cqrs.Faculty.Queries.GetFacultyDetails; using Mirea.Api.DataAccess.Application.Cqrs.Faculty.Queries.GetFacultyList; using Mirea.Api.Dto.Responses; using Mirea.Api.Endpoint.Common.Attributes; using Swashbuckle.AspNetCore.Annotations; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Mirea.Api.Endpoint.Controllers.V1 { public class FacultyController(IMediator mediator) : BaseControllerV1 { /// /// Gets a paginated list of faculties. /// /// Page number. Start from 0. /// Number of items per page. /// Paginated list of faculties. [HttpGet] [ProducesResponseType(StatusCodes.Status200OK)] [BadRequestResponse] public async Task>> Get( [SwaggerDefault("0")][SwaggerSchema(Nullable = true)][FromQuery] int? page, [SwaggerDefault("25")][SwaggerSchema(Nullable = true)][FromQuery] int? pageSize) { var result = await mediator.Send(new GetFacultyListQuery() { Page = page, PageSize = pageSize }); return Ok(result.Faculties .Select(f => new FacultyResponse() { Id = f.Id, Name = f.Name, CampusId = f.CampusId }) ); } /// /// Gets details of a specific faculty by ID. /// /// Faculty ID. /// Details of the specified faculty. [HttpGet("{id:int}")] [ProducesResponseType(StatusCodes.Status200OK)] [BadRequestResponse] [NotFoundResponse] public async Task> GetDetails( [SwaggerDefault("1")] int id) { var result = await mediator.Send(new GetFacultyInfoQuery() { Id = id }); return Ok(new FacultyDetailsResponse() { Id = result.Id, Name = result.Name, CampusId = result.CampusId, CampusCode = result.CampusCode, CampusName = result.CampusName }); } } }