API Springboot Tfg-g6472
API Springboot Tfg-g6472
I
II
AGRADECIMIENTOS
Agradecimientos
Quiero agradecer especialmente a mi madre y a mi padre por todo el esfuerzo que han
realizado para brindarme infinidad de oportunidades.
A mis abuelos por ser un pilar sólido y fundamental en mi educación.
A mis tı́os y a mi primo por el apoyo y preocupación diaria.
III
AGRADECIMIENTOS
IV
RESUMEN
Resumen
El presente TFG propone desarrollar una API de gestión de reservas y un bot de Tele-
gram. La API permitirá a los usuarios realizar reservas, consultar disponibilidad y obtener
información detallada. El bot servirá como una interfaz adicional para interactuar con el
sistema de reservas. Ambos componentes contarán con un sistema de registro y almacena-
miento de historial. El objetivo es facilitar la realización y administración de reservas de
manera eficiente y conveniente.
V
RESUMEN
VI
ABSTRACT
Abstract
VII
ABSTRACT
VIII
ÍNDICE GENERAL
Índice general
Agradecimientos III
Resumen V
Abstract VII
Lista de tablas XV
1. Introducción 1
1.1. Contexto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3. Alternativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Tecnologı́as y servicios 9
2.1. Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
IX
ÍNDICE GENERAL
2.2.2. SpringBoot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3. OpenAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4. Trello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5. [Link] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6. MySql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.7. Maven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.9. Telegram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.10. XAMPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.11. Postman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.1. Planificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.1. Sprints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2. Metolologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.4. Presupuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4. Análisis y diseño 31
4.1. Análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1.1. Actores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
X
ÍNDICE GENERAL
4.4. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.4.1. API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5. Implementación 75
5.1.1. Dependecias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.2. Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.2.1. Autentificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6. Pruebas 81
6.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
XI
ÍNDICE GENERAL
7.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
A. Manual de uso 89
Bibliografı́a 99
XII
ÍNDICE DE FIGURAS
Índice de figuras
XIII
ÍNDICE DE FIGURAS
XIV
ÍNDICE DE CUADROS
Índice de cuadros
XV
ÍNDICE DE CUADROS
XVI
ÍNDICE DE CUADROS
XVII
ÍNDICE DE CUADROS
XVIII
CAPÍTULO 1. INTRODUCCIÓN
Capı́tulo 1
Introducción
1.1. Contexto
Además del creciente interés en el padel como deporte, también es importante destacar la
necesidad de soluciones de software para apoyar a la industria del padel en su crecimiento. Con
el aumento del número de clubes y pistas de padel en Europa y en todo el mundo, existe una
creciente demanda de soluciones de software que ayuden a los jugadores, los organizadores y
los propietarios de clubes a gestionar los eventos, las reservas y la administración en general.
1.2. Motivación
La idea de este proyecto, surgió al observar la dificultad para usuarios para la reserva de
una simple pista. Además el coste elevado para los clubs de mantener una aplicación propia
o contratar a empresas con su propio software, de forma que los responsables de los clubes
de padel compartan la información de sus clientes y facturación con terceros.
A medida que los clubes se vuelven más grandes y complejos, gestionar la programación
de pistas, las reservas y la administración en general se vuelve cada vez más difı́cil. Los
propietarios de clubes pueden verse abrumados por la cantidad de reservas y solicitudes que
reciben, lo que puede resultar en errores y confusiones. Los jugadores a menudo encuentran
que reservar una pista de padel en su club local es complicado y requiere mucho tiempo, lo
que puede ser un obstáculo para aquellos que desean jugar con regularidad.
1
1.2. MOTIVACIÓN
Dada la existencia de un grupo de Telegram de 1400 usuarios entusiastas del pádel que
utilizan para organizar partidos. El problema que resuelve es la automatización y simplifica-
ción del proceso de reserva de pistas, eliminando la necesidad de que un administrador del
club actúe como intermediario entre los usuarios y la aplicación de reservas. Se implementara
un bot de Telegram que los clientes utilizaran de Telegram para reservar una pista de pádel
de manera rápida y sencilla. Podrán ver la disponibilidad de las pistas, seleccionar la fecha y
hora deseada, e incluso buscar jugadores con un nivel similar para formar partidos. Esta fun-
cionalidad permitirá a los usuarios encontrar compañeros de juego que compartan su pasión
por el pádel y tengan un nivel de habilidad [Link] automatizar el proceso de reserva
de pistas, el bot reduce la carga de trabajo de los administradores y gestores del club, al
tiempo que brinda a los jugadores una forma más rápida y sencilla de organizar y confirmar
sus participaciones en los partidos, ofrece funcionalidades adicionales, como notificaciones
automáticas de cambios en las reservas, recordatorios de partidos y la capacidad de gestionar
la lista de jugadores interesados en cada partida.
2
CAPÍTULO 1. INTRODUCCIÓN
1.3. Alternativas
Uno de las mayores plataformas de gestión y reservas tanto de tenis como de padel es
Playtomic.[2] Integra mas de 500 clubes en una sola plataforma. Entre sus funcionalidades
se encuentran las siguientes:
Comunicación
• Chat de grupo
• Envı́o y recepción de SMS
• Gestor de contactos
Ecommerce
• Gestión de reservas
Gestión de proyectos
• Gestión de incidentes
• Gestión de recursos
Asistencia
3
1.4. NICHO DE MERCADO Y USUARIOS OBJETIVO
Tras hacer un estudio profundo con responsables de clubes de padel, se puede deducir que
el principal objetivo de mercado son los clubes a nivel nacional y usuarios o socios activos
vinculados a estas instalaciones.
Cada propietario podrá tener a su alcance toda la información y gestión de sus pistas y
clientes. La interfaz en Telegram proporcionará a los propietarios de las pistas y a los clientes
una forma fácil y accesible de acceder a toda la información y gestionar sus reservas de pistas
y clientes, de una forma muy similar a la que ya conocian mediante la experiencia del grupo
de Telegram. Para los propietarios, podrán ver y administrar el estado de las pistas, gestionar
las reservas y recibir notificaciones relevantes. También podrán acceder a la información de
los clientes y realizar un seguimiento de sus actividades.
Gestores del club: Aquellos responsables de la gestión general del club y la asignación
de las pistas. El bot les permitirı́a liberar su carga de trabajo al eliminar la necesidad de
estar pendientes de la disponibilidad de las pistas especı́ficas donde se llevarán a cabo
los partidos, ya que el bot se encargarı́a de realizar las reservas de forma automática.
El desarrollo del bot de Telegram para este grupo de usuarios entusiastas del pádel y el
club correspondiente permite automatizar el proceso de reserva de pistas, mejorar la expe-
riencia de los jugadores y liberar al personal del club de tareas administrativas. Esto satisface
una necesidad especı́fica en el nicho de mercado al simplificar la organización de partidos y
optimizar la gestión de las reservas de pistas.
Esta aplicación API Rest tiene como objetivo principal proporcionar una plataforma
completa y eficiente para la gestión de reservas y usuarios tanto para los clientes como para
los propietarios de clubes. Es de vital importancia mantener una buena arquitectura que nos
permita cumplir con los requisitos actuales y futuros, ası́ como prepararnos para una futura
implementación de la interfaz con React Native.
4
CAPÍTULO 1. INTRODUCCIÓN
La aplicación consta de dos partes: la gestión de reservas y usuarios por parte del cliente,
y la gestión del club por parte del propietario. La primera parte permite a los clientes realizar
reservas de pistas de pádel de forma sencilla y rápida, además de buscar jugadores con niveles
de habilidad similares para formar partidos. La interfaz intuitiva y amigable facilita la gestión
de reservas y actividades relacionadas.
Por otro lado, la gestión del club brinda a los propietarios las herramientas necesarias para
administrar las reservas de las pistas, controlar la disponibilidad y el estado de las mismas,
y gestionar a los usuarios. La plataforma proporciona información detallada, informes y
estadı́sticas relevantes, y notificaciones importantes para facilitar la operación y el crecimiento
del club.
Esta aplicación API Rest tiene como objetivo satisfacer las necesidades de los clientes y
propietarios de clubes en la gestión de reservas y usuarios. Con una arquitectura sólida y
una futura implementación con React Native, se busca proporcionar una solución completa
y eficiente, brindando una experiencia intuitiva y amigable en el mundo del pádel.
2. Desarrollar una API Rest robusta y segura que garantice la integridad de los datos y
proteja la privacidad de los usuarios.
4. Crear endpoints claros y bien documentados que faciliten la interacción con la API y
permitan una fácil integración con otras aplicaciones o servicios.
5
1.5. OBJETIVOS DEL PROYECTO
1. Proporcionar a los clientes una plataforma intuitiva y fácil de usar para gestionar sus
reservas de pistas de pádel de forma rápida y sencilla.
2. Permitir a los propietarios de clubes deportivos tener un control completo sobre la
gestión de sus instalaciones, incluyendo la disponibilidad de pistas, horarios y precios.
3. Facilitar la reserva de pistas entre usuarios que comparten la pasión por el pádel y
tienen niveles de juego similares, fomentando ası́ la formación de partidos equilibrados
y emocionantes.
4. Ofrecer un sistema de autenticación seguro que garantice la privacidad y la protección
de los datos personales de los usuarios.
5. Proporcionar información detallada sobre las pistas disponibles, incluyendo caracterı́sti-
cas y horarios de apertura, para que los usuarios puedan tomar decisiones informadas
al realizar sus reservas.
6. Brindar un servicio de notificaciones y recordatorios para informar a los usuarios sobre
el estado de sus reservas, cambios de horario o cualquier otra información relevante.
7. Proporcionar estadı́sticas y análisis sobre las reservas realizadas, permitiendo a los
propietarios de clubes tomar decisiones estratégicas para optimizar la utilización de las
pistas y mejorar la experiencia de los usuarios.
8. Garantizar un alto nivel de disponibilidad y rendimiento de la aplicación, para que los
usuarios puedan acceder y utilizar el servicio en cualquier momento y desde cualquier
lugar.
6
CAPÍTULO 1. INTRODUCCIÓN
7
1.5. OBJETIVOS DEL PROYECTO
8
CAPÍTULO 2. TECNOLOGÍAS Y SERVICIOS
Capı́tulo 2
Tecnologı́as y servicios
Para cumplir con los objetivos del proyecto, se utilizarán diversas tecnologı́as y servicios
para desarrollar el API de la aplicación web de gestión y reservas para el club deportivo de
padel. En particular, se utilizará el framework de desarrollo de aplicaciones web Java Spring
Boot para desarrollar el API, ya que es una herramienta poderosa y flexible que permite
desarrollar aplicaciones web eficientes y escalables de manera rápida y sencilla.
En cuanto a la base de datos, se utilizará MySQL, una base de datos relacional de código
abierto y ampliamente utilizada. MySQL se utiliza con frecuencia en proyectos de este tipo
debido a su fiabilidad, escalabilidad y compatibilidad con la mayorı́a de los lenguajes de
programación.
Además, se utilizarán diversos servicios en la nube para alojar y ejecutar el API, ası́ como
para gestionar los datos del club y de los usuarios. Entre los servicios de la nube utilizados,
se incluyen AWS (Amazon Web Services) y Google Cloud Platform.
2.1. Git
Git es un sistema distribuido, lo que significa que puede coordinar repositorios locales y
remotos. Esto permite mantener una copia estática del proyecto de forma remota mientras se
9
2.2. SPRING FRAMEWORK
realizan cambios y pruebas a nivel local. Una vez que se analiza el trabajo, las ramas pueden
fusionarse para combinar los cambios con la versión anterior mediante la acción de ”merge”.
IoC (Inversión de Control): permite que los objetos sean creados y gestionados por el
contenedor de Spring, lo que facilita la inyección de dependencias.
Integración con otros marcos y bibliotecas: Spring se integra con otros marcos y bi-
bliotecas comunes, como Hibernate, Struts y JSF, lo que permite a los desarrolladores
trabajar con sus herramientas favoritas.
Soporte para desarrollo basado en pruebas: Spring proporciona soporte para pruebas
unitarias y de integración, lo que permite a los desarrolladores probar su código de
manera eficiente.
10
CAPÍTULO 2. TECNOLOGÍAS Y SERVICIOS
Es una herramienta esencial para garantizar la seguridad de las aplicaciones Java, espe-
cialmente aquellas que manejan información confidencial o de usuarios.
2.2.2. SpringBoot
Spring Boot es una elección popular para desarrollar una API REST debido a su simplici-
dad, configuración por convención, iniciadores preconfigurados, comunidad activa, integración
con el ecosistema Spring y facilidad de despliegue. Estos aspectos combinados te permiten
desarrollar rápidamente una API REST de alta calidad y centrarse en la lógica de negocio
en lugar de preocuparse por configuraciones y tareas repetitivas.[3]
Spring Boot es un framework para el desarrollo de aplicaciones Java que facilita la creación
de APIs RESTful de forma rápida y sencilla. Algunas de las ventajas por las que se escogido
utilizar Spring Boot para crear un API son las siguientes:
11
2.2. SPRING FRAMEWORK
Facilita el desarrollo: ofrece una estructura de proyecto bien definida y una gran can-
tidad de librerı́as y herramientas que facilitan el desarrollo de una API RESTful.
Integración con otros frameworks: se integra fácilmente con otros frameworks de Spring,
como Spring Data, Spring Security, Spring Cloud, entre otros, lo que permite a los
desarrolladores utilizar una amplia gama de herramientas para crear una API.
12
CAPÍTULO 2. TECNOLOGÍAS Y SERVICIOS
2.3. OpenAPI
OpenAPI es una especificación de API abierta y estandarizada que permite a los desa-
rrolladores describir, documentar, probar y utilizar una API de manera más fácil y eficiente.
Anteriormente conocida como Swagger, OpenAPI es un estándar de la industria utilizado por
desarrolladores, empresas y organizaciones de todo el mundo para diseñar y construir APIs
interoperables y fáciles de usar. La especificación OpenAPI se describe en un documento
JSON o YAML que define los puntos finales, los parámetros, las respuestas, los esquemas de
datos y otra información relevante para interactuar con una API de manera consistente y
predecible.[4]
Las ventajas de OpenAPI son diversas y se pueden resumir en los siguientes puntos:
Facilidad de mantenimiento: Al describir una API con OpenAPI, los cambios y actua-
lizaciones se pueden hacer en la especificación en lugar de en la documentación y el
código, lo que simplifica el proceso de mantenimiento y reduce la posibilidad de errores.
13
2.4. TRELLO
2.4. Trello
Además de las tarjetas, Trello también cuenta con otras caracterı́sticas útiles, como eti-
quetas de color para identificar rápidamente las tareas importantes, comentarios para la
comunicación entre los miembros del equipo y listas de comprobación para dividir las ta-
reas en subtareas más manejables. También es posible adjuntar archivos, asignar tareas a
miembros especı́ficos del equipo y establecer fechas lı́mite para las tareas.
14
CAPÍTULO 2. TECNOLOGÍAS Y SERVICIOS
2.5. [Link]
[Link] es una herramienta en lı́nea de creación de diagramas y gráficos que permite crear
una gran variedad de diagramas, como diagramas de flujo, diagramas de red, diagramas UML,
diagramas ER, organigramas, mapas mentales, entre otros. Es una herramienta de uso libre,
es decir, se puede utilizar de manera gratuita sin necesidad de registrarse.
[Link] ofrece muchas opciones para crear diagramas, incluyendo la capacidad de im-
portar y exportar documentos de otros servicios de almacenamiento en lı́nea, como Google
Drive, Dropbox y OneDrive. También permite compartir y colaborar con otros usuarios en
tiempo real.
2.6. MySql
15
2.7. MAVEN
utilizado para una variedad de aplicaciones, como sistemas de gestión de contenidos, sitios
web de comercio electrónico y aplicaciones web. [6]
Soporte multiplataforma.
MySQL es software libre y de código abierto, lo que significa que cualquiera puede des-
cargarlo y usarlo sin pagar ninguna tarifa de licencia.
2.7. Maven
16
CAPÍTULO 2. TECNOLOGÍAS Y SERVICIOS
MySQL Workbench es una herramienta de software muy útil para aquellos que trabajan
con bases de datos MySQL, ya sea para la creación de nuevas bases de datos o para la
administración y el mantenimiento de bases de datos existentes.
2.9. Telegram
Una función importante para este proyecto es que permite a los desarrolladores crear
aplicaciones interactivas dentro de la aplicación. Los bots pueden proporcionar información,
realizar acciones automatizadas y ofrecer servicios adicionales a los usuarios. Se puede acceder
a Telegram desde múltiples dispositivos, incluyendo teléfonos móviles, tablets y ordenador.
Las conversaciones se mantienen sincronizadas entre ambos dispositivo. Telegram ofrece una
API abierta que permite a los desarrolladores crear sus propias aplicaciones y servicios in-
tegrados con la plataforma. Esto ha llevado al desarrollo de una amplia gama de bots y
aplicaciones de terceros que amplı́an las funcionalidades de Telegram [8].
2.10. XAMPP
XAMPP es una solución todo en uno para configurar un entorno de servidor web local en
tu máquina. Proporciona los componentes necesarios, como Apache, MySQL, PHP y Perl,
para desarrollar y probar aplicaciones web de forma fácil y conveniente. Es una herramienta
popular entre los desarrolladores que desean tener un entorno de desarrollo web local sin la
necesidad de configurar cada componente por separado.
17
2.11. POSTMAN
2.11. Postman
Postman [10] es una herramienta popular para probar y documentar API. Permite realizar
solicitudes HTTP a diferentes puntos finales de una API, enviar diferentes tipos de datos
(como JSON o formularios) y recibir las respuestas correspondientes. Postman proporciona
una interfaz intuitiva y amigable para interactuar con las API, lo que facilita la prueba y
depuración de las mismas.
Interfaz de usuario intuitiva: Postman tiene una interfaz fácil de usar que per-
mite realizar solicitudes HTTP de manera rápida y sencilla. Puedes crear solicitudes
personalizadas, especificar encabezados y parámetros, y ver las respuestas en formato
legible.
Colecciones y entornos: Postman te permite organizar tus solicitudes en colecciones,
lo que facilita la gestión y ejecución de pruebas en diferentes escenarios. Además, pue-
des definir entornos para manejar variables de entorno y hacer pruebas en diferentes
configuraciones.
18
CAPÍTULO 2. TECNOLOGÍAS Y SERVICIOS
IntelliJ IDEA [11] es un IDE (Integrated Development Environment) creado por JetBrains
que se utiliza principalmente para el desarrollo de software en lenguajes como Java, Kotlin,
Groovy y Scala, entre otros. Este entorno de desarrollo integrado está disponible en versiones
gratuitas y de pago.
IntelliJ IDEA ofrece una serie de caracterı́sticas destacadas, como la navegación inteligente
del código, la refactorización de código, la detección de errores en tiempo real, la integración
con sistemas de control de versiones como Git y SVN, la capacidad de desarrollar aplicaciones
para diferentes plataformas, y la gestión de dependencias, entre otras.
Además, IntelliJ IDEA cuenta con una gran comunidad de usuarios y una amplia docu-
mentación y soporte en lı́nea. Es utilizado por muchos desarrolladores y empresas de todo el
mundo para desarrollar software de alta calidad.
Entre los plugins más utilizados se encuentran Spring Boot Tools, que proporciona una
integración completa con Spring Boot para la creación y el mantenimiento de aplicaciones
Spring Boot, Spring Initializr Java Support, que proporciona plantillas para la creación de
aplicaciones Spring Boot y Spring Boot Dashboard, que proporciona una interfaz gráfica para
la gestión y el monitoreo de aplicaciones Spring Boot.
19
2.12. SWAGGER EDITOR
Swagger Editor es una herramienta en lı́nea gratuita que proporciona un entorno de desa-
rrollo y prueba para diseñar y visualizar especificaciones OpenAPI (anteriormente conocidas
como Swagger). Permite crear y editar archivos YAML o JSON que describen los endpoints,
las operaciones, los modelos de datos y otra información relacionada con la API.
Diseño de la API: Permite definir los endpoints, los parámetros de solicitud, las
respuestas esperadas y otros detalles de la API utilizando una interfaz interactiva y
amigable. Swagger Editor ayuda a mantener una estructura y formato adecuados en la
especificación OpenAPI.
Validación de la especificación: Verifica automáticamente la sintaxis y la estructura
del archivo OpenAPI para asegurarse de que cumpla con la especificación. Esto ayuda
a detectar posibles errores o inconsistencias en el diseño.
Visualización de la API: Genera una documentación interactiva basada en la es-
pecificación OpenAPI. Permite explorar y probar los endpoints directamente desde el
editor, facilitando la comprensión y prueba de la API.
20
CAPÍTULO 3. PLANIFICACIÓN Y DESARROLLO DEL PROYECTO
Capı́tulo 3
3.1. Planificación
Prouct Owner Es el que interpreta el modelo de negocio del cliente. Es el que decide que
requisitos elaborar cuales no y de que forma se desarrollaran con el fin de maximizar
los beneficios.
Scrum Master es el lı́der del equipo y la voz frente al product Owner, esta implicado
codo con codo con el equipo en fase de producción, planifica al detalle los quince dı́as
velando por el cumplimiento del programa eliminando impedimentos
21
3.1. PLANIFICACIÓN
Equipo de desarrollo.
Para que los sprints consigan el mayor éxito posible se establecerán tres pautas a seguir en
cada uno de ellos. Primero previa planificación, una reunión donde se define la meta del
sprint la cual no será modificable.
3.1.1. Sprints
Sprint 1
22
CAPÍTULO 3. PLANIFICACIÓN Y DESARROLLO DEL PROYECTO
Sprint 2
Sprint 3
Sprint 4
Sprint 5
Sprint 6
Pruebas de despliegue.
23
3.2. METOLOLOGIA
Sprint 7
Realización de pruebas de caja negra y pruebas de aceptación del bot con usuarios
reales.
Ajuste de la aplicación y corrección de errores.
Revisión final del código y documentación del proyecto.
3.2. Metolologia
Ambas metodologı́as, DDD y Api First, comparten el objetivo de construir software que se
ajuste a las necesidades del negocio y sea fácil de mantener y evolucionar. Al combinar DDD
con el enfoque Api First, se pueden obtener beneficios adicionales al lograr una comprensión
profunda del dominio y al asegurar una interfaz de API bien diseñada y validada.
Ventajas:
24
CAPÍTULO 3. PLANIFICACIÓN Y DESARROLLO DEL PROYECTO
clientes, lo que permite ajustar y mejorar la API de acuerdo con las necesidades en
constante evolución.
Desventajas:
La combinación de Domain-Driven Design (DDD) y el enfoque Api First puede ser bene-
ficiosa para el desarrollo de la aplicación de gestión y reservas de una API, ya que permite
una comprensión profunda del dominio y un diseño sólido de la interfaz. Sin embargo, es
importante gestionar adecuadamente la complejidad y evitar un sobrediseño para asegurar
la eficiencia y mantenibilidad del software.
25
3.3. GESTIÓN DE RIESGOS
26
CAPÍTULO 3. PLANIFICACIÓN Y DESARROLLO DEL PROYECTO
3.4. Presupuesto
El costo por hora en el desarrollo de software puede variar según varios factores, como la
experiencia del ingeniero, la complejidad del proyecto, la ubicación geográfica y la demanda
del mercado. En este caso, estableceremos un costo de 15 euros por hora como una estimación
promedio para un ingeniero de software con experiencia moderada en el mercado español.
[16]
Para el presupuesto inicial, se estima un total de 300 horas trabajadas en las diferentes
tareas. Cada tarea se ha evaluado individualmente para determinar la cantidad de horas
necesarias para completarla de manera efectiva.
Necesitarı́amos conocer el tiempo de vida útil estimado del ordenador y su valor residual
al final de dicho perı́odo. Si el ordenador tiene una vida útil de 5 años y un valor residual
estimado de 200 euros al final de ese perı́odo.
Supongamos que el costo total del ordenador es de 1000 euros y la suma de los periféricos
(2 pantallas 120 euros cada una, teclado 98 euros y ratón 75 euros) suman un total de 1423
euros y utilizamos una tasa de depreciación anual del 20 % .
Depreciación anual = (1413 euros - 200 euros) / 5 = 242.6 euros por año
Para calcular la depreciación en las 300 horas utilizadas, podemos dividir la depreciación
anual entre las horas de trabajo en un año y luego multiplicarlo por las horas utilizadas.
27
3.4. PRESUPUESTO
Depreciación total del ordenador en las 300 horas utilizadas = Depreciación por hora *
Horas utilizadas.
Depreciación total del ordenador y periféricos = 0.1348 euros/hora * 300 horas = 40.44
euros.
Existen varios motivos por los que se recomienda elevar el presupuesto para contingencias:
Riesgos y cambios imprevistos: Durante la ejecución del proyecto, pueden surgir riesgos
y eventos inesperados que requieran acciones correctivas o cambios en el alcance. La reserva
adicional permite cubrir estos riesgos y mitigar su impacto financiero.
Cambios en los requisitos: A medida que se avanza en el proyecto, es posible que los
requisitos iniciales cambien o evolucionen. Esto puede implicar ajustes en el diseño, desarrollo
o implementación del software, lo cual puede requerir recursos adicionales y, por lo tanto, un
aumento en el presupuesto.
Aumento de costos: Los costos de recursos, herramientas o servicios pueden fluctuar du-
rante la duración del proyecto. La reserva adicional proporciona flexibilidad para hacer frente
a posibles incrementos en los costos y evitar desviaciones significativas en el presupuesto.
Diseño de la arquitectura del software: Se estima que tomará 20 horas para diseñar una
arquitectura sólida y escalable que cumpla con los requisitos del proyecto.
28
CAPÍTULO 3. PLANIFICACIÓN Y DESARROLLO DEL PROYECTO
Tiempo de implementación: Se estima que tomará 190 horas para implementar y desa-
rrollar el software según los requisitos especificados.
Recurso Precio
Herramientas 40,44e
Equipo de desarrollo 4500e
Total 4540,44e
Total con reserva de contingencias 5448,53e
Tiempo de implementación: Se estima que tomará 210 horas, reflejando las tareas adicio-
nales y los ajustes requeridos durante la implementación.
Sumando el costo de las horas de implementación del presupuesto final (330 horas a 15
euros por hora), el cálculo del presupuesto quedarı́a de la siguiente manera:
29
3.4. PRESUPUESTO
Recurso Precio
Herramientas 40,44e
Equipo de desarrollo 4950e
Total 4990,44 e
Total con reserva de contingencias 5988,53e
30
CAPÍTULO 4. ANÁLISIS Y DISEÑO
Capı́tulo 4
Análisis y diseño
4.1. Análisis
Otro aspecto clave del análisis es la identificación de los datos necesarios para el correc-
to funcionamiento del sistema. Se definen las entidades relevantes, como las reservas, los
recursos, y los usuarios, y se analizan las relaciones y restricciones entre ellas.
4.1.1. Actores
31
4.1. ANÁLISIS
Para mejorar la estructuración y la visión de los objetivos se han identificado los requisitos
funcionales especı́ficos para cada componente del sistema: la API y el bot de Telegram. Ambos
bloques de requisitos están basados en las funcionalidades requeridas para cada componente.
A continuación, se presentan los requisitos funcionales para la API de reservas y gestión de
un club deportivo de pádel.
32
CAPÍTULO 4. ANÁLISIS Y DISEÑO
Algunos de los requisitos de funcionales del bot de Telegran serán iguales o tendrán mucha
33
4.2. REQUISITOS NO FUNCIONALES
similitud con los de la API ya que estarán basados en la misma lógica de negocio.
34
CAPÍTULO 4. ANÁLISIS Y DISEÑO
una serie de requisitos no funcionales clave que deben ser considerados para asegurar el cum-
plimiento de los estándares de rendimiento, al abordar estos requisitos de manera adecuada,
se crea una base sólida para el éxito y la satisfacción de los usuarios.
Rendimiento:
Las consultas de base de datos deben ser optimizadas para garantizar un acceso eficiente
a los datos y minimizar la carga en el sistema.
Seguridad:
La aplicación debe estar protegida contra ataques comunes, como inyecciones SQL,
XSS y CSRF.
Todos los datos sensibles que se transmiten entre la aplicación y los clientes deben estar
encriptados.
Fiabilidad:
La aplicación debe ser tolerante a fallos y contar con mecanismos de recuperación para
minimizar el impacto de errores y fallas.
Documentación:
35
4.3. CASOS DE USO
Los requisitos de usuario se agruparán en función de los roles del usuario y las funcio-
nalidades proporcionadas por la API y el bot de Telegram. Esto nos permitirá identificar
claramente qué acciones están disponibles para cada tipo de usuario y cómo interactúan con
la aplicación. Para cada actor, se presentarán los casos de uso correspondientes a su rol y
las acciones que puede realizar en el sistema. Se proporcionarán descripciones detalladas de
cada caso de uso, junto con sus diagramas correspondientes, que ilustrarán las interacciones
entre el actor y el sistema.
36
CAPÍTULO 4. ANÁLISIS Y DISEÑO
37
4.3. CASOS DE USO
38
CAPÍTULO 4. ANÁLISIS Y DISEÑO
Cuadro 4.4: Caso de Uso: Obtener información sobre las pistas disponibles
39
4.3. CASOS DE USO
40
CAPÍTULO 4. ANÁLISIS Y DISEÑO
4.4. Diseño
Además, la adopción del patrón de inyección de dependencias ha sido una elección es-
tratégica para fomentar la modularidad y la reutilización de componentes. Al utilizar este
patrón, se establece una clara separación entre las interfaces y las implementaciones, lo que
facilita la sustitución de componentes y la realización de pruebas unitarias de manera aislada.
Esto contribuye a un código más mantenible, extensible y fácilmente testeable.
Se ha escogido este diseño basándose en los beneficios que ofrece en términos de mo-
dularidad, escalabilidad y mantenibilidad del sistema. El modelo de arquitectura de capas,
el enfoque de microservicios y el uso de inyección de dependencias brindan una estructura
41
4.4. DISEÑO
sólida y flexible que se adapta a los requisitos del proyecto. Estos modelos de diseño permiten
una mayor organización del código, una gestión más eficiente de cambios y mejoras, y una
arquitectura escalable y modular que facilita el desarrollo y el mantenimiento a largo plazo.
4.4.1. API
Como ya se comento anteriormente se opta por la metodologı́a API First en conjunto con
OpenAPI para diseñar y desarrollar API. API First es un enfoque en el que la prioridad es
la fase de diseño y especificación de la API antes de cualquier implementación o codificación.
Permı́teme explicarte por qué esta metodologı́a es beneficiosa y cómo se alinea con OpenAPI.
En esta fase vamos a definir previamente las estructuras de datos, los formatos de en-
trada/respuesta y los end points con el objetivo de garantizar que se cumplan todos los
requisitos funcionales.
Se definirá un endpoit especifico para la gestión del club que se llamara ”backoffice”.
Esta ruta solo sera accesible por los usuarios que tengan rol administrador y se encuentren
autenticados y autorizados. Los end points se agruparan mediante etiquetas o tags acorde a
su funcionalidad. Para ordenar las operaciones y filtrar las funciones se generan las siguientes
etiquetas.
Booking: Comprende todas las funciones relacionadas con las reservas de los recursos.
Resources: Engloba las operaciones de gestión de los recursos. Solo accesible desde
backoffice.
User: Incluye las operaciones relativas a los usuarios o a la gestión de los mismos.
Festive: Solo accesible desde backoffice, para la gestión del calendario. Se utiliza para
el manejo de dı́as festivos y eventos especiales.
BackOffice: Es una ruta especifica para los administradores. Engloba las operaciones
de gestión.
Muchas operaciones estarán categorizadas con varias etiquetas, como por ejemplo el los
endpoints /booking y backoffice/booking ambas operaciones POST crean una reserva, pero
la de backoffice esta destinada a los administradores que permitirá añadir mas campos a la
entrada o incluso crear varias reservas en una sola petición.
A continuación se detallan los end-points mas relevantes de la API (se recomienda verlos
con mas detalle como se indica en el apéndice A: Manual de uso para front-end):
42
CAPÍTULO 4. ANÁLISIS Y DISEÑO
Endpoint: /booking
Método: POST
Etiquetas: Booking
Nombre de la operación: createBooking
Parámetros de entrada: inputBooking
Respuestas
Código Descripción
200 Éxito
401 No autorizado
405 Excepción de validación
Endpoint: /backoffice/booking
Método: POST
Etiquetas: Booking, Backoffice
Nombre de la operación: backOfficeAddBooking
Parámetros de entrada: inputBooking
Respuestas
Código Descripción
200 Éxito
405 Excepción de validación
Endpoint: /booking/findByDate
Método: GET
Etiquetas: Booking
Nombre de la operación: findBookingsByDates
Parámetros de entrada: startDate (query), endDate (query)
Respuestas
Código Descripción
200 Operación exitosa
400 Valor de fecha inválido
401 Error de autenticación
405 Excepción de validación
43
4.4. DISEÑO
Endpoint: /booking/findByType
Método: GET
Etiquetas: Booking
Nombre de la operación: findBookingsByType
Parámetros de entrada: type (query)
Respuestas
Código Descripción
200 Operación exitosa
400 Tipo de reserva inválido
401 Error de autenticación
405 Excepción de validación
Endpoint: /booking/bookingId
Método: GET
Etiquetas: Reserva
Nombre de la operación: getBookingById
Parámetros de entrada: bookingId (ruta, obligatorio)
Respuestas
Código Descripción
200 Operación exitosa
400 ID no válido
401 Operación no autorizada
404 Reserva no encontrada
Endpoint: /booking/bookingId
Método: PUT
Etiquetas: Reserva
Nombre de la operación: updateBooking
Parámetros de entrada: bookingId (ruta, obligatorio)
Cuerpo de la solicitud: inputBooking
Respuestas
Código Descripción
200 OK
400 ID de reserva no válido
401 No autorizado
404 Reserva no encontrada
405 Excepción de validación
44
CAPÍTULO 4. ANÁLISIS Y DISEÑO
Endpoint: /booking/bookingId
Método: DELETE
Etiquetas: Reserva
Nombre de la operación: deleteBooking
Parámetros de entrada: bookingId (ruta, obligatorio)
Respuestas
Código Descripción
204 Reserva eliminada exitosamente
400 ID de reserva no válido
401 No autorizado
404 Reserva no encontrada
Endpoint: /booking/bookingId
Método: GET
Etiquetas: Booking
Nombre de la operación: getBookingById
Parámetros de entrada: bookingId (path)
Respuestas
Código Descripción
200 Operación exitosa
400 ID no válido
401 Error de autenticación
404 Reserva no encontrada
Endpoint: /booking/bookingId
Método: PUT
Etiquetas: Booking
Nombre de la operación: updateBooking
Parámetros de entrada: bookingId (path)
Cuerpo de la solicitud: Información actualizada de la reserva
Respuestas
Código Descripción
200 OK
400 ID de reserva no válido
401 No autorizado
404 Reserva no encontrada
405 Excepción de validación
45
4.4. DISEÑO
Endpoint: /booking/bookingId
Método: DELETE
Etiquetas: Booking
Nombre de la operación: deleteBooking
Parámetros de entrada: bookingId (path)
Respuestas
Código Descripción
204 Reserva eliminada con éxito
400 ID de reserva no válido
401 No autorizado
404 Reserva no encontrada
Endpoint: /resource/id
Método: GET
Etiquetas: Resource
Nombre de la operación: getResource
Parámetros de entrada: id (path)
Respuestas
Código Descripción
200 Operación exitosa
404 Recurso no encontrado
Endpoint: /backoffice/resource
Método: PUT
Etiquetas: Resource, Backoffice
Nombre de la operación: createResource
Cuerpo de la solicitud: Información actualizada del recurso
Respuestas
Código Descripción
200 Operación exitosa
405 Entrada no válida
46
CAPÍTULO 4. ANÁLISIS Y DISEÑO
Endpoint: /backoffice/resource
Método: POST
Etiquetas: Resource, Backoffice
Nombre de la operación: createResourceDTO
Cuerpo de la solicitud: Información del nuevo recursoDTO
Respuestas
Código Descripción
200 Operación exitosa
405 Entrada no válida
Endpoint: /resource/findByDate
Método: GET
Etiquetas: Resource, Booking
Nombre de la operación: getResourceDTOsByDate
Parámetros
Nombre Descripción
start date Fecha de inicio del perı́odo de disponibilidad de resourceD-
TOs (en formato ISO 8601)
end date Fecha de finalización del perı́odo de disponibilidad de re-
sourceDTOs (en formato ISO 8601)
Respuestas
Código Descripción
200 Operación exitosa
Endpoint: /user
Método: POST
Etiquetas: User
Nombre de la operación: createUser
Cuerpo de la solicitud: Objeto de usuario creado
Respuestas
Código Descripción
200 Operación exitosa
47
4.4. DISEÑO
Endpoint: /user/login
Método: GET
Etiquetas: User
Nombre de la operación: loginUser
Parámetros
Nombre Descripción
email El nombre de usuario para iniciar sesión
password La contraseña para iniciar sesión en texto claro
Respuestas
Código Descripción
200 Operación exitosa
400 Nombre de usuario/contraseña no válido
Endpoint: /user/logout
Método: GET
Etiquetas: User
Nombre de la operación: logoutUser
Parámetros: Ninguno
Respuestas
Código Descripción
default Operación exitosa
Endpoint: /user/username
Método: GET, PUT, DELETE
Etiquetas: User
Nombre de la operación: getUserByName (GET), updateUser (PUT), deleteUser
(DELETE)
Parámetros
Nombre Descripción
username El nombre que se debe recuperar. Utilice user1 para reali-
zar pruebas.
Respuestas
Código Descripción
200 Operación exitosa (GET)
default Operación exitosa (PUT, DELETE)
400 Nombre de usuario no válido
404 Usuario no encontrado
48
CAPÍTULO 4. ANÁLISIS Y DISEÑO
Endpoint: /user/username/bookings
Método: GET
Etiquetas: User, Booking
Nombre de la operación: getBookingsUser
Parámetros
Nombre Descripción
username El nombre que se debe recuperar. Utilice user1 para reali-
zar pruebas.
Respuestas
Código Descripción
200 Operación exitosa
400 Nombre de usuario no válido
404 Usuario no encontrado
Endpoint: /festive/idfestive
Método: GET
Etiquetas: Festive
Nombre de la operación: getFestivebyId
Seguridad: bearerAuth
Parámetros
Nombre Descripción
idfestive ID del evento festivo
Respuestas
Código Descripción
200 Operación exitosa
400 ID de evento festivo no válido
404 Evento festivo no encontrado
Endpoint: /festive/date
Método: GET
Etiquetas: Festive
Nombre de la operación: getFestivebyDate
Parámetros
Nombre Descripción
date Fecha del evento festivo
Respuestas
Código Descripción
200 Operación exitosa
400 ID de evento festivo no válido
404 Evento festivo no encontrado
49
4.4. DISEÑO
Endpoint: /backoffice/festive/idfestive
Método: PUT, DELETE
Etiquetas: Festive, Backoffice
Nombre de la operación: updateFestive (PUT), deleteFestive (DELETE)
Parámetros
Nombre Descripción
idfestive ID del evento festivo a eliminar
Cuerpo de la solicitud
Descripción Actualizar un evento festivo existente en el sistema
Contenido application/json
Esquema FestiveDTO
Respuestas
Código Descripción
default Operación exitosa
50
CAPÍTULO 4. ANÁLISIS Y DISEÑO
51
4.4. DISEÑO
52
CAPÍTULO 4. ANÁLISIS Y DISEÑO
En esta fase de diseño, se definirán las estructuras de paquetes en este caso para hacer
que sean lo mas independientes posibles se opta por una estructura de módulos Maven, para
ası́ permitir añadir librerı́as de terceros u otros módulos presentes en el proyecto. Se detallara
53
4.4. DISEÑO
la estructura de cada modulo a groso modo para comprender como se destruyen los paquetes
en cada componente.
54
CAPÍTULO 4. ANÁLISIS Y DISEÑO
Módulo Model: La capa Model implementa las interfaces definidas en la capa API
Model y contiene la lógica de negocio del sistema. Aquı́ se procesan los datos, se realizan
las operaciones y se aplican las reglas de negocio necesarias. Esta capa se encarga de la
lógica interna del sistema y se comunica con las capas superiores e inferiores a través
de las interfaces definidas en la capa API Model. También puede incluir la interacción
con fuentes de datos externas, servicios web u otros sistemas.
55
4.4. DISEÑO
56
CAPÍTULO 4. ANÁLISIS Y DISEÑO
por la capa Model para realizar las operaciones solicitadas por los clientes.
57
4.4. DISEÑO
Booking:
58
CAPÍTULO 4. ANÁLISIS Y DISEÑO
59
4.4. DISEÑO
BookingUser:
User:
60
CAPÍTULO 4. ANÁLISIS Y DISEÑO
roles - Tipo de dato: List<UserRole>. Descripción: lista de roles del usuario (transi-
torio).
Resource:
TimeSlot:
days - Tipo de dato: String. Descripción: dı́as en los que está disponible el intervalo
de tiempo.
En el esquema del modelo relacional se han identificado varias entidades que representan
los diferentes conceptos y objetos del sistema (Figura 4.13). A continuación, se detallan las
entidades principales junto con una breve descripción de sus atributos:
61
62
4.4. DISEÑO Figura 4.10: Diagrama relacional
CAPÍTULO 4. ANÁLISIS Y DISEÑO
Entidad: USER
La entidad USER representa a los usuarios del sistema. Algunos atributos son:
Entidad: BOOKING
63
4.4. DISEÑO
La entidad BOOKING STATUS representa el estado de una reserva. Algunos atributos rele-
vantes son:
La entidad STATUS TYPE representa los diferentes tipos de estado de una reserva. Algunos
atributos son:
La entidad BOOKING USER representa la relación entre una reserva y un usuario. Algunos
atributos relevantes son:
La entidad BOOKING TYPE representa los diferentes tipos de reserva disponibles. Algunos
atributos de esta entidad son:
64
CAPÍTULO 4. ANÁLISIS Y DISEÑO
Entidad: RESOURCE
La entidad RESOURCE representa los recursos disponibles para las reservas. Algunos atri-
butos relevantes son:
START TIME SLOT: Hora de inicio del intervalo de tiempo del recurso.
END TIME SLOT: Hora de finalización del intervalo de tiempo del recurso.
La entidad RESOURCE TYPE representa los diferentes tipos de recursos disponibles. Algunos
atributos son:
Entidad: admin
Esta entidad representa a los administradores del sistema. Algunos de los atributos de
esta entidad son:
65
4.4. DISEÑO
Entidad: COACH
Entidad: FESTIVE
La entidad TIME SLOT representa los diferentes intervalos de tiempo disponibles para las
reservas. Algunos atributos son:
66
CAPÍTULO 4. ANÁLISIS Y DISEÑO
Entidad: BILL
La entidad BILL representa las facturas generadas por las reservas. Algunos atributos
relevantes de esta entidad son:
La entidad PAY TYPE representa los diferentes tipos de pago disponibles. Para cuando se
implemente la funcionalidad de pago.
Estas son algunas de las entidades presentes en el modelo relacional de la base de da-
tos. Cada entidad tiene sus atributos especı́ficos que permiten almacenar y relacionar la
información de manera organizada y coherente.
En esta sección, se presentan los diagramas de secuencia más relevantes de la API, con
el propósito de brindar una visión clara y detallada de las interacciones y flujos de datos que
ocurren durante su funcionamiento. Estos diagramas permiten visualizar de manera gráfica
la secuencia de eventos y las interacciones entre los diferentes componentes de la API, lo
que facilita la comprensión de cómo se llevan a cabo las operaciones y se procesan los datos
en el sistema. En lugar de detallar exhaustivamente cada diagrama de secuencia para cada
interacción individual, se mencionaran unos pocos ya que siguen el mismo patrón.
67
4.5. DISEÑO DEL BOT DE TELEGRAM
Figura 4.11: Diagrama de secuencia: búsqueda de recurso disponible entre dos fechas
En esta sección, se detalla el diseño del bot de Telegram como parte integral de la apli-
cación desarrollada. El bot de Telegram se ha implementado con el propósito de permitir a
68
CAPÍTULO 4. ANÁLISIS Y DISEÑO
69
4.5. DISEÑO DEL BOT DE TELEGRAM
los usuarios interactuar con el sistema de gestión de reservas de pádel de manera conveniente
y accesible. A continuación, se explica el flujo de interacción del bot con los usuarios. Se
detallan las funcionalidades principales que el bot ofrece, como la visualización de horarios
disponibles, la realización de reservas, la consulta de reservas existentes y la gestión de no-
tificaciones. Se describen los comandos y/o botones que los usuarios pueden utilizar para
acceder a estas funcionalidades, y se proporciona una explicación clara de cómo se procesan
y responden las solicitudes del usuario.
Se ha utilizado para modelar las diferentes etapas o estados por las que puede pasar el
formulario interactivo del bot de Telegram. Cada estado representa una situación especı́fica
en el flujo de interacción con el [Link] ejemplo es la la clase ChooseResourceState que
permite seleccionar un recurso implementa la interfaz FormState, que define los métodos
comunes para gestionar los diferentes estados del formulario. El patrón Estado facilita la
gestión y transición entre los distintos estados del formulario. [18]
70
CAPÍTULO 4. ANÁLISIS Y DISEÑO
71
4.5. DISEÑO DEL BOT DE TELEGRAM
El patrón Observador se utiliza para establecer una relación de dependencia uno a muchos
entre objetos, de modo que cuando un objeto cambia de estado, todos los objetos dependien-
tes son notificados y actualizados automáticamente. En este proyecto, se ha utilizado el
patrón Observador en la interfaz FormBuilderObserver. Esta interfaz define métodos co-
mo onDeletedMessageUpdated y onSendMessageUpdated. La clase FormBuilder tiene una
asociación con FormBuilderObserver a través del atributo observer. El patrón Observador
ha permitido la comunicación efectiva entre objetos y ha asegurado la consistencia cuando
ocurren cambios en el estado de los formularios. [20]
En esta sección, se detallan los diagramas de actividad más relevantes del bot de Telegram
y la comunicación con la API a la hora de reservar un recurso.
72
CAPÍTULO 4. ANÁLISIS Y DISEÑO
73
4.5. DISEÑO DEL BOT DE TELEGRAM
74
CAPÍTULO 5. IMPLEMENTACIÓN
Capı́tulo 5
Implementación
En este capı́tulo, se presenta la estructura final del código tanto del bot como de la API
desarrollados en el contexto de este proyecto. Además, se detalla las dependencias utilizadas
asi como las medidas tomadas para adapterse al diseño.
Para agilizar y simplificar el proceso de implementación se ha optado por el uso del plugin
“openapi-generator-maven-plugin”[21] ya que es de gran utilidad en el desarrollo de un API
para utomatizar la generacion de codigo a partir de la especificacion de OpenAPI.
La ventaja clave de este plugin es que elimina gran parte del trabajo manual y propenso
a errores que implica escribir el código de la API desde cero. En su lugar, simplemente pro-
porcionamos la especificación OpenAPI, que describe la estructura de la API, los endpoints,
los modelos de datos y otros detalles importantes.
75
5.1. API OPENAPI-GENERATOR
Otra ventaja del uso de este plugin es que, al generar el código a partir de la especifi-
cación OpenAPI, se mantiene una fuerte coherencia entre la documentación de la API y su
implementación. Esto facilita la comprensión y el mantenimiento de la API a lo largo del
tiempo, ya que cualquier cambio en la especificación OpenAPI puede ser fácilmente reflejado
en el código generado.
76
CAPÍTULO 5. IMPLEMENTACIÓN
5.1.1. Dependecias
JPA (Java Persistence API): JPA es una especificación estándar de Java que pro-
porciona una interfaz de programación para administrar la persistencia de los datos en
aplicaciones Java. Se utiliza para mapear objetos Java a tablas en una base de datos re-
lacional y realizar operaciones de consulta y manipulación de datos de manera sencilla
y eficiente. La interfaz JpaRepository de Spring Data JPA define métodos predefinidos
para realizar operaciones comunes en una entidad, como guardar, eliminar y buscar
registros. Sin embargo, en ocasiones es necesario realizar consultas personalizadas que
no se ajustan a las operaciones predefinidas.
77
5.1. API OPENAPI-GENERATOR
Para ello, se utiliza la anotación @Query junto con una consulta en lenguaje especı́fi-
co, como JPQL (Java Persistence Query Language) o SQL, para definir una consulta
personalizada. Esta anotación se coloca encima de un método en el repositorio de la
entidad correspondiente.
Lombok: Lombok es una biblioteca de Java que ayuda a reducir la cantidad de código
repetitivo y tedioso al generar automáticamente métodos getter, setter, constructores,
toString y otros métodos comunes en tiempo de compilación. Esto mejora la legibilidad
del código y acelera el desarrollo al evitar la escritura manual de código redundante.
SLF4J (Simple Logging Facade for Java):Es una herramienta que proporciona
una abstracción para el registro de eventos en aplicaciones [Link] el proceso
de registro de eventos al proporcionar una fachada común para diferentes sistemas
de registro. Permite escribir código de registro independiente del sistema de registro
78
CAPÍTULO 5. IMPLEMENTACIÓN
5.2. Seguridad
5.2.1. Autentificacion
79
5.3. IMPLEMENTACIÓN DEL BOT DE TELEGRAM
1. /partidas: Permite a los usuarios obtener información sobre las pistas de pádel dispo-
nibles para realizar reservas. Al acceder a este punto, se muestra una lista de las pistas
disponibles, seleccionando uno de los próximos cinco dı́as, el horario y la disponibili-
dad en tiempo real. Los usuarios pueden consultar esta información para seleccionar la
pista deseada y proceder con la reserva. Seleccionando en el recurso que deseen podran
unirse a una partida o reservarlo de forma privada o pública.
2. /misreservas: Este punto de entrada está destinado a proporcionar a los usuarios ac-
ceso a sus reservas existentes. Al acceder a este punto, los usuarios pueden ver una lista
de las reservas que han realizado, incluyendo detalles como la fecha, la hora y la pista
reservada. Además, se puede mostrar información adicional, como el estado de la reser-
va (confirmada, pendiente, cancelada, etc.) y la posibilidad de realizar modificaciones
o cancelaciones.
3. /info: El punto de entrada /info ofrece a los usuarios acceso a información general sobre
el sistema de gestión de reservas de pádel. Aquı́ se pueden proporcionar detalles sobre
el funcionamiento del sistema, las polı́ticas de reservas, las tarifas, las reglas de uso de
las instalaciones, entre otros. Es una sección informativa que brinda a los usuarios una
visión completa de cómo utilizar el sistema y qué esperar al realizar una reserva.
80
CAPÍTULO 6. PRUEBAS
Capı́tulo 6
Pruebas
6.1. Objetivos
El objetivo de las pruebas es validar que los endpoints de la API se comporten de acuerdo
con las especificaciones y requisitos establecidos. A través de las pruebas, podemos verificar
la funcionalidad, el rendimiento, la seguridad y la integridad de la API. También podemos
detectar y corregir posibles errores o problemas antes de que la API se implemente en un
entorno de producción.
En primer lugar, se realizarán pruebas de caja negra, las cuales permitirán evaluar el
comportamiento general de la API sin necesidad de conocer los detalles internos de su im-
plementación. Se probarán los diferentes endpoints de la API, verificando las respuestas
esperadas y asegurándose de que los usuarios identificados tengan acceso adecuado según sus
roles. Esta etapa de pruebas permitirá validar el flujo general de la aplicación y su capacidad
para manejar diferentes situaciones de uso.
En segundo lugar, se llevarán a cabo pruebas de error y excepciones para evaluar cómo
la API maneja situaciones especı́ficas de error. Se probarán tanto respuestas correctas como
respuestas de error, como por ejemplo, los códigos de error 404 (Recurso no encontrado) y
403 (Acceso no autorizado). Estas pruebas se enfocarán en verificar que la API devuelva
códigos de error apropiados, mensajes claros y mantenga la integridad de los datos en casos
de excepciones y errores.
81
6.2. PRUEBAS DE LOS END-POINTS
82
CAPÍTULO 6. PRUEBAS
83
6.2. PRUEBAS DE LOS END-POINTS
84
CAPÍTULO 6. PRUEBAS
85
6.2. PRUEBAS DE LOS END-POINTS
86
CAPÍTULO 7. CONCLUSIONES Y LINEAS FUTURAS
Capı́tulo 7
7.1. Conclusiones
87
7.2. LINEAS FUTURAS
2. Interfaz de Usuario con React Native: Para ampliar la accesibilidad y ofrecer una
experiencia fluida en dispositivos móviles, se podrı́a considerar la implementación de
una interfaz de usuario utilizando React Native. Esto permitirı́a que la aplicación esté
disponible en plataformas móviles, como iOS y Android, y brindarı́a a los usuarios la
capacidad de realizar reservas y acceder a la funcionalidad de manera nativa desde sus
dispositivos móviles.
3. Integración con Java Mail Sender: Para mejorar la comunicación con los usuarios, se
podrı́a implementar la funcionalidad de envı́o de correos electrónicos utilizando Java
Mail Sender. Esto permitirı́a enviar notificaciones, confirmaciones de reserva y recorda-
torios por correo electrónico, manteniendo a los usuarios informados de manera eficaz
y automatizada.
4. Inicio de Sesión con Redes Sociales: Para simplificar el proceso de inicio de sesión y
aumentar la adopción de la plataforma, se podrı́a agregar la opción de inicio de sesión
utilizando cuentas de redes sociales populares, como Facebook, Google o Twitter. Esto
permitirı́a a los usuarios registrarse e ingresar al sistema de manera más rápida y
conveniente, utilizando sus credenciales de redes sociales existentes.
5. Implementación de Funcionalidades Avanzadas: Como lı́neas futuras, se podrı́a consi-
derar la incorporación de funcionalidades avanzadas, como la gestión de disponibilidad
en tiempo real, la programación de reservas recurrentes, la generación de informes y
estadı́sticas, entre otras. Estas mejoras proporcionarı́an una mayor flexibilidad y per-
sonalización en la gestión de reservas y permitirı́an adaptarse a diferentes necesidades
y escenarios.
6. Despliegue del bot en otro servidor y creación de una autorización especial para ese
bot: Se podrı́a explorar la opción de desplegar el bot de Telegram en un servidor
distinto al de la API y crear una autorización especial para ese bot. Esto permitirı́a una
mayor escalabilidad y separación de las funcionalidades, ası́ como la implementación
de medidas de seguridad especı́ficas para el bot.
88
APÉNDICE A. MANUAL DE USO
Apéndice A
Manual de uso
Este manual se divide en dos secciones, la primera dedicada al uso de la API y la segunda,
al uso del bot de Telegram.
El “Manual de uso para front-end” es una guı́a completa que proporciona a los usuarios
del front-end de la aplicación toda la información necesaria para comunicarse correctamente
con el backend. Este manual tiene como objetivo garantizar que el front-end tenga un co-
nocimiento completo de las estructuras de entrada y salida, ası́ como de todas las posibles
respuestas del backend.
89
A.1. MANUAL DE USO PARA FRONT-END
90
APÉNDICE A. MANUAL DE USO
91
A.1. MANUAL DE USO PARA FRONT-END
4. Realizar llamadas a los endpoints: A través de la interfaz del Swagger Editor, los
usuarios pueden realizar llamadas a los endpoints de la API y ver las respuestas co-
rrespondientes. Esto les permite probar la funcionalidad de la API y verificar que está
respondiendo correctamente.
En el contexto de un sistema de autenticación, el uso de un token de acceso es fun-
damental para garantizar la seguridad y autorización adecuada de las solicitudes al
backend. Este token de acceso se obtiene mediante el proceso de inicio de sesión o
creación de un usuario en el sistema.
Con el token de acceso en mano, el cliente (frontend) puede incluirlo en el encabezado
de autorización de cada solicitud subsiguiente como un token Bearer, haciendo click en
el candado de la petición. Esto permite al servidor verificar la identidad del usuario y
autorizar las solicitudes en función de los permisos asignados al usuario.
92
APÉNDICE A. MANUAL DE USO
rol de administrador. Esto implica que el usuario autenticado debe tener los privilegios
correspondientes para acceder y realizar operaciones en esas partes del sistema.
El uso del bot de Telegram es muy sencillo y sigue la lógica de negocio que utilizan los
usuarios en el grupo de Telegram. Para acceder al bot, simplemente se busca su nombre de
usuario, que es @PadelMachBot. El bot de Telegram ofrece un menú con varias opciones
para que el usuario pueda interactuar con él de manera conveniente.
La interfaz del bot está diseñada de manera intuitiva, guiando al usuario a través de las
opciones disponibles. El bot presenta al usuario diferentes opciones para elegir, y el usuario
puede seleccionar la opción deseada simplemente con una pulsación.
Una caracterı́stica destacada del bot es que no permite retroceder en las elecciones reali-
zadas. Esto significa que una vez que el usuario ha seleccionado una opción, no puede cambiar
de opinión o retroceder en el flujo de interacción. Esto garantiza que el usuario siempre esté
guiado y las respuestas mostradas por el bot correspondan a las elecciones realizadas por el
usuario.
93
A.2. USO DEL BOOT
94
APÉNDICE B. CONTENIDOS DEL CD-ROM
Apéndice B
95
96
APÉNDICE B. CONTENIDOS DEL CD-ROM
97
98
BIBLIOGRAFÍA
Bibliografı́a
[1] cmdsport. ((Padel se erige como el deporte de mayor crecimiento a nivel mundial.))
(2020), dirección: [Link]
erige-deporte-mayor-crecimiento-nivel-mundial/.
[2] Playtomic. ((Condiciones generales - Playtomic Blog.)) (2022), dirección: https : / /
[Link]/condiciones-generales/.
[3] ((Spring Framework.)) (2022), dirección: [Link]
Framework.
[4] ((OpenAPI Specification 3.0.3.)) (2022), dirección: [Link]
Specification/blob/main/versions/[Link].
[5] Trello. ((Trello - utilidades.)) (2020), dirección: [Link]
[6] MySQL. ((MySQL Documentation.)) (2022), dirección: [Link]
[7] MySQL. ((MySQL Workbench Documentation.)) (2022), dirección: https : / / dev .
[Link]/doc/workbench/.
[8] Telegram. ((Telegram.)) (2022), dirección: [Link]
[9] A. Friends. ((Caracterı́sticas de XAMPP.)) (2022), dirección: [Link]
org/es/[Link].
[10] A. IT. ((¿Qué es Postman?)) (Fecha de publicación), dirección: [Link]
com/postman/que-es-postman/.
[11] JetBrains. ((IntelliJ IDEA.)) (Fecha de publicación), dirección: [Link]
com/idea/.
[12] ((Scrum - Atlassian.)) (), dirección: [Link]
[13] ((¿Qué es Scrum? - [Link].)) (), dirección: [Link]
blog/que-es-scrum.
[14] Tecnova. ((DDD (Domain-Driven Design).)) (2021), dirección: [Link]
cl/2021/06/23/ddd-domain-driven-design/.
[15] Swagger. ((Adopting an API-First Approach.)) (Fecha de publicación), dirección: https:
//[Link]/resources/articles/adopting-an-api-first-approach/.
[16] talent. ((Salario de ingeniero de software.)) (2020), dirección: [Link]
salary?job=ingeniero+de+software.
99
BIBLIOGRAFÍA
100