Bienvenido a la API backend para Pillpal, una app web diseñado para permitir el seguimiento de la toma de medicamentos. Esta API gestiona el funcionamento con base de datos para registar medicamentos, programar recordatorios y llevar un control de la toma diaria según las indicaciones locations and connect with an existing React and Next frontend.
- Características
- Tecnologías
- Herramientas
- Arquitectura
- Preparación + Ejecución
- Docker
- Endpoints
- Testing
- Relaciones
- Autores
- Registro de medicamentos con persistencia de datos.
- Listado de medicamentos activos y opción de marcarlos como "tomado".
- Visualización del estado de los medicamentos según la hora del día.
- Creación y gestión de cuentas de usuario.
- Separación de frontend y backend con consumo de API REST.
- Interfaz moderna y responsiva.
- Configuración CORS: Configurado para integración con la aplicación frontend
- Lombok
- Mockito
- Data initialization (via data.sql)
- Jakarta Validation
- Docker
Se ha construído el backend con arquitectura de 3 capas dividas en paquetes por features, así manteniendo separación de a 3-layer architecture, lo que promueve la separación de responsabilidades y facilidad de mantenimiento:
- Controllers (Capa de presentación): Gestionan las solicitudes HTTP entrantes, las dirigen a los servicios apropiados y devuelven respuestas HTTP. Utilizan DTOs (Objetos de Transferencia de Datos) para el intercambio de información.
- Services (Capa de Lógica de Negocio): Contienen la lógica de negocio central, orquestando las operaciones y aplicando las reglas de validación.
- Repositories (Capa de Acceso a Datos): Interactúan directamente con la base de datos, realizando operaciones CRUD a través de Spring Data JPA.
git clone https://github.com/PillPal-FullStack/PillPal-Back.gitCreate a .env file in the project root with your database credentials:
DB_URL=jdbc:mysql://localhost:3306/pillpal
DB_USER=your_mysql_user
DB_PASSWORD=your_mysql_passwordNota: El backend usa java-dotenv para cargar estos variables.
mvn clean installmvn spring-boot:run# Descargar la imagen más reciente
docker pull tizzifona/pillpal:latest
# Ejecutar el contenedor
docker run -p 8080:8080 \
-e DB_URL=jdbc:mysql://host.docker.internal:3306/pillpal \
-e DB_USER=your_mysql_user \
-e DB_PASSWORD=your_mysql_password \
tizzifona/pillpal:latest# Construir la imagen
docker build -t pillpal-backend .
# Ejecutar el contenedor
docker run -p 8080:8080 \
-e DB_URL=jdbc:mysql://host.docker.internal:3306/pillpal \
-e DB_USER=your_mysql_user \
-e DB_PASSWORD=your_mysql_password \
pillpal-backend- Asegúrate de que MySQL esté ejecutándose en tu máquina local
- Usa
host.docker.internalpara conectar desde el contenedor a MySQL en tu máquina local - La aplicación estará disponible en
http://localhost:8080 - Swagger UI estará disponible en
http://localhost:8080/swagger-ui.html
- GET
/api/medications→ Muestra una lista de todos los medicamentos
{
"id": 1,
"name": "paracetamol",
"imgUrl": "https://res.cloudinary.com/dwc2jpfbw/image/upload/v1752583230/paracetamol-8-img.jpg",
"dosage": "500g cada mañana",
"active": true,
"startDate": "2025-09-18",
"endDate": "2025-09-25",
"lifetime": false,
"userId": 1
}- PUT `/api/medications/{id} → Editar un medicamento
{
"name": paracetamol,
"description": "analgésico",
"imageUrl": "https://res.cloudinary.com/dwc2jpfbw/image/upload/v1752583230/paracetamol-8-img.jpg",
"dosage": "1000g cada mañana",
"active": true,
"username": "May"startDate": "2025-09-18",
"endDate": "2025-09-30",
"lifetime": false
}Este proyecto incluye tests unitarios y tests de integración.
- Tests Unitarios: Se centran en componentes individuales (ejemplo, métodos de servicio)
- Tests de Integración: Usan MockMvc para simular peticiones HTTP y comprobar comportamiento de controller.
La base de datos de PillPal está diseñada con las siguientes entidades principales:
id(PK) - Identificador únicousername- Nombre de usuario (único)email- Correo electrónico (único)password- Contraseña encriptadarole- Rol del usuario (ADMIN/USER)
id(PK) - Identificador úniconame- Nombre del medicamentodescription- Descripción del medicamentoimg_url- URL de la imagen del medicamentodosage- Dosificaciónactive- Estado activo/inactivostart_date- Fecha de inicio del tratamientoend_date- Fecha de fin del tratamientolifetime- Indica si es medicamento de por vidauser_id(FK) - Referencia al usuario propietario
id(PK) - Identificador únicodate_time- Fecha y hora de la tomastatus- Estado de la toma (TAKEN/SKIPPED/PENDING)medication_id(FK) - Referencia al medicamento
id(PK) - Identificador únicotime- Hora del recordatoriofrequency- Frecuencia (DAILY/WEEKLY)enabled- Estado habilitado/deshabilitadomedication_id(FK) - Referencia al medicamento
- Un Usuario puede tener múltiples Medicamentos
- Un Medicamento puede tener múltiples Registros de Toma
- Un Medicamento puede tener múltiples Recordatorios
- Status:
TAKEN,SKIPPED,PENDING - Frequency:
DAILY,WEEKLY
