docs: add project README with architecture, setup and API reference
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
7eb17a8da2
commit
1193c2d888
|
|
@ -0,0 +1,211 @@
|
||||||
|
# TFG — Integración Dolibarr · PrestaShop
|
||||||
|
|
||||||
|
Sistema de sincronización bidireccional entre el ERP **Dolibarr** y la tienda **PrestaShop**, desarrollado como Trabajo de Fin de Grado del ciclo DAM.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Arquitectura
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────┐
|
||||||
|
│ APPS CLIENTE │
|
||||||
|
│ JavaFX (escritorio) · Android (móvil) │
|
||||||
|
└──────────────────┬──────────────────────────┘
|
||||||
|
│ REST + Basic Auth
|
||||||
|
┌──────────────────▼──────────────────────────┐
|
||||||
|
│ SYNC-SERVICE │
|
||||||
|
│ Spring Boot 3 · Java 21 · Railway │
|
||||||
|
│ API REST propia · @Scheduled sync jobs │
|
||||||
|
│ H2 (dev) · MySQL (prod) │
|
||||||
|
└────────────┬──────────────────┬─────────────┘
|
||||||
|
│ │
|
||||||
|
┌────────▼──────┐ ┌────────▼──────────┐
|
||||||
|
│ DOLIBARR │ │ PRESTASHOP │
|
||||||
|
│ ERP · REST │ │ E-commerce · WS │
|
||||||
|
└───────────────┘ └───────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**Flujos de sincronización:**
|
||||||
|
- `PRODUCT_PUSH` — Productos Dolibarr → PrestaShop (incremental por fecha)
|
||||||
|
- `STOCK_PUSH` — Stock Dolibarr → PrestaShop
|
||||||
|
- `ORDER_PULL` — Pedidos PrestaShop → Dolibarr (como comandas y facturas)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Módulos
|
||||||
|
|
||||||
|
| Directorio | Descripción |
|
||||||
|
|---|---|
|
||||||
|
| `sync-service/` | Backend Spring Boot. API REST + jobs de sincronización |
|
||||||
|
| `javafx-client/` | Cliente escritorio JavaFX 21 |
|
||||||
|
| `android-app/` | Cliente Android (Kotlin) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Requisitos previos
|
||||||
|
|
||||||
|
- **JDK 21** — [Adoptium Temurin 21](https://adoptium.net/)
|
||||||
|
- **Maven 3.8+** — [maven.apache.org](https://maven.apache.org/download.cgi)
|
||||||
|
- **Android Studio** (solo para la app Android)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## sync-service — Arrancar en local (perfil dev)
|
||||||
|
|
||||||
|
### 1. Crear `application-dev.yml`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp sync-service/src/main/resources/application-dev.yml.example \
|
||||||
|
sync-service/src/main/resources/application-dev.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
Edita el fichero y rellena las claves reales:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
integration:
|
||||||
|
dolibarr:
|
||||||
|
api-key: TU_DOLIBARR_API_KEY
|
||||||
|
prestashop:
|
||||||
|
api-key: TU_PRESTASHOP_API_KEY
|
||||||
|
```
|
||||||
|
|
||||||
|
> `application-dev.yml` está en `.gitignore` — nunca se sube al repositorio.
|
||||||
|
|
||||||
|
### 2. Arrancar
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd sync-service
|
||||||
|
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev
|
||||||
|
```
|
||||||
|
|
||||||
|
El servidor arranca en `http://localhost:8080`.
|
||||||
|
Consola H2 disponible en `http://localhost:8080/h2-console`.
|
||||||
|
|
||||||
|
### 3. Autenticación
|
||||||
|
|
||||||
|
Todas las peticiones requieren **Basic Auth**:
|
||||||
|
- Usuario: `admin`
|
||||||
|
- Contraseña: `admin123` (configurable en `api.security.password`)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## sync-service — API REST
|
||||||
|
|
||||||
|
### Sincronización manual
|
||||||
|
|
||||||
|
| Método | Endpoint | Descripción |
|
||||||
|
|---|---|---|
|
||||||
|
| `POST` | `/api/sync/products` | Empuja productos Dolibarr → PrestaShop |
|
||||||
|
| `POST` | `/api/sync/stock` | Empuja stock Dolibarr → PrestaShop |
|
||||||
|
| `POST` | `/api/sync/orders` | Importa pedidos PrestaShop → Dolibarr |
|
||||||
|
| `GET` | `/api/sync/diagnostics/dolibarr` | Verifica conectividad con Dolibarr |
|
||||||
|
|
||||||
|
### Mappings
|
||||||
|
|
||||||
|
| Método | Endpoint | Descripción |
|
||||||
|
|---|---|---|
|
||||||
|
| `GET` | `/api/mappings/products` | Lista mapeos de productos |
|
||||||
|
| `GET` | `/api/mappings/products?status=SYNCED` | Filtra por estado (`SYNCED`/`PENDING`/`ERROR`) |
|
||||||
|
| `GET` | `/api/mappings/orders` | Lista mapeos de pedidos |
|
||||||
|
|
||||||
|
### Logs
|
||||||
|
|
||||||
|
| Método | Endpoint | Descripción |
|
||||||
|
|---|---|---|
|
||||||
|
| `GET` | `/api/logs` | Lista todos los logs de sincronización |
|
||||||
|
| `GET` | `/api/logs?type=PRODUCT_PUSH` | Filtra por tipo |
|
||||||
|
| `GET` | `/api/logs/{id}` | Detalle de un log concreto |
|
||||||
|
|
||||||
|
### Health
|
||||||
|
|
||||||
|
| Método | Endpoint |
|
||||||
|
|---|---|
|
||||||
|
| `GET` | `/actuator/health` |
|
||||||
|
|
||||||
|
### Swagger UI
|
||||||
|
|
||||||
|
```
|
||||||
|
http://localhost:8080/swagger-ui.html
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## sync-service — Despliegue en Railway
|
||||||
|
|
||||||
|
URL pública: `https://proyectointermodular-production-a9c3.up.railway.app`
|
||||||
|
|
||||||
|
Swagger UI: `https://proyectointermodular-production-a9c3.up.railway.app/swagger-ui.html`
|
||||||
|
|
||||||
|
**Variables de entorno requeridas en el servicio Railway:**
|
||||||
|
|
||||||
|
```
|
||||||
|
SPRING_PROFILES_ACTIVE=prod
|
||||||
|
SPRING_DATASOURCE_URL=jdbc:mysql://mysql.railway.internal:3306/railway?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8&allowPublicKeyRetrieval=true
|
||||||
|
SPRING_DATASOURCE_USERNAME=root
|
||||||
|
SPRING_DATASOURCE_PASSWORD=<MYSQLPASSWORD del plugin MySQL>
|
||||||
|
SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.MySQLDialect
|
||||||
|
SPRING_JPA_HIBERNATE_DDL_AUTO=validate
|
||||||
|
SYNC_SCHEDULING_ENABLED=true
|
||||||
|
DOLIBARR_API_KEY=<clave API Dolibarr>
|
||||||
|
PRESTASHOP_API_KEY=<clave WS PrestaShop>
|
||||||
|
API_SECURITY_PASSWORD={noop}admin123
|
||||||
|
```
|
||||||
|
|
||||||
|
Flyway ejecuta `V1__init.sql` en el primer arranque y crea las tablas automáticamente.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## javafx-client — Arrancar
|
||||||
|
|
||||||
|
### Requisitos
|
||||||
|
|
||||||
|
- JDK 21
|
||||||
|
- Maven 3.8+ (JavaFX se descarga automáticamente de Maven Central)
|
||||||
|
|
||||||
|
### Ejecutar
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd javafx-client
|
||||||
|
mvn javafx:run
|
||||||
|
```
|
||||||
|
|
||||||
|
La primera ejecución descarga dependencias (~1-2 min). Las siguientes arrancan directamente.
|
||||||
|
|
||||||
|
### Configuración
|
||||||
|
|
||||||
|
La URL del servidor, usuario y contraseña se guardan automáticamente al hacer login y se pueden cambiar desde la pestaña **Ajustes** de la aplicación. Por defecto apunta al servidor Railway.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## android-app — Arrancar
|
||||||
|
|
||||||
|
Abrir el directorio `android-app/` con Android Studio y ejecutar en emulador o dispositivo físico.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Stack tecnológico
|
||||||
|
|
||||||
|
| Componente | Tecnología |
|
||||||
|
|---|---|
|
||||||
|
| Backend | Java 21 · Spring Boot 3 · Maven |
|
||||||
|
| Persistencia | Spring Data JPA · H2 (dev) · MySQL (prod) |
|
||||||
|
| Migraciones | Flyway |
|
||||||
|
| Cliente HTTP | `RestClient` (Spring 6) |
|
||||||
|
| Serialización | Jackson |
|
||||||
|
| Seguridad | Spring Security · Basic Auth · `DelegatingPasswordEncoder` |
|
||||||
|
| Scheduling | `@Scheduled` · `ThreadPoolTaskScheduler(poolSize=1)` |
|
||||||
|
| Docs API | SpringDoc OpenAPI (Swagger UI) |
|
||||||
|
| Cliente escritorio | JavaFX 21 |
|
||||||
|
| Cliente móvil | Kotlin · Android |
|
||||||
|
| Despliegue | Railway · GitHub Actions (push automático) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Sistemas externos
|
||||||
|
|
||||||
|
| Sistema | URL base |
|
||||||
|
|---|---|
|
||||||
|
| Dolibarr API | `https://prestashop.loading.net/dolibarr/api/index.php` |
|
||||||
|
| PrestaShop WS | `https://prestashop.loading.net/tienda/api` |
|
||||||
|
|
||||||
|
> **Nota PrestaShop 8.2.5:** el endpoint raíz `/api/` devuelve 500. Usar siempre recursos específicos (`/api/products`, `/api/orders`, etc.). La clave WS se pasa como query param `ws_key` — el hosting elimina el header `Authorization`.
|
||||||
Loading…
Reference in New Issue