using MediatR; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Mirea.Api.DataAccess.Application.Cqrs.Group.Queries.GetGroupDetails; using Mirea.Api.DataAccess.Application.Cqrs.Group.Queries.GetGroupList; 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 { public class GroupController(IMediator mediator) : BaseControllerV1 { /// /// Retrieves a list of groups. /// /// The page number for pagination (optional). /// The page size for pagination (optional). /// A list of groups. [HttpGet] [ProducesResponseType(StatusCodes.Status200OK)] [BadRequestResponse] public async Task>> Get([FromQuery] int? page, [FromQuery] int? pageSize) { var result = await mediator.Send(new GetGroupListQuery() { Page = page, PageSize = pageSize }); return Ok(result.Groups .Select(g => new GroupResponse() { Id = g.Id, Name = g.Name, FacultyId = g.FacultyId }) ); } /// /// Retrieves detailed information about a specific group. /// /// The ID of the group to retrieve. /// Detailed information about the group. [HttpGet("{id:int}")] [ProducesResponseType(StatusCodes.Status200OK)] [BadRequestResponse] [NotFoundResponse] public async Task> GetDetails(int id) { var result = await mediator.Send(new GetGroupInfoQuery() { Id = id }); return Ok(new GroupDetailsResponse() { Id = result.Id, Name = result.Name, FacultyId = result.FacultyId, FacultyName = result.Faculty }); } } }