< Summary

Information
Class: CoWorkingApp.API.Infrastructure.Presentation.Controllers.SeatController
Assembly: CoWorkingApp.API
File(s): H:\Vicentico\Proyectos\CoWorkingApp Project\CoWorkingApp\CoWorkingApp.API\Infrastructure\Presentation\Controllers\SeatController.cs
Line coverage
100%
Covered lines: 35
Uncovered lines: 0
Coverable lines: 35
Total lines: 95
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%1100%
GetAvailables()100%2100%
GetByName()100%2100%

File(s)

H:\Vicentico\Proyectos\CoWorkingApp Project\CoWorkingApp\CoWorkingApp.API\Infrastructure\Presentation\Controllers\SeatController.cs

#LineLine coverage
 1using CoWorkingApp.Core.Application.Contracts.Services;
 2using CoWorkingApp.Core.Domain.DTOs;
 3using Microsoft.AspNetCore.Authorization;
 4using Microsoft.AspNetCore.Mvc;
 5
 6namespace CoWorkingApp.API.Infrastructure.Presentation.Controllers
 7{
 8    /// <summary>
 9    /// Controlador para las operaciones relacionadas con la entidad Seat.
 10    /// </summary>
 11    [ApiController]
 12    [Route("api/[controller]s")] // Se utiliza el plural "seats" en la ruta para seguir convenciones RESTful
 13    public class SeatController : ControllerGeneric<ISeatService, SeatRequest, SeatResponse>
 14    {
 15        /// <summary>
 16        /// Constructor de la clase SeatController.
 17        /// </summary>
 18        /// <param name="service">Instancia del servicio de asientos.</param>
 19        /// <param name="logger">Instancia del logger.</param>
 10420        public SeatController(ISeatService service, ILogger<ControllerGeneric<ISeatService, SeatRequest, SeatResponse>> 
 21
 22        /// <summary>
 23        /// Obtiene los asientos disponibles.
 24        /// </summary>
 25        /// <returns>ActionResult con la colección de asientos disponibles o un error interno.</returns>
 26        [HttpGet("availables")]
 27        [AllowAnonymous] // Se permite acceso anónimo para obtener los asientos disponibles
 28        public async Task<ActionResult<IEnumerable<SeatResponse>>> GetAvailables()
 329        {
 30            try
 331            {
 32                // Llama al servicio para obtener los asientos disponibles
 333                var seats = await _service.GetAvailablesAsync();
 34
 835                if (seats.Any(e => !e.Success))
 136                {
 37                    // Si hay respuestas no exitosas, se construye una lista de respuestas de error
 538                    var errorResponse = seats.Where(e => !e.Success).ToList();
 39                    // Se actualiza el mensaje de cada respuesta de error y se agregan los mensajes de error a la lista 
 140                    errorResponse.ForEach(response =>
 141                    {
 142                        response.Message = "Error occurred while retrieving seat";
 143                        response.Errors.Add(response.Message);
 244                    });
 45
 46                    // Se devuelve un estado de error con las respuestas de error
 147                    return NotFound(errorResponse);
 48                }
 49
 150                return Ok(seats);
 51            }
 152            catch (Exception)
 153            {
 54                // Maneja cualquier excepción inesperada
 155                var exception = new Exception("An unexpected error occurred while getting available seats.");
 156                _logger.LogError(exception, exception.Message);
 157                return StatusCode(500, HandleException(exception));
 58            }
 359        }
 60
 61        /// <summary>
 62        /// Obtiene asientos por nombre.
 63        /// </summary>
 64        /// <param name="name">Nombre de los asientos a obtener.</param>
 65        /// <returns>ActionResult con la colección de asientos correspondientes al nombre o un error interno.</returns>
 66        [HttpGet("by-name/{name}")]
 67        public async Task<ActionResult<SeatResponse>> GetByName(string name)
 568        {
 69            try
 570            {
 71                // Llama al servicio para obtener los asientos por nombre
 572                var seat = await _service.GetByNameAsync(name);
 73
 474                if (!seat.Success)
 275                {
 76                    // Maneja el caso específico de que la entidad no se encuentre
 277                    seat.Message = "Entity not found by name";
 278                    seat.Errors.Add(seat.Message);
 79
 280                    return NotFound(seat);
 81                }
 82
 283                return Ok(seat);
 84            }
 185            catch (Exception)
 186            {
 87                // Maneja cualquier otra excepción inesperada
 188                var exception = new Exception("An unexpected error occurred while getting seat by name.");
 189                _logger.LogError(exception, exception.Message);
 190                return StatusCode(500, HandleException(exception));
 91            }
 592        }
 93
 94    }
 95}