Skip to content

About

REST API for Brava, built with Spring Boot, Spring Security and Spring Data JPA. Handles user authentication, medication CRUD, and calendar scheduling with a PostgreSQL database.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

36 Commits

Folders and files

Repository files navigation

Brava Backend

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.


Estado del proyecto

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.


Stack Tecnológico

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)

Características

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

Requisitos

  • Java 25 o superior
  • Maven 3.9+ (o usar el wrapper ./mvnw)
  • PostgreSQL corriendo en localhost:5432

Configuración

1. Clonar el repositorio

git clone <repo-url>
cd brava-backend

2. Configurar base de datos

Crea una base de datos PostgreSQL (con pgAdmin o por consola):

CREATE DATABASE brava;

3. Configurar variables de entorno

Copia el archivo de ejemplo y edítalo con tus credenciales:

cp src/main/resources/application-local.example.properties src/main/resources/application-local.properties
spring.datasource.username=tu_usuario
spring.datasource.password=tu_contraseña

⚠️ El secreto JWT y su tiempo de expiración también se definen en application-local.properties. Este archivo está en .gitignore y no se sube al repositorio.

4. Ejecutar la aplicación

./mvnw spring-boot:run -Dspring-boot.run.profiles=local

La aplicación arrancará en http://localhost:8080.


Ejecutar tests

./mvnw test

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


API Endpoints

Autenticación (/api/auth)

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

Medicación (/api/medications)

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

Catálogo de medicamentos (/api/medication-catalog)

Método Ruta Auth Descripción
GET /api/medication-catalog ❌ Listar catálogo (opcional ?category=...)

Calendario (/api/calendar)

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-dose y /api/calendar/next-dose, sirviendo al mismo propósito desde dos módulos distintos del frontend.


Modelo de datos

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"
Loading

Estructura del proyecto

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)

Licencia

Todos los derechos reservados.

Autora: Nayeli Córdova Mendoza

About

REST API for Brava, built with Spring Boot, Spring Security and Spring Data JPA. Handles user authentication, medication CRUD, and calendar scheduling with a PostgreSQL database.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages