Este proyecto consiste en el desarrollo de una aplicación web para la gestión de eventos, planes y comunidades. La aplicación tiene como objetivo principal facilitar la organización, promoción y participación en eventos locales, mejorando así la interacción social y la conexión entre las personas y su entorno.
El proyecto está formado por dos aplicaciones principales: una api hecha en Java y una app hecha en Angular. Además, forma parte de una entrega de un trabajo de fin de grado superior de Desarrollo de Aplicaciones web. Haga click aquí para más información sobre el mismo.
- Backend: Spring Framework con Java 21
- Frontend: Angular 17
- Base de Datos: PostgreSQL
- Autenticación y Autorización: Spring Security y JWT
- CI/CD: Docker, Docker Compose, GitHub Actions
- Despliegue: VPS de IONOS con Nginx y Certbot para HTTPS
El proyecto se ha desarrollado siguiendo los principios SOLID y otras buenas prácticas de programación para asegurar una arquitectura robusta, mantenible y escalable. Además, se ha realizado un análisis exhaustivo del dominio y se ha generado un diagrama E-R detallado.
El backend se ha desarrollado utilizando Spring Framework, adoptando una arquitectura en capas (Controller, Service, Repository) que facilita la separación de preocupaciones y mejora la mantenibilidad.
- RESTful API: Implementación de endpoints RESTful siguiendo los estándares HTTP.
- Spring Boot: Para una configuración simplificada y un despliegue rápido.
- Spring Data JPA: Para la persistencia de datos con PostgreSQL.
- Spring Security: Para la gestión de autenticación y autorización.
- JWT (JSON Web Tokens): Para la implementación de un sistema de autenticación robusto.
- Validación: Uso de Hibernate Validator para la validación de datos de entrada.
/api/events
: Gestión de eventos (creación, actualización, eliminación, listado)./api/auth
: Autenticación y autorización (login, registro, validación de tokens).
La aplicación frontend está desarrollada en Angular, proporcionando una interfaz de usuario intuitiva y responsive.
- SPA (Single Page Application): Experiencia de usuario fluida y rápida.
- Angular CLI: Herramientas de línea de comandos para facilitar el desarrollo y el despliegue.
- Componentes Reutilizables: Diseño de componentes modulares y reutilizables.
- Servicios y RxJS: Gestión eficiente de datos y comunicación con el backend.
- Rutas Protegidas: Implementación de guardas para rutas que requieren autenticación.
Se ha implementado un entorno de CI/CD utilizando Docker y Docker Compose para asegurar despliegues consistentes y reproducibles.
- Docker: Contenedorización de aplicaciones para un entorno homogéneo.
- Docker Compose: Orquestación de contenedores para el desarrollo y pruebas locales.
- GitHub Actions: Configuración de pipelines para la integración continua. Construcción de imágenes Docker de ambas partes de la aplicación.
El despliegue de la aplicación se ha realizado en un VPS de IONOS utilizando Nginx como servidor web y Certbot para la gestión de certificados SSL.
- Preparación del VPS: Configuración inicial del servidor, incluyendo actualización de paquetes y configuración de firewall.
- Dockerización: Creación de imágenes Docker para backend, frontend y base de datos.
- Nginx: Configuración de Nginx como reverse proxy para enrutar el tráfico a los contenedores correspondientes.
- SSL: Implementación de HTTPS utilizando Certbot y Let's Encrypt.
- Exploración de Eventos: Los usuarios pueden buscar y descubrir eventos locales utilizando filtros por localización y fechas.
- Geolocalización: Implementación de un sistema de geolocalización preciso para descubrir lugares y eventos cercanos.
- Registro y Participación: Proceso sencillo para que los usuarios se registren y participen en eventos.
- Notificaciones: Sistema de notificaciones para mantener informados a los usuarios sobre eventos y actualizaciones.
Definición de objetivos, alcance y cronograma de trabajo. Identificación de stakeholders y establecimiento de requisitos iniciales.
Análisis exhaustivo de los requisitos del proyecto y necesidades de los usuarios. Elaboración del modelo de dominio y generación del diagrama E-R.
Creación de la arquitectura del sistema y elaboración de prototipos. Diseño de la base de datos y planificación de la estructura del código.
Implementación de funcionalidades siguiendo principios SOLID y buenas prácticas de programación. Desarrollo iterativo e incremental con revisiones constantes. Se ha utilizado arquitectura hexagonal tanto en el front como en el back, lo que ha permitido desarrollar de manera robusta y flexible. Esta elección arquitectónica asegura que el sistema pueda escalar y adaptarse fácilmente a futuras funcionalidades y cambios. La aplicación se ha desarrollado hasta la primera gran funcionalidad, los "eventos", con una base sólida que facilita la expansión futura.
Despliegue en VPS y promoción de la aplicación. Configuración de monitorización y análisis de métricas para evaluar el rendimiento y la aceptación por parte de los usuarios.