Skip to content
131 changes: 107 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,120 @@

# Donaton

> [!IMPORTANT]
> Plataforma de gestión de donaciones basada en microservicios.
> Plataforma de gestión de donaciones basada en una arquitectura de microservicios.

<p align="center">
<img src="https://i.imgur.com/qfgKokU.png" alt="Donaton Web">
</p>

<p align="center">
<img src="https://img.shields.io/badge/Java-21-orange" alt="Java">
<img src="https://img.shields.io/badge/Spring_Boot-3.x-green" alt="Spring Boot">
<img src="https://img.shields.io/badge/React-19-61DAFB" alt="React">
<img src="https://img.shields.io/badge/TypeScript-5.x-3178C6" alt="TypeScript">
<img src="https://img.shields.io/badge/Docker-Compose-2496ED" alt="Docker Compose">
<img src="https://img.shields.io/badge/JWT-Authentication-red" alt="JWT">
</p>

---

## Descripción

Donatón es una plataforma diseñada para facilitar la gestión y distribución de donaciones, conectando usuarios, organizaciones y centros de acopio mediante una arquitectura basada en microservicios.

La solución está compuesta por:

![Web](https://i.imgur.com/qfgKokU.png)
* Un frontend desarrollado con React y TypeScript.
* Un Backend For Frontend (BFF).
* Un API Gateway para centralizar el acceso a los servicios.
* Microservicios independientes encargados de autenticación, donaciones, necesidades y logística.

---

## Tecnologías
- Java Spring Boot
- React + TypeScript
- Docker Compose
- JWT
- OpenFeign

* Java 21
* Spring Boot
* Spring Cloud Gateway
* OpenFeign
* JWT
* React
* TypeScript
* Docker Compose
* Maven

---

## Arquitectura
- Gateway
- BFF
- Auth Service
- Donation Service
- Needs Service
- Logistics Service

## Ejecutar proyecto
| Componente | Descripción |
| ------------------------------------------ | ----------------------------------------------- |
| [Microservicios](microservicios/README.md) | Servicios principales del sistema. |
| [BFF](bff/README.md) | Backend orientado al frontend. |
| [Frontend](frontend/README.md) | Aplicación web para usuarios y administradores. |

---

## Flujo General

```

Frontend
BFF
API Gateway
┌──────────────┼──────────────┼──────────────┐
│ │ │ │
▼ ▼ ▼ ▼
Auth Donation Logistics Needs
```

## Puesta en Marcha

### Levantar todos los servicios

```bash
docker compose up --build
```

## Servicios que encontraras
- Servicios
- Frontend
- Gateway
- BFF
- Auth
- Donation
- Needs
- Logistics
### Detener los servicios

```bash
docker compose down
```

---

## Estructura del Proyecto

```text
.
├── frontend/
├── bff/
├── microservicios/
│ ├── auth/
│ ├── donation/
│ ├── gateway/
│ ├── logistics/
│ └── needs/
└── docker-compose.yml
```

---

## Documentación

Cada componente dispone de su propia documentación, incluyendo:

* Descripción del servicio.
* Endpoints disponibles.
* Roles y permisos.
* Ejemplos de solicitudes y respuestas.
* Configuración y ejecución.

> [!TIP]
> Consulta los README de cada componente para obtener información detallada sobre su funcionamiento.
Binary file added bff.zip
Binary file not shown.
95 changes: 95 additions & 0 deletions bff/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
# Backend For Frontend (BFF)

> [!NOTE]
> Este servicio actúa como capa de integración entre el frontend y los microservicios de Donatón.

> [!IMPORTANT]
> Todas las solicitudes del frontend deben realizarse a través del BFF.

> [!TIP]
> El BFF centraliza autenticación, validaciones, manejo de errores y comunicación con los distintos microservicios.

> [!WARNING]
> No se recomienda que el frontend consuma directamente los microservicios internos.

---

## Responsabilidades

El BFF proporciona una interfaz única para el frontend y se encarga de:

* Autenticar usuarios.
* Gestionar tokens de acceso y refresco.
* Centralizar las llamadas a los microservicios.
* Unificar formatos de respuesta.
* Manejar errores y excepciones.
* Aplicar validaciones previas a las solicitudes.

---

## Servicios Integrados

| Servicio | Descripción |
| --------- | -------------------------------------------------- |
| Auth | Autenticación, autorización y gestión de usuarios. |
| Donation | Gestión de donaciones. |
| Needs | Gestión de necesidades. |
| Logistics | Gestión logística y seguimiento de envíos. |

---

## Endpoints Disponibles

### Autenticación

```text
POST /api/v1/auth/login
POST /api/v1/auth/register
POST /api/v1/auth/refresh

GET /api/v1/auth/users
POST /api/v1/auth/users
PUT /api/v1/auth/users/{id}/role
DELETE /api/v1/auth/users/{id}
```

### Donaciones

```text
GET /api/v1/donations
GET /api/v1/donations/{id}
POST /api/v1/donations
PUT /api/v1/donations/{id}
DELETE /api/v1/donations/{id}
```

### Necesidades

```text
GET /api/v1/needs
GET /api/v1/needs/{id}
POST /api/v1/needs
PUT /api/v1/needs/{id}
PUT /api/v1/needs/{id}/receive
DELETE /api/v1/needs/{id}
```

### Logística

```text
GET /api/v1/logistics
POST /api/v1/logistics
PUT /api/v1/logistics/{id}/estado
```

---

## Seguridad

Los endpoints protegidos requieren el encabezado:

```http
Authorization: Bearer <access_token>
```

El token es validado antes de reenviar la solicitud al microservicio correspondiente.
11 changes: 3 additions & 8 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,7 @@ services:
build:
context: ./microservicios/auth
container_name: auth-service
ports:
- "8081:8080"

environment:
<<: *spring-env
JWT_SECRET: mi_clave_secreta_muy_larga_para_hs256_segura_12345
Expand All @@ -83,8 +82,7 @@ services:
build:
context: ./microservicios/donation
container_name: donation-service
ports:
- "8082:8080"

environment:
<<: *spring-env
depends_on:
Expand All @@ -100,8 +98,7 @@ services:
build:
context: ./microservicios/logistics
container_name: logistics-service
ports:
- "8083:8080"

environment:
<<: *spring-env
depends_on:
Expand Down Expand Up @@ -155,8 +152,6 @@ services:
build:
context: ./bff
container_name: bff-service
ports:
- "8085:8080"
environment:
SPRING_PROFILES_ACTIVE: docker
SPRING_APPLICATION_NAME: bff
Expand Down
99 changes: 99 additions & 0 deletions frontend/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# Frontend

> [!NOTE]
> Aplicación web de Donatón desarrollada con React, TypeScript y Vite.

---

## Tecnologías

- React
- TypeScript
- Vite
- Tailwind CSS
- Axios
- React Router DOM
- Chart.js
- React Chartjs 2
- Leaflet
- React Leaflet

---

## Estructura del Proyecto

```text
src/
├── assets/
├── components/
├── context/
├── hooks/
├── layouts/
├── pages/
├── services/
├── types/
├── utils/
├── App.tsx
└── main.tsx
```

---

## Funcionalidades

- Inicio de sesión y registro de usuarios.
- Gestión de necesidades.
- Registro y visualización de donaciones.
- Seguimiento de envíos.
- Panel administrativo.
- Visualización de estadísticas mediante gráficos.
- Gestión de usuarios y roles.

---

## Instalación

### Instalar dependencias

```bash
npm install
```

### Ejecutar en modo desarrollo

```bash
npm run dev
```

### Generar versión de producción

```bash
npm run build
```

### Vista previa de producción

```bash
npm run preview
```

---

## Variables de Entorno

```env
VITE_API_BASE_URL=/api/v1
```

---

## Dependencias Principales

| Librería | Propósito |
|-----------|------------|
| React Router DOM | Navegación entre páginas |
| Axios | Comunicación con el BFF |
| Tailwind CSS | Estilos |
| Chart.js | Gráficos y estadísticas |
| Leaflet | Mapas y geolocalización |
| SweetAlert2 | Ventanas y alertas |
Loading
Loading