Skip to content

Latest commit

 

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OptiTour: Una aplicación web para la optimización de rutas turísticas

Autores

Rol Nombre
Alumno Marcos Hernández Martín
Tutor Michel Maes Bermejo

Índice

Descripción general

OptiTour es una aplicación web colaborativa para la optimización de rutas turísticas, en la que los usuarios pueden organizar tours grupales. Los tours vienen conformados por una serie de puntos de interés, entre los que se pueden encontrar museos, monumentos, etc.; la aplicación web calcula la ruta óptima para recorrer dichos puntos de interés. Estos cálculos se realizan mediante los datos obtenidos a partir de una API externa consultada por el servidor, que proporciona la información necesaria para ofrecer la ruta óptima.

El desarrollo de esta aplicación se realiza en el contexto del Trabajo de Grado del Grado en Ingeniería del software, en la Escuela Técnica Superior de Ingeniería Informática de la Universidad Rey Juan Carlos

Actualmente solo se han definido los objetivos funcionales y los objetivos técnicos de la aplicación. El desarrollo ya ha sido iniciado, pero la implementación todavía no es funcional.

Objetivos

Objetivos funcionales

El principal objetivo de OptiTour es brindar a los usuarios una herramienta colaborativa que les permita organizar viajes en grupo. Se busca simplificar la toma de decisiones grupal, mostrando a los usuarios lugares de interés que puedan visitar y cómo recorrerlos todos de manera eficiente, de modo que los usuarios puedan centrarse en disfrutar de los lugares que visitan en lugar de discutir acerca de las rutas a tomar.

  • Gestión de perfiles de usuario: Registro, inicio y cierre de sesión y gestión del perfil.
  • Exploración de puntos de interés: Búsqueda y visualización de información sobre lugares turísticos.
  • Planificación colaborativa: Creación de grupos privados para que los usuarios organicen viajes de manera conjunta, o posibilidad de unirse a grupos públicos.
  • Generación de rutas optimizadas: Algoritmo que resuelve un Problema del Viajante para ordenar los puntos de interés de modo que el tiempo que se dedica a los trayectos entre estos sea mínimo.
  • Catálogo público de tours: Listado de tours publicados por el administrador de la aplicación, de modo que tanto grupos privados como públicos puedan unirse.
  • Gestión de tours privados: Creación de tours personalizados, de manera exclusiva para grupos privados, donde los usuarios eligen los puntos de interés, en lugar de ser una selección predefinida.

Objetivos técnicos

OptiTour será una aplicación web de arquitectura SPA, que se conectará a un backend monolítico que expondrá una API REST. El sistema se empaquetará para su despliegue mediante contenedores Docker, gestionando el ciclo de vida mediante herramientas de Integración Continua (CI) y Despliegue Continuo (CD).

  • Frontend: Desarrollo de una SPA (Single Page Application) mediante la librería React (con TypeScript).
  • Backend: Construcción de una API REST mediante el framework de Java Spring Boot.
  • Persistencia: Almacenamiento de datos con una base de datos relacional MySQL.
  • Control de Calidad: Implementación de test automáticos (unitarios y E2E) mediante librerías como JUnit o Selenium.
  • Contenedores: Empaquetado de la aplicación mediante Docker y uso de Docker Compose para orquestación.
  • API externa: Llamadas desde el servidor a un servicio externo que proporcione los datos necesarios para la optimización de rutas.
  • Pasarela de pago: Integración de la pasarela Stripe para transacciones económicas dentro de la aplicación.
  • Notificaciones: Integración de un sistema de mensajería instantánea.
  • Búsqueda textual avanzada: Implementación de un motor de búsqueda avanzado para puntos de interés y tours.
  • Despliegue en Cloud: Mediante Azure.
  • Despliegue continuo: Mediante GitHub Actions.

Metodología

El proyecto se desarrollará siguiendo una metodología iterativa e incremental. El trabajo se organizará en las siguientes fases a lo largo del curso académico:

Fases del desarrollo

  • Fase 1: Definición de funcionalidades (15 de septiembre): Se describirá la funcionalidad general y detallada.
  • Fase 2: Repositorio, pruebas y CI (15 de octubre): Configuración de las tecnologías y herramientas de desarrollo con controles de calidad que se realizan de forma periódica.
  • Fase 3: Versión 0.1 - Funcionalidad básica y Docker (15 de diciembre): Desarrollo iterativo e incremental de la aplicación. Al final de esta fase se publicará una versión (release).
  • Fase 4: Versión 0.2 - Funcionalidad intermedia (1 de marzo): Desarrollo iterativo e incremental de la aplicación. Al final de esta fase se publicará una versión (release).
  • Fase 5: Versión 1.0 - Funcionalidad avanzada (15 de abril): Desarrollo iterativo e incremental de la aplicación. Al final de esta fase se publicará una versión (release).
  • Fase 6: Memoria (15 de mayo): Escritura de la memoria.
  • Fase 7: Defensa (15 de junio): Preparación de la presentación.

Diagrama de Gantt

gantt
    title Planificación del TFG - OptiTour
    dateFormat  YYYY-MM-DD
    axisFormat  %b %Y

    section Diseño
    Fase 1 - Definición de funcionalidades y pantallas :a1, 2026-07-01, 2026-09-15

    section Infraestructura
    Fase 2 - Repositorio, pruebas y CI               :a2, 2026-09-16, 2026-10-15

    section Desarrollo (Iterativo)
    Fase 3 - V0.1 Básica y Docker                  :a3, 2026-10-16, 2026-12-15
    Fase 4 - V0.2 Intermedia                       :a4, 2026-12-16, 2027-03-01
    Fase 5 - V1.0 Avanzada                         :a5, 2027-03-02, 2027-04-15
    section Cierre
    Fase 6 - Memoria                                 :a6, 2027-04-16, 2027-05-15
    Fase 7 - Defensa                                 :a7, 2027-05-16, 2027-06-15
Loading

Funcionalidades detalladas

A continuación se presentan las funcionalidades detalladas, organizadas en una tabla según sean básicas, intermedias o avanzadas:

Tipo Funcionalidad Usuario Descripción
Básica Listado de tours públicos en la página principal Anónimo Listado de tours públicos destacados en la página principal
Básica Consulta de detalle de puntos de interés Anónimo Visualización en detalle de los datos de los puntos de interés que contienen los tour
Básica Creación de puntos de interés Administrador Creación de nuevos puntos de interés por parte de un administrador para poder ser incluidos en los tour
Básica Consulta de detalle de tour Anónimo Consulta de la página de detalle de un tour.
Básica Registro de usuario Anónimo Registro de nuevas cuentas de usuario.
Básica Inicio de sesión Anónimo Identificación de usuarios ya registrados.
Básica Cierre de sesión Registrado Finalización segura de la sesión activa del usuario.
Básica Validación de formularios Todos Validación en cliente y servidor de todos los campos.
Básica Modificación de datos de perfil Registrado Edición de los datos asociados a la cuenta de usuario.
Básica Gestión de tours Administrador Adición, eliminación y edición de tours públicos.
Básica Registro de administrador Administrador Creación de nuevas cuentas de administración. La primera cuenta vendrá grabada en el código fuente y deberá cambiar su contraseña en el primer inicio de sesión.
Básica Bloqueo de usuarios Administrador Bloqueo de usuarios que no cumplen las normas de la plataforma, limitando el uso de la misma como usuario registrado.
Básica Panel de administrador Administrador Página especial para administradores donde se encuentran las funcionalidades para este grupo de usuarios (estadísticas, creación de tours, registro de nuevos administradores o bloqueo de usuarios)
Intermedia Lista de amigos Registrado Registro y eliminación de amigos en la lista. Gestión de solicitudes de amistad.
Intermedia Creación de grupos privados Registrado Creación de grupos de usuarios a partir de la lista de amigos. El usuario creador del grupo pasa a ser su líder, con permisos para gestionar miembros y apuntar al grupo a tours. Otros miembros pueden solicitar asumir ese rol desde el detalle del grupo.
Intermedia Creación de grupos públicos Administrador Creación de nuevos grupos turísticos públicos, a los que cualquier usuario puede unirse.
Intermedia Creación de tours privados Registrado Registro de un nuevo tour privado a partir de una lista de puntos de interés.
Intermedia Notificaciones Registrado Recepción de notificaciones en la plataforma (solicitudes de amistad, nuevos tours, etc.)
Intermedia Búsqueda por filtros Anónimo Filtrado de tours por precio, duración o tipo.
Avanzada Cálculo de ruta óptima Registrado Cálculo, mediante un algoritmo, de la ruta óptima dentro de los lugares de interés de un tour. Se realiza automáticamente durante la creación de un tour, pero puede actualizarse el resultado por si la ruta cambia con el tiempo según los datos (condiciones de tráfico, obras, etc). Estos datos se obtienen desde una API externa. Se puede calcular la ruta óptima tanto para realizarla caminando como para realizarla en coche.
Avanzada Pago de tours premium Registrado Pago mediante la pasarela de pago de stripe de tours públicos premium.
Avanzada Notificaciones por mensajería Registrado Recepción de notificaciones a través de servicio de mensajería externo.
Avanzada Búsqueda de tours Anónimo Uso el motor de búsqueda avanzado para encontrar tours.

Análisis

Diseño de las pantallas

Sistema público y autenticación

Pantalla principal

Pantalla principal

Página principal de la plataforma. Muestra un carrusel de imágenes de tours destacados a modo de portada. Todos los tours públicos pueden consultarse en la lista inferior. Por su parte, se puede utilizar la barra superior para realizar búsquedas de texto avanzadas, para encontrar tanto tours como puntos de interés.

Iniciar sesión

Iniciar sesión

Formulario de inicio de sesión. El inicio de sesión se lleva a cabo mediante correo electrónico y contraseña. Contiene enlaces al registro y de vuelta a la página principal.

Registro de usuario

Registro de usuario

Formulario para registrar una nueva cuenta de usuario. Permite enviar imagen de perfil, correo electrónico, número de teléfono, nombre y apellidos, así como establecer la contraseña. Contiene enlaces al inicio de sesión y de vuelta a la página principal.

Detalle de tour público sin iniciar sesión

Detalle de tour público sin iniciar sesión

Si el usuario no ha iniciado sesión, tiene permitido consultar los datos básicos del tour, así como la ruta óptima. También puede consultar grupos públicos para poder realizar el tour. No puede apuntarse al tour.

Detalle de punto de interés

Detalle de punto de interés

Todos los usuarios tienen los mismos permisos en esta página, debido a que los puntos de interés no pueden utilizarse por sí mismos sin incluirlos en un tour, por lo que se trata de una página meramente informativa que muestra los datos e imágenes de un punto de interés, así como los tours donde dicho punto de interés se visita.

Usuario registrado

Detalle de tour para usuario registrado

Detalle de tour para usuario registrado

Si el usuario ha iniciado sesión, puede consultar adicionalmente qué amigos suyos se han apuntado al tour, y qué grupos tiene en común, sin perder la posibilidad de consultar grupos públicos. Tiene permitido apuntarse al tour, y realizar el pago si el tour lo requiere.

Creación de tour

Creación de tour

En la lista de la derecha, el usuario puede buscar, consultar y añadir puntos de interés a su tour privado. A medida que el usuario los añade, se irán marcando los puntos de interés en el mapa interactivo. Una vez haya terminado, pulsará uno de los botones inferiores, según prefiera realizar la ruta caminando o en coche, y se mostrará la ruta óptima sobre el mapa interactivo. Se incluye un itinerario con 3 puntos de interés a modo de ejemplo, una vez el algoritmo haya sido ejecutado.

Perfil de usuario

Perfil de usuario

Página que muestra los datos personales de la cuenta de usuario. Permite edición de información personal, de contraseña, y eliminación de la cuenta.

Lista de amigos

Lista de amigos

Listado que muestra las cuentas de los perfiles amigos del usuario. Para enviar nuevas solicitudes de amistad, el usuario buscará el nombre su amigo en la barra superior. Cuando el otro usuario acepte la solicitud de amistad, ambos usuarios serán amigos mutuamente. Podrán consultarse los perfiles de los amigos y eliminarlos de su lista.

Lista de grupos

Lista de grupos

Listado que muestra los grupos en los que se encuentra incluido el usuario. Se podrán buscar los grupos por nombre, ver su detalle y crear un nuevo grupo. Solo podrán crearse nuevos grupos a partir de usuarios que consten en la lista de amigos. El usuario creador del grupo será su líder, rol que ofrece ventajas administrativas como incluir y eliminar usuarios o apuntar al grupo a tours.

Detalle de grupo

Detalle de grupo

Página que muestra más información acerca de los grupos. Muestra los usuarios incluidos y la lista de tours a los que el grupo se ha apuntado. Permite al usuario abandonar el grupo y solicitar el rol de líder, ya que los grupos no limitan este rol a un único usuario.

Listado de tours inscritos

Listado de tours públicos

Listado de tours inscritos a nivel individual. A diferencia del listado que aparece en el detalle de grupo, este listado muestra todos los tours inscritos, incluso si son de diferentes grupos. Permite crear un nuevo tour privado, para lo cual el usuario debe estar incluido en al menos un grupo.

Notificaciones

Notificaciones

Listado de notificaciones del usuario. Aquí se reciben las solicitudes de amistad, las invitaciones a grupos, inclusiones en tours, entre otra información relevante (por ejemplo, promociones, pagos correctos, inscripciones a tours públicos, etc.).

Historial de compras

Historial de compras

Listado de transacciones realizadas en la plataforma. Las transacciones económicas se utilizan para tours premium en los que OptiTour contrata personal de guía y se hace cargo de alojamiento, transporte, etc.

Administrador

Gestión de usuarios

Gestión de usuarios

Panel en el que el administrador puede consultar estadísticas generales sobre el uso de usuarios registrados de la plataforma. Además, puede bloquear y desbloquear a aquellos usuarios que incumplan las normas de la plataforma. Por otro lado, se pueden crear nuevas cuentas de administrador desde aquí, estando la primera cuenta de administración grabada en el código fuente y debiendo cambiar su contraseña en el primer inicio de sesión.

Gestión de puntos de interés

Gestión de puntos de interés

Panel en el que el administrador puede consultar estadísticas generales de los puntos de interés, así como añadir, eliminar, editar y consultar puntos de interés.

Gestión de facturas

Gestión de facturas

Panel en el que el administrador puede consultar los resultados financieros de la plataforma, desde estadísticas generales hasta las transacciones específicas.

Navegación general

La navegación de la aplicación parte de la pantalla principal, desde la que se accede al registro, al inicio de sesión, al listado de tours públicos y al detalle de un punto de interés.

Desde el listado de tours públicos se accede al detalle de cada tour. Si el usuario está autenticado, puede además consultar la versión ampliada del detalle, apuntarse al tour, realizar pagos cuando corresponda y acceder a la creación de tours privados.

La zona privada del usuario se concentra en el perfil, desde donde se accede a la gestión de amigos, grupos, notificaciones e historial de compras.

La zona de administración agrupa la gestión de usuarios, puntos de interés y facturas, manteniendo centralizadas las tareas de control de la plataforma.

Entidades y Relaciones

Se presentan a continuación las entidades que conformarán el sistema. Se asume que todas las entidades tienen un atributo que las identifica unívocamente:

Entidad Atributos Relaciones Descripción
Usuario • E-mail
• Contraseña
• Nombre de usuario
• Número de teléfono
• Foto de perfil
• Lista de amigos
• Lista de grupos
• Lista de notificaciones • Usuario activo
• Lista de roles
• Grupo - N:M
• Amigos - N:M (recursiva)
• Tour - N:M
• Notificación - 1:N
Cuenta de usuario registrado.
Grupo
• Lista de usuarios
• Lista de tours
• Usuario líder del grupo
• Usuario - N:M
• Usuario - 1:M
• Tour - N:M
Conjunto de usuarios que pueden contratar tours en conjunto o crear sus propios tour personalizados. La gestión (creación, borrado, definición de más líderes, inclusión y eliminación de usuarios de la lista de amigos) la lleva a cabo un usuario con el rol de "líder", siendo éste el usuario creador del grupo, con posibilidad de ampliación.
Punto de interés • Nombre
• Descripción
• Ciudad
• Dirección
• Coordenadas
• Lista de imágenes
• Precio (si es premium)
• Tour - N:M Lugar que a los usuarios del sistema les resulta interesante visitar. Es el elemento básico de los tour, siendo los destinos que el algoritmo utilizará para calcular las rutas.
Tour • Nombre
• Descripción
• Lista de lugares de interés
• Punto de interés - N:M Conjunto de puntos de interés de la misma temática que se visitan en un orden definido por el sistema para poder recorrerlos en tiempo óptimo. Pueden ser públicos, publicados por un administrador, o privados, organizados por grupos de usuarios que solo dicho grupo puede ver.
Notificación • Título
• Cuerpo
• Leída/No leída
• Usuario - N:1 Mensajes que alertan al usuario acerca de novedades de su interés dentro de la plataforma. Por ejemplo, solicitudes de amistad, invitaciones a grupos o información sobre nuevos tours públicos.
Transacción • Concepto
• Importe
• Estado
• Fecha
• Usuario - N:1 Registro de una operación económica realizada por un usuario dentro de la plataforma.

Permisos de usuarios

Rol de usuario Permisos
Anónimo • Visualización de la página principal.
• Consulta de catálogo de tours públicos y puntos de interés.
• Registro en la plataforma.
• Búsqueda de tours.
Registrado • Gestión completa de su perfil (editar datos, foto)
• Gestión de lista de amigos (añadir, eliminar y consultar amigos)
• Creación y gestión (invitar a amigos, unirse, eliminar) de grupos de viaje privados.
• Creación y edición de tours privados personalizados.
• Recepción de notificaciones.
• Cálculo de rutas óptimas.
• Realización de pagos mediante Stripe.
Administrador • Gestión (creación, lectura, modificación y borrado) de puntos de interés y tours públicos.
• Creación de grupos turísticos públicos.
• Bloqueo y desbloqueo de usuarios.
• Acceso a estadísticas mediante panel de administración.

Imágenes

Entidad Descripción de las imágenes
Usuario • Una imagen de perfil por usuario
Punto de interés • Una o varias imágenes que muestren el lugar turístico
Tour • Una imagen de portada representativa del itinerario del tour
Grupo • Una imagen de icono de grupo

Gráficos

Todos los gráficos se mostrarán en el panel de administrador.

Información a mostrar Tipo de gráfico
Ingresos: Evolución de los ingresos generados por la plataforma a lo largo del tiempo. Lineal
Cantidad de puntos de interés: Evolución del número de puntos de interés disponibles en la plataforma. Lineal
Usuarios activos vs bloqueados: Comparación entre usuarios activos y usuarios bloqueados. Tarta
Evolución de usuarios: Crecimiento o variación del número total de usuarios registrados. Lineal

Tecnología complementaria

Como tecnología complementaria, la plataforma hará uso de la API externa de algún sistema de mapas (por ejemplo, Google Maps) para obtener los datos necesarios para optimizar las rutas de los tours. Asimismo, el sistema utilizará Telegram para enviar notificaciones a los usuarios que lo deseen.

Algoritmo o consulta avanzada

Como ya se ha descrito anteriormente, el algoritmo avanzado de la aplicación consiste en un algoritmo de optimización de rutas entre varios puntos, tratándose más concretamente de la resolución de una variante Problema del Viajante. Estos cálculos se realizarán a partir de los datos obtenidos mediante la API externa escogida como tecnología complementaria. El algoritmo podrá ejecutarse en dos modalidades: para recorrer los puntos de interés caminando o en coche (ya que las aplicaciones de mapas suelen ofrecer estas rutas por separado). El algoritmo se ejecutará automáticamente una primera vez durante la creación del tour, pero el usuario podrá actualizar el resultado cuando el tour dé comienzo (ejecutando el algoritmo de nuevo) para tener en cuenta posibles obstáculos temporales como atascos, obras accidentes, etc.

Guía de desarrollo

Introducción

OptiTour se trata de una aplicación web SPA (Single Page Application). Esta clase de aplicaciones web se caracteriza por contener la interfaz de usuario en un único fichero HTML, que va cambiando según el usuario navega por la aplicación. Estas aplicaciones tienen una navegación más fluida, al no necesitar que el navegador refresque la página con cada interacción, ya que las peticiones al servidor se realizan en segundo plano.

En general, la arquitectura de OptiTour se divide en tres partes diferentes:

  • Cliente: Se trata de la interfaz que utilizarán los usuarios desde su navegador.
  • Servidor: Es la parte encargada de manipular y enviar los datos al cliente cuando los necesita. Funciona por medio de una API REST.
  • Base de Datos: Sistema de persistencia utilizado para almacenar los datos de la aplicación de manera ordenada.

A continuación se presenta un resumen más detallado de las herramientas y tecnologías utilizadas durante el desarrollo:

  • Tipo: Aplicación Web SPA

  • Tecnologías

  • Herramientas

  • Arquitectura de despliegue

    • OptiTour sigue una arquitectura cliente-servidor ubicada en dos procesos principales, empaquetados de manera independiente mediante Docker:
      • Frontend (Cliente): Una Single Page Application desarrollada en React que sirve la aplicación desde el navegador del usuario.
      • Backend (Servidor): Monolito construido con Spring Boot que expone una API REST para procesar la lógica de negocio, incluyendo la comunicación con el servidor externo de mapas y la implementación del algoritmo de cálculo de rutas.
      • Base de datos: Base de datos relacional MySQL que actúa como capa de persistencia.
    • Documentación de la API REST: Realizada con OpenAPI.
  • Control de calidad: Actualmente sólo se prueba la funcionalidad mínima, es decir, el método getAllTours de la clase TourService. Este control de calidad se realiza mediante diferentes tipos de pruebas tanto en el lado del cliente como del servidor.

    • Controles de calidad en el servidor
      • Test unitarios: Prueba el método getAllTours mediante un doble de la base de datos. JUnit (https://junit.org/) y Mockito. (https://site.mockito.org/) Test unitario del servidor
      • Test de integración: Se prueba la integración con la base de datos, mediante un contenedor Testcontainers (https://testcontainers.com/) para tener una base de datos temporal que funcione realmente en lugar de un doble. Se necesita que la máquina esté ejecutando Docker para que el test pase. Test de integración del servidor
      • Pruebas de sistema End to End para el cliente: Se utiliza Selenium (https://www.selenium.dev/) para comprobar que el cliente es capaz de recuperar los datos desde la base de datos y dibujarlos por pantalla. Se utiliza Testcontainers de nuevo para la base de datos. Para que el test pase, es necesario que la máquina esté ejecutando cliente, el servidor, y Docker. Prueba End to End del cliente
      • Pruebas de sistema End to End para el servidor: Se utiliza RestAssured. (https://rest-assured.io/) para comprobar que el endpoint /tour/all de la API responde con los datos correctos ante una petición. Se utiliza Testcontainers de nuevo para la base de datos. Para que el test pase, se necesita que la máquina esté ejecutando el servidor y Docker. Prueba End to End del servidor
    • Controles de calidad en el cliente: En ambos tipos se utiliza Vitest. (https://vitest.dev/)
      • Test unitario: Se prueba que el componente Index es capaz de renderizar los datos que llegan a través de la petición que realiza tour-service. Para ello, se utilizan los dobles que ofrece Vitest para doblar la base de datos. Test unitario del cliente
      • Test de integración: Se prueba la integración del cliente con el servidor, comprobando si el cliente realiza la petición correctamente y si es capaz de extraer y renderizar los datos recibidos. Para que este test pase se necesita que la máquina esté ejecutando el servidor. Test de integración del cliente
  • Despliegue:

    • Empaquetado: Tanto en el frontend como en el backend, la aplicación se empaquetará mediante contenedores Docker (https://www.docker.com/). Para la orquestación de estos servicios y la base de datos, se utilizará Docker Compose.
    • Entorno de despliegue: Se utilizará la infraestructura de Microsoft Azure para el despliegue.
  • Proceso de desarrollo: Se utilizará una metodología incremental, siguiendo los principios del Manifiesto Ágil, así como algunas buenas prácticas de la Programación Extrema y Kanban.

    • Gestión de tareas: GitHub Issues y GitHub Projects con gestión visual mediante tablero.
    • Git: Se ha utilizado un repositorio Git (por medio de GitHub). Se utiliza GitHub Flow como estrategia de ramas, de modo que los commits sólo se realizarán en ramas feature/* y fix/*, debiendo mezclar a main mediante Pull Request.
    • Integración Continua: Se utilizan workflows de GitHub Actions para ejecutar los test unitarios con cada commit en ramas diferentes a main y para ejecutar todos los test cada vez que se quiera mezclar una rama con main (es decir, se abra una Pull Request).

Ejecución y edición de código

Estas son las instrucciones para ejecutar la aplicación a partir del código del repositorio.

  • Clonación del repositorio Ejecutar por terminal el comando:

    git clone https://github.com/codeurjc-students/2026-OptiTour
  • Ejecución de la base de datos El backend utiliza una base de datos MySQL. Es necesario iniciar el servicio de MySQL antes de ejecutar el servidor. La aplicación crea automáticamente la base de datos optitour si no existe, utilizando las credenciales configuradas en application.properties.

  • Ejecución del servidor Ejecutar por terminal el siguiente comando:

    mvn spring-boot:run

    El servidor se inicia en el puerto 443 y la API está disponible bajo el prefijo /api/v1.

  • Ejecución del cliente Ejecutar por terminal los siguientes comandos:

    npm install
    npm run dev
  • Acceso a la página web en local Una vez iniciado el cliente, se puede acceder a la aplicación desde:

    http://localhost:5173
    

Uso de herramientas

Visual Studio Code se utiliza como entorno principal para editar el código y ejecutar el proyecto. Las extensiones de Java permiten compilar, ejecutar y depurar el backend, así como ejecutar sus pruebas desde el propio entorno. La extensión de Vitest permite ejecutar y consultar los resultados de las pruebas del frontend.

Docker se utiliza para ejecutar los servicios auxiliares necesarios durante las pruebas de integración y las pruebas End to End, especialmente los contenedores de base de datos gestionados mediante Testcontainers.

Uso de la API REST

La API puede consultarse mediante la documentación OpenAPI y la colección de Postman incluida en el repositorio.

  • La documentación está disponible en docs/api/index.html.

  • La colección de Postman se encuentra en docs/api/TFG_OptiTour.postman_collection.json.

  • Para utilizar la colección, se debe iniciar el backend y configurar en Postman la variable baseUrl con el valor http://localhost:443/api/v1.

  • Actualmente, la API expone la siguiente operación:

    GET {{baseUrl}}/tour/all

Ejecución de las pruebas

Las pruebas del backend se ejecutan mediante Maven:

mvn test

Las pruebas del frontend se ejecutan mediante Vitest:

npm run test

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages