✨ Code Crafters, una empresa líder en el sector tecnológico, desea implementar una plataforma web que facilite la organización de eventos tanto online como presenciales dentro de la comunidad tecnológica.
Con el rápido avance de la tecnología, la colaboración y el intercambio de conocimientos son más importantes que nunca.
Code Crafters busca crear una plataforma única y poderosa que satisfaga las necesidades específicas de la comunidad tecnológica, promoviendo la colaboración, el aprendizaje continuo y la innovación dentro del sector.
Esta aplicación aspira a convertirse en el punto de encuentro virtual para profesionales, entusiastas y expertos en tecnología de todo el mundo.
- Backend Development: Implementación de la lógica del servidor y los endpoints RESTful.
- Database Creation: Creación y estructuración de la base de datos PostgreSQL.
- Data Access Components: Desarrollo de componentes que permiten la comunicación entre la API y la base de datos.
- Tests: Validación del comportamiento del sistema utilizando JUnit y Mockito.
- Security: Implementación de autenticación y autorización mediante Spring Security y JWT.
- Lenguaje: Java 21
- Framework Backend: Spring Boot 3.3.5
- Seguridad: Spring Security + JWT
- Base de Datos: PostgreSQL
- Gestor de dependencias: Maven
- Testing: JUnit 5, Mockito
- Control de versiones: Git / GitHub
- Pruebas de API: Postman
- IntelliJ IDEA / Visual Studio Code
- Trello (gestión ágil del proyecto)
- Git / GitHub
- Postman
- DBeaver o pgAdmin (gestión de base de datos)
La API ofrece un conjunto completo de operaciones para la gestión de eventos tecnológicos y usuarios registrados:
- Registro de nuevos usuarios.
- Inicio y cierre de sesión.
- Actualización de perfil (nombre, correo, contraseña, imagen).
- Listado de todos los usuarios registrados.
- Crear nuevos eventos (presenciales u online).
- Listar todos los eventos.
- Buscar eventos por ID, nombre, usuario o categoría.
- Actualizar y eliminar eventos propios.
- Paginación (máximo 15 eventos por página).
- Apuntarse a eventos.
- Desapuntarse de eventos.
- Listar los asistentes de cada evento.
- Restricción: un usuario no puede apuntarse más de una vez al mismo evento.
- Generación de tickets al inscribirse a un evento.
- Visualización de tickets de los eventos a los que el usuario está apuntado.
- Usuario → Eventos (1:N): Un usuario puede crear varios eventos.
- Evento → Usuario (N:1): Cada evento pertenece a un único usuario.
- Usuario → Asistencia (1:N): Un usuario puede asistir a varios eventos.
- Evento → Asistencia (1:N): Un evento puede tener varios asistentes.
- El nombre del evento no puede estar vacío ni superar los 255 caracteres.
- La descripción debe tener entre 50 y 2000 caracteres.
- No se puede crear un evento con una fecha anterior a la actual.
- Un usuario no puede registrarse dos veces al mismo evento.
- Eliminación en cascada: si se elimina un usuario, también se eliminan sus eventos y asistencias.
- Java 21 instalado
- PostgreSQL instalado y en ejecución
- Maven configurado
git clone https://github.com/CodeCrafters/CodeCrafters-Backend.git
cd CodeCrafters-BackendCREATE DATABASE codehappen;spring.datasource.url=jdbc:postgresql://localhost:5432/codehappen
spring.datasource.username=postgres
spring.datasource.password=tu_contraseña
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
jwt.secret=tu_clave_secreta
jwt.expiration=3600000Linux/Mac:
./mvnw spring-boot:runWindows:
mvnw.cmd spring-boot:runLa API estará disponible en: 👉 http://localhost:8080
Se realizan pruebas unitarias con JUnit 5 y Mockito.
Para ejecutar los tests:
./mvnw testCODECRAFTERS-BACKEND/
├── .mvn/
│ └── wrapper/
│ └── maven-wrapper.properties
│
├── src/
│ ├── main/
│ │ ├── java/com/code_crafters/app/
│ │ │ ├── controller/
│ │ │ │ ├── AuthController.java
│ │ │ │ ├── UserController.java
│ │ │ │ ├── EventController.java
│ │ │ │ ├── AttendanceController.java
│ │ │ │ ├── CategoryController.java
│ │ │ │ └── LocationController.java
│ │ │ │
│ │ │ ├── dto/
│ │ │ │ ├── request/
│ │ │ │ │ ├── LoginRequest.java
│ │ │ │ │ ├── RegisterRequest.java
│ │ │ │ │ ├── UpdateUserRequest.java
│ │ │ │ │ ├── AttendanceRequest.java
│ │ │ │ │ ├── CategoryRequest.java
│ │ │ │ │ └── LocationRequest.java
│ │ │ │ └── response/
│ │ │ │ ├── JwtResponse.java
│ │ │ │ ├── UserResponse.java
│ │ │ │ ├── EventResponse.java
│ │ │ │ ├── AttendanceResponse.java
│ │ │ │ ├── CategoryResponse.java
│ │ │ │ └── LocationResponse.java
│ │ │ │
│ │ │ ├── entity/
│ │ │ │ ├── User.java
│ │ │ │ ├── Event.java
│ │ │ │ ├── Attendance.java
│ │ │ │ ├── Category.java
│ │ │ │ └── Location.java
│ │ │ │
│ │ │ ├── exception/
│ │ │ │ ├── GlobalExceptionHandler.java
│ │ │ │ ├── ResourceNotFoundException.java
│ │ │ │ ├── BadRequestException.java
│ │ │ │ └── UnauthorizedException.java
│ │ │ │
│ │ │ ├── mapper/
│ │ │ │ ├── UserMapper.java
│ │ │ │ ├── EventsMapper.java
│ │ │ │ ├── AttendanceMapper.java
│ │ │ │ ├── CategoryMapper.java
│ │ │ │ └── LocationMapper.java
│ │ │ │
│ │ │ ├── repository/
│ │ │ │ ├── UserRepository.java
│ │ │ │ ├── EventRepository.java
│ │ │ │ ├── AttendanceRepository.java
│ │ │ │ ├── CategoryRepository.java
│ │ │ │ └── LocationRepository.java
│ │ │ │
│ │ │ ├── security/
│ │ │ │ ├── filter/
│ │ │ │ │ ├── JWTAuthentication.java
│ │ │ │ │ └── JWTAuthorization.java
│ │ │ │ ├── CustomAuthenticationManager.java
│ │ │ │ ├── SecurityConstants.java
│ │ │ │ ├── SpringConfig.java
│ │ │ │ └── UserDetail.java
│ │ │ │
│ │ │ ├── seeder/
│ │ │ │ └── DatabaseSeeder.java
│ │ │ │
│ │ │ ├── service/
│ │ │ │ ├── interfaces/
│ │ │ │ │ ├── UserService.java
│ │ │ │ │ ├── EventService.java
│ │ │ │ │ ├── AttendanceService.java
│ │ │ │ │ ├── CategoryService.java
│ │ │ │ │ └── LocationService.java
│ │ │ │ └── impl/
│ │ │ │ ├── UserServiceImpl.java
│ │ │ │ ├── EventServiceImpl.java
│ │ │ │ ├── AttendanceServiceImpl.java
│ │ │ │ ├── CategoryServiceImpl.java
│ │ │ │ └── LocationServiceImpl.java
│ │ │ │
│ │ │ ├── util/
│ │ │ │ └── DateUtils.java
│ │ │ │
│ │ │ └── CodeCraftersApplication.java
│ │ │
│ │ └── resources/
│ │ └── application.properties
│ │
│ └── test/
│ └── java/com/code_crafters/app/
│ └── CodeCraftersApplicationTests.java
│
├── target/
├── .env
├── .gitignore
├── mvnw
├── mvnw.cmd
├── pom.xml
└── README.md
El proyecto se desarrolló bajo metodología ágil (Scrum) en un sprint de dos semanas, fomentando:
- ✅ Colaboración del equipo
- ✅ Mejora continua
- ✅ Entrega incremental de valor
- Spring Boot - Framework principal
- Spring Security - Autenticación y autorización
- JWT - Tokens de seguridad
- PostgreSQL - Base de datos
- JUnit 5 & Mockito - Testing
- Maven - Gestión de dependencias
| Nombre | GitHub | |
|---|---|---|
| Ana Aguilera | @AnaAguileraMorales88 | Ana Aguilera Morales |
| Andrea Olivera | @andreaonweb | Andrea Olivera Romero |
| Gabi Gallegos | @hgall3 | Gabriela Gallegos Anda |
| Mio Ogura | @miaryl | Mio Ogura |
| Montse Muñoz | @Montc027 | Montse Muñoz |
| Sofia Toro | @sofiatoroviafara01 | Sofía Toro Viafara |
Este proyecto está bajo la Licencia MIT.