- Proyecto 📝
- Diagramas
- Instalación 🛠️
- Estructura del proyecto
- Tecnologías
- Uso
- Contribución 🤝
- Coders👩💻
- Demo
Desarrollo de una aplicación de viajes en la que cada usuario puede ver, añadir, editar y eliminar destinos a los que quiere ir, además de ver los destinos de otros usuarios.
La aplicación permite a los usuarios hacer login, y es a través de esta autenticación que tienen acceso a editar y eliminar sus destinos creados.
En el proyecto se ha creado tanto la parte del Front on React js con Tailwind para el CSS partiendo de prototipos dados por el cliente, como toda la parte del Back con Java SpringBoot y PostgreSQL.
Funcionalidades
- Poder ver todos los destinos
- Formulario de registro
- Formulario de acceso con e-mail y contraseña
- Al acceder, el usuario autenticado ve los botones de editar y eliminar en sus destinos
- Los usuarios regostrados pueden ver el detalle de cada destino
- Todas als acciones del usuario con CRUD o registro/acceso tienen alertas
- Todos los formularios tienen validación y control de errores
- Cambio de iconos en navbar cuando el usuario accese a la app
- Buscador funcional para buscar por nombre de destino o ubicación
- Poder crear destinos
- Poder editar destinos
Para entender la funcionalidad de la aplicación y la lógica a seguir se ha realizado un diagrama de flujo.
Se ha normalizado a segunda forma las tablas de la base de datos, resultando en dos tablas: una de destinos y una de usuarios.
- Node.js
- VSC con extensión Java Pack VSC, IntelliJ or tu IDE de preferencia
- Base de datos
- Clona los repositorios:
Front:
git clone https://github.com/LauraGDev/happy-travel-front
Back:
git clone https://github.com/flaviferri/HappyTravel-BackEnd
-
Haz npm install en el repo del front
-
Crea tu base de datos y conectála al repo del back:
pon el link de acceso, tu usuario y contraseña de pgAdmin o de tu BBDD en el archivo application.resources
Como proyecto Full-Stack, la estructura se divide en Front y en Back.
El back del proyecto se ha realziado con Java SpringBoot, con una arquitectura MVC de 3 capas.
La estructura final del back es la siguiente:
/
├── happy-travel-back
│ ├── src/
│ │ ├── main
│ │ │ ├── java
│ │ │ │ ├── config
│ │ │ │ │ ├── ApplicationConfig
│ │ │ │ │ └── SecurityConfig
│ │ │ │ ├── controllers
│ │ │ │ │ ├── AuthController
│ │ │ │ │ ├── AuthResponse
│ │ │ │ │ ├── DestinationController
│ │ │ │ │ ├── LoginRequest
│ │ │ │ │ ├── RegisterRequest
│ │ │ │ │ └── UserController
│ │ │ │ ├── jwt
│ │ │ │ │ └── JwtAuthenticationFilter
│ │ │ │ ├── models
│ │ │ │ │ ├── Destination
│ │ │ │ │ └── User
│ │ │ │ ├── repositories
│ │ │ │ │ ├── DestinationRepository
│ │ │ │ │ └── UserRepository
│ │ │ │ ├── role
│ │ │ │ │ └── Role
│ │ │ │ ├── services
│ │ │ │ │ ├── AuthService
│ │ │ │ │ ├── DestinationService
│ │ │ │ │ └── JwtService
│ │ │ │ └── HappyTravelApplication
│ │ │ └── resources
│ │ │ └── application.properties
│ │ └── test
│ │ └── HappyTravelApplicationTests
│ ├── target
│ └── .mvn
├── .gitignore
├── mvnw
├── mvnw.cmd
├── pom.xml
└── README.md
Front
Back
El programa debe iniciarse primero en el back.
Para compilar:
Da al play para compilar automáticamente.
Una vez iniciado el back, en el front:
npm run dev
Abre el enlace que aparece con tu puerto local.
- Haz un fork al repositorio.
- Crea una nueva rama:
git checkout -b feature/name
. - Haz tus cambios.
- Haz push de tu rama:
git push origin feature/name
. - Crea un pull request.
Las coders que hemos trabajado en este proyecto somos:
Versión móvil:
happytravel-mobile.1.mp4
Versión desktop:
![home-ht](https://private-user-images.githubusercontent.com/168748574/363066664-1fe9969e-18b9-4097-82cb-b4d6a06aacf6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4NzEyMDcsIm5iZiI6MTczODg3MDkwNywicGF0aCI6Ii8xNjg3NDg1NzQvMzYzMDY2NjY0LTFmZTk5NjllLTE4YjktNDA5Ny04MmNiLWI0ZDZhMDZhYWNmNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxOTQxNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xNzZkMzQzZjhkMTNhYzM3M2VjMmE0ZjBiMmNhMDczMzY3ZDExODc1ODRjNTc5MzZmOGZmZDc5OTI5Mjc0NTcwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.iGbbS3WeUsMyMtGToR0s75dpjLQq8jJxna59kCA5sj0)
![register-ht](https://private-user-images.githubusercontent.com/168748574/363066728-2738c1bb-be3f-49fb-b101-c3d5192875d4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4NzEyMDcsIm5iZiI6MTczODg3MDkwNywicGF0aCI6Ii8xNjg3NDg1NzQvMzYzMDY2NzI4LTI3MzhjMWJiLWJlM2YtNDlmYi1iMTAxLWMzZDUxOTI4NzVkNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxOTQxNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03MmU5ZmY4MDAxNjMzNDgwNzBmNjczOTU5ZmQ3ZGQzZTg4NGNkNjcxNGE3ZTZhNjczNTcyNzNkZDJkNGUwOTA0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.R9crfbHJfVM6CEH_1HQO9ihPVPVyUcR7nq71rtEIonM)
![logiin](https://private-user-images.githubusercontent.com/168748574/363066733-8e815aeb-ca77-4de0-8a05-6b02403e9270.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4NzEyMDcsIm5iZiI6MTczODg3MDkwNywicGF0aCI6Ii8xNjg3NDg1NzQvMzYzMDY2NzMzLThlODE1YWViLWNhNzctNGRlMC04YTA1LTZiMDI0MDNlOTI3MC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxOTQxNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hYjM0MzUxZWUxN2E1NDg1YmUzYzY0ZjdkYTU4ZGRlOTFlNzAxNDEyZTRiNWZjZGY4NjhiMmVlZjFmZTIwMTY5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.AE-yVsbRV5skmjm_0eP6Ekeja7v0F4hLocKklk9VZ7M)
![logged-home](https://private-user-images.githubusercontent.com/168748574/363066738-f17fba8c-f7f5-49ab-b022-f5fd9656a36a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4NzEyMDcsIm5iZiI6MTczODg3MDkwNywicGF0aCI6Ii8xNjg3NDg1NzQvMzYzMDY2NzM4LWYxN2ZiYThjLWY3ZjUtNDlhYi1iMDIyLWY1ZmQ5NjU2YTM2YS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxOTQxNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zNmQ2ZDk4MjkxOTZlZjAxOGExZjg0NGUxYTkyODU5YzA4ZDVmMzAyMWUwM2QxMDg2N2ZlZGUyYzk4NmQzZTNkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.bJBX0YDeAWf3VIAJRNDI-iAYUWE2im4WOhbOKRUI8yw)
![Captura de pantalla 2024-08-29 a les 18 07 44](https://private-user-images.githubusercontent.com/168748574/363066853-e2b40a3e-34b0-4147-bc9b-6396e37c1818.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4NzEyMDcsIm5iZiI6MTczODg3MDkwNywicGF0aCI6Ii8xNjg3NDg1NzQvMzYzMDY2ODUzLWUyYjQwYTNlLTM0YjAtNDE0Ny1iYzliLTYzOTZlMzdjMTgxOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxOTQxNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01ZWMwNTZlOGI4ZjNlY2Q1ODIwZGFmYTQxYzdmNWYxNjkxNzdkZGM3NGU4OTEzNDYwOWE0OTIxYWEzOTM4MWExJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.5OmYV3yk7-2XnuyGQWA18yBvoj-GpWTsGlkWVvbCFV8)
![Captura de pantalla 2024-08-29 a les 18 08 03](https://private-user-images.githubusercontent.com/168748574/363066863-5f2088b7-f7ec-4786-b097-a9185c426a4e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4NzEyMDcsIm5iZiI6MTczODg3MDkwNywicGF0aCI6Ii8xNjg3NDg1NzQvMzYzMDY2ODYzLTVmMjA4OGI3LWY3ZWMtNDc4Ni1iMDk3LWE5MTg1YzQyNmE0ZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxOTQxNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04NGY1MjFlYWNkN2IxMjJhZTQ4NjU1YmQ4NjY5NzhlMmQ3ODVkZmUzYTFjMTk2MjhmZDVkNWQ1MzEzM2UwYzkxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9._XNoqVXQOgAXNMA1cBZ2dG5QKuXRcqHtEIRLPXE158M)
![Captura de pantalla 2024-08-29 a les 18 08 31](https://private-user-images.githubusercontent.com/168748574/363066864-66a74ce4-940c-4d43-b486-d9dfc4ed4ed0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4NzEyMDcsIm5iZiI6MTczODg3MDkwNywicGF0aCI6Ii8xNjg3NDg1NzQvMzYzMDY2ODY0LTY2YTc0Y2U0LTk0MGMtNGQ0My1iNDg2LWQ5ZGZjNGVkNGVkMC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxOTQxNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wOGE0OTNjYTViODljYWM1M2JiN2E4YzY0MDc2YjhkMzNhMDRkNTExOTRkNDJhNjFlZGY5MGJjNDZlODNkMTlkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.r8ZpKxKFL4pBlCSBMlCEu6B1TOcekwV9EPDvZ-w7nvg)
![Captura de pantalla 2024-08-29 a les 18 08 48](https://private-user-images.githubusercontent.com/168748574/363066865-1e26ebf3-e81e-4a43-b701-29e80fd71f91.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4NzEyMDcsIm5iZiI6MTczODg3MDkwNywicGF0aCI6Ii8xNjg3NDg1NzQvMzYzMDY2ODY1LTFlMjZlYmYzLWU4MWUtNGE0My1iNzAxLTI5ZTgwZmQ3MWY5MS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxOTQxNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kNDdjNDVmYTY5NDE2MzA0NTQ2OWVjNzZhOWRkMDNlOWY0OGYzMjhiYjNjNDI4MjhiMjMxMGZiNmExZGFhODk4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ytpV_eeu5pAJqmqkJYs1P_Te1qyoh41nRg3j8w9Y1iM)
![Captura de pantalla 2024-08-29 a les 18 09 28](https://private-user-images.githubusercontent.com/168748574/363066872-23e53536-e2ed-48fd-ab8e-f8cb9eb8df93.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4NzEyMDcsIm5iZiI6MTczODg3MDkwNywicGF0aCI6Ii8xNjg3NDg1NzQvMzYzMDY2ODcyLTIzZTUzNTM2LWUyZWQtNDhmZC1hYjhlLWY4Y2I5ZWI4ZGY5My5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxOTQxNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mZjdlNTQ3YjkzYjQyMGY4OGM2YzM2MTVjZjZhN2NjNTkwYmJhYmFiNDA2Yzk5OGIwNTI5ZGUwODVmNmJhM2ZiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.o8TJeDl4IhdU7fd2NJmIV9zCygtKGG7-YaAy_bWCwnE)
![Captura de pantalla 2024-08-29 a les 18 09 46](https://private-user-images.githubusercontent.com/168748574/363066928-4b304808-f881-4c32-aa2b-98d6bd66303c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4NzEyMDcsIm5iZiI6MTczODg3MDkwNywicGF0aCI6Ii8xNjg3NDg1NzQvMzYzMDY2OTI4LTRiMzA0ODA4LWY4ODEtNGMzMi1hYTJiLTk4ZDZiZDY2MzAzYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwNlQxOTQxNDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yY2RmZDcyMGQwOGFlZjRjMzdkYjQwYTI5MDE0MWM4MWVhZDk4MDk5MzE2YmNjNWMwNjZhZmIwM2JjYjRiMzVhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.o2vYgXPKZbxX5de0cTdw8mBv78yMshnOP9tpMGDo9vg)