Brava es una API REST para el seguimiento de medicación oncológica. Permite a las usuarias gestionar sus tratamientos (quimioterapia, terapia dirigida, hormonoterapia, inmunoterapia), registrar dosis, visualizar calendarios de medicación y activar recordatorios.
MVP desarrollado en el marco de un TFG, siguiendo una planificación de sprints con metodología ágil. El núcleo funcional (autenticación, catálogo y CRUD de medicación, calendario mensual, registro de dosis) forma parte del alcance comprometido del MVP; funcionalidades como el seguimiento de síntomas y emociones quedan documentadas como trabajo futuro.
| Tecnología | Versión |
|---|---|
| Java | 25 |
| Spring Boot | 4.1.0 |
| Spring Security | Gestionada por Spring Boot BOM |
| Spring Data JPA (Hibernate) | Gestionada por Spring Boot BOM |
| PostgreSQL Driver | Gestionada por Spring Boot BOM |
| Auth0 java-jwt | 4.5.2 |
| spring-dotenv | 5.1.0 |
| Lombok | Gestionada por Spring Boot BOM |
| JUnit Jupiter | Gestionada por Spring Boot BOM |
| Mockito | Gestionada por Spring Boot BOM |
| Maven | Wrapper incluido (./mvnw) |
- Autenticación JWT: registro, login y perfil de usuario.
- Catálogo de medicamentos: 47 fármacos oncológicos precargados en 4 categorías (quimioterapia, terapia dirigida, hormonoterapia, inmunoterapia), con soporte para medicamentos personalizados creados por la usuaria.
- Gestión de medicación: CRUD completo con cantidad, dosis (opcional), unidad, frecuencia, horario, fecha de inicio, fecha de fin y recordatorio.
- Registro de dosis: confirmación de toma con hora seleccionable (no limitada al momento exacto de la confirmación), validando que no se registren tomas futuras.
- Vista diaria: dosis programadas para hoy o cualquier fecha, con estado COMPLETED/PENDING.
- Vista mensual: resumen de dosis programadas vs. completadas por día.
- Cálculo de próxima dosis: siguiente dosis pendiente entre todos los medicamentos, calculada según la última toma real registrada.
- Limpieza automática: tarea programada (
@Scheduled) que elimina medicamentos con fecha de finalización vencida.
- Java 25 o superior
- Maven 3.9+ (o usar el wrapper
./mvnw) - PostgreSQL corriendo en
localhost:5432
git clone <repo-url>
cd brava-backendCrea una base de datos PostgreSQL (con pgAdmin o por consola):
CREATE DATABASE brava;Copia el archivo de ejemplo y edítalo con tus credenciales:
cp src/main/resources/application-local.example.properties src/main/resources/application-local.propertiesspring.datasource.username=tu_usuario
spring.datasource.password=tu_contraseña
⚠️ El secreto JWT y su tiempo de expiración también se definen enapplication-local.properties. Este archivo está en.gitignorey no se sube al repositorio.
./mvnw spring-boot:run -Dspring-boot.run.profiles=localLa aplicación arrancará en http://localhost:8080.
./mvnw testLos tests actualmente requieren una base de datos PostgreSQL en ejecución. No hay configurada una base de datos en memoria para el perfil de prueba.
| Método | Ruta | Auth | Descripción |
|---|---|---|---|
| POST | /api/auth/register |
❌ | Registrar usuario (name, email, password) |
| POST | /api/auth/login |
❌ | Iniciar sesión, devuelve JWT |
| GET | /api/auth/me |
✅ | Obtener perfil de la usuaria autenticada |
| Método | Ruta | Auth | Descripción |
|---|---|---|---|
| POST | /api/medications |
✅ | Crear medicación |
| GET | /api/medications |
✅ | Listar medicaciones de la usuaria autenticada |
| PUT | /api/medications/{id} |
✅ | Actualizar medicación |
| DELETE | /api/medications/{id} |
✅ | Eliminar medicación (con borrado en cascada del historial de dosis) |
| POST | /api/medications/{id}/doses |
✅ | Registrar dosis tomada |
| GET | /api/medications/today |
✅ | Dosis programadas para hoy |
| GET | /api/medications/date?date=YYYY-MM-DD |
✅ | Dosis programadas para una fecha específica |
| GET | /api/medications/next-dose |
✅ | Siguiente dosis pendiente |
| Método | Ruta | Auth | Descripción |
|---|---|---|---|
| GET | /api/medication-catalog |
❌ | Listar catálogo (opcional ?category=...) |
| Método | Ruta | Auth | Descripción |
|---|---|---|---|
| GET | /api/calendar?year=...&month=... |
✅ | Vista mensual con resumen de dosis |
| GET | /api/calendar/next-dose |
✅ | Siguiente dosis pendiente |
ℹ️ El endpoint de "próxima dosis" está duplicado deliberadamente entre
/api/medications/next-dosey/api/calendar/next-dose, sirviendo al mismo propósito desde dos módulos distintos del frontend.
erDiagram
USERS {
bigserial id PK
varchar email UK
varchar password
varchar name
timestamp created_at
}
MEDICATION_CATALOG {
bigserial id PK
varchar name UK
varchar category
boolean custom
}
MEDICATIONS {
bigserial id PK
bigint user_id FK
bigint medication_catalog_id FK
int quantity
double dose_amount
varchar dose_unit
time time
int frequency_interval
varchar frequency_unit
date start_date
date end_date
boolean reminder_enabled
}
MEDICATION_LOGS {
bigserial id PK
bigint medication_id FK
timestamp taken_at
timestamp registered_at
}
USERS ||--o{ MEDICATIONS : "tiene"
MEDICATION_CATALOG ||--o{ MEDICATIONS : "clasifica"
MEDICATIONS ||--o{ MEDICATION_LOGS : "registra"
src/
├── main/java/com/brava/backend/
│ ├── config/ # Configuración (CORS, seguridad, DataSeeder)
│ ├── controller/ # Controladores REST
│ ├── dto/ # Request/Response DTOs (Java records)
│ ├── exception/ # Excepciones personalizadas + manejador global
│ ├── mapper/ # Mapeadores entidad ↔ DTO (manuales)
│ ├── model/ # Entidades JPA y enums
│ ├── repository/ # Repositorios Spring Data JPA
│ ├── security/ # Seguridad JWT (filtros, configuración, servicios)
│ ├── service/ # Interfaces de servicio + implementaciones
│ └── util/ # Utilidades (cálculo de próxima dosis)
└── main/resources/ # application.properties, perfiles (local/prod)
Todos los derechos reservados.
Autora: Nayeli Córdova Mendoza