Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

63 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ Code Crafters Backend

🎯 Objetivos

✨ 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.


🧠 Competencias Técnicas

  • 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.

πŸ’» TecnologΓ­as

  • 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

πŸ› οΈ Herramientas

  • IntelliJ IDEA / Visual Studio Code
  • Trello (gestiΓ³n Γ‘gil del proyecto)
  • Git / GitHub
  • Postman
  • DBeaver o pgAdmin (gestiΓ³n de base de datos)

🧩 Funcionalidades principales

La API ofrece un conjunto completo de operaciones para la gestiΓ³n de eventos tecnolΓ³gicos y usuarios registrados:

πŸ‘€ Usuarios

  • 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.

🎟️ Eventos

  • 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).

🧾 Asistencias

  • 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.

⭐ Bonus

  • GeneraciΓ³n de tickets al inscribirse a un evento.
  • VisualizaciΓ³n de tickets de los eventos a los que el usuario estΓ‘ apuntado.

βš™οΈ Relaciones de la base de datos

  • 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.

🧾 Validaciones

  • 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.

πŸš€ CΓ³mo iniciar el proyecto

βœ… Requisitos previos

  • Java 21 instalado
  • PostgreSQL instalado y en ejecuciΓ³n
  • Maven configurado

⚑ Pasos para iniciar

1. Clonar el repositorio

git clone https://github.com/CodeCrafters/CodeCrafters-Backend.git
cd CodeCrafters-Backend

2. Configurar la base de datos

CREATE DATABASE codehappen;

3. Configurar el archivo .env o application.properties

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=3600000

4. Ejecutar el proyecto

Linux/Mac:

./mvnw spring-boot:run

Windows:

mvnw.cmd spring-boot:run

5. Verificar la instalaciΓ³n

La API estarΓ‘ disponible en: πŸ‘‰ http://localhost:8080


πŸ§ͺ Testing

Se realizan pruebas unitarias con JUnit 5 y Mockito.

Para ejecutar los tests:

./mvnw test

πŸ“‚ Estructura del Proyecto

CODECRAFTERS-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

🧭 Metodología

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

πŸ› οΈ TecnologΓ­as utilizadas

  • 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

πŸ‘₯ Equipo

Nombre GitHub LinkedIn
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

πŸ“„ Licencia

Este proyecto estΓ‘ bajo la Licencia MIT.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages