ldc-arcadia-api/documentation/Arcadia/README.md

161 lines
5.2 KiB
Markdown

# Métamodèle Arcadia & Intégration Oracle
Ce document résume les principes d'intégration avec les bases de données Oracle du SI Arcadia (`REFP`, `METAP`, `GCP`).
---
## 1. Documentation Vivante des Tables & Vues (Living Documentation)
La structure complète des 56 tables et vues, leurs types de données réels, clés primaires et commentaires SQL sont maintenus directement dans le code source sous :
👉 **[`database/arcadia-replicate/`](../../database/arcadia-replicate/)**
- **Tables REFP & METAP :** [`database/arcadia-replicate/Tables/`](../../database/arcadia-replicate/Tables/)
- **Vues REFP & GCP :** [`database/arcadia-replicate/Views/`](../../database/arcadia-replicate/Views/)
- **Orchestrateur & Migrations :** [`database/arcadia-replicate/Migrator.php`](../../database/arcadia-replicate/Migrator.php)
> [!TIP]
> En cas d'évolution du métamodèle Arcadia, modifiez uniquement la classe PHP concernée dans `database/arcadia-replicate/`. Aucun fichier Markdown de structure n'a besoin d'être maintenu manuellement.
---
## 2. Requêtes SQL de Référence (Adapters Oracle)
### A. Fiche Produit INCO & Nutrition (`REFP.INCO` + `REFP.INCO_COMPO`)
Liaison principale : `REFP.INCO.REF_COMPO = REFP.INCO_COMPO.ID_INCO`
```sql
SELECT
i.NO_ART AS id,
i.DENOM_LEG AS name,
i.DESCRIPTIF AS description,
i.ASTUCES AS tips,
i.CONSEIL_PREPA AS preparation_advices,
i.ARG_VENTE AS sell_arguments,
i.ALLEGATIONS AS allegations,
i.ALLEGAT_SANTE AS allegations_health,
i.ALLEGAT_NUTRIT AS allegations_nutrition,
i.LST_ING AS ingredients,
i.NB_PORTION AS portions,
i.LST_ALLERGENE AS allergens,
i.NUTRISCORE_ON_PACK AS nutriscore,
i.PDS_NET_UVC AS pdsNetUvc,
i.PDS_BRUT_UVC AS pdsBrutUvc,
i.CONDIT_CONSERV AS conditConserv,
i.LST_ADDITIF AS lstAdditif,
i.PROD_SAISON AS is_seasonal,
i.REF_COMPO AS compo,
i.DAT_CRE AS created_at,
i.DAT_MAJ AS updated_at,
c.ID AS compo_id,
c.VAL_ENERG_KJ_R AS compo_valEnergKjReference,
c.VAL_ENERG_KCAL_R AS compo_valEnergKcalReference,
c.MAT_GRASS_R AS compo_matGrassReference,
c.AGS_R AS compo_acideGrasSatureReference,
c.GLUCIDES_R AS compo_glucidesReference,
c.SUCRE_R AS compo_sucreReference,
c.FIB_ALIM_R AS compo_fibAlimReference,
c.PROTEINE_R AS compo_proteineReference,
c.SEL_R AS compo_selReference,
c.SCORE_NUTRI_2022 AS compo_scoreNutri2022,
c.NUTRI_SCORE_2022 AS compo_nutriScore2022
FROM REFP.INCO i
LEFT JOIN REFP.INCO_COMPO c
ON i.REF_COMPO = c.ID_INCO;
```
### B. Référentiel Salariés SIRH (`REFP.RU_PERSONNE_SIRH`)
```sql
SELECT
e.MATRICULE_FIC AS matricule,
e.NOM_FIC AS lastname,
e.PRENOM_FIC AS firstname,
e.DATE_DEB_FIC AS start_date,
e.DATE_FIN_FIC AS end_date,
e.ETAB_FIC AS establishment,
e.SITE_FIC AS site,
e.SERVICE_FIC AS service,
e.DAT_CRE AS created_at,
e.DAT_MAJ AS updated_at
FROM REFP.RU_PERSONNE_SIRH e;
```
### C. Utilisateurs Référents (`METAP.META_UTIL`)
```sql
SELECT
i.NO_ART AS id,
i.UTIL_CMCL AS util_cmcl_code,
u_cmcl.LIB_UTIL AS util_cmcl_libelle,
u_cmcl.EMAIL AS util_cmcl_email,
i.UTIL_MKT AS util_mkt_code,
u_mkt.LIB_UTIL AS util_mkt_libelle,
u_mkt.EMAIL AS util_mkt_email,
i.UTIL_QUAL AS util_qual_code,
u_qual.LIB_UTIL AS util_qual_libelle,
u_qual.EMAIL AS util_qual_email
FROM REFP.INCO i
LEFT JOIN METAP.META_UTIL u_cmcl ON i.UTIL_CMCL = u_cmcl.COD_UTIL
LEFT JOIN METAP.META_UTIL u_mkt ON i.UTIL_MKT = u_mkt.COD_UTIL
LEFT JOIN METAP.META_UTIL u_qual ON i.UTIL_QUAL = u_qual.COD_UTIL;
```
### D. Référentiel des Marques (`REFP.MARQUE`)
#### Requête SQL Oracle de référence
```sql
SELECT
m.COD_MARQ AS id,
m.LIB_MARQ AS name,
m.COD_RGPT_MARQ AS rgpt_code,
m.COMMENTAIRE AS "comment",
m.TYPE_MARQUE AS type,
m.SOCIETE AS societe,
m.MARQUE_PROPRE AS is_own_brand,
m.GLN_SOC AS gln
FROM REFP.MARQUE m
ORDER BY m.COD_MARQ ASC;
```
#### Requête HTTP API
```http
GET /api/v1/brands
Authorization: Bearer <API_TOKEN>
Accept: application/json
```
**Exemple avec cURL :**
```bash
curl -X GET "https://api.arcadia.ldc.fr/api/v1/brands" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
```
**Exemple de réponse JSON (200 OK) :**
```json
{
"data": [
{
"id": "1",
"name": "LE GAULOIS"
},
{
"id": "2",
"name": "MAITRE COQ"
},
{
"id": "3",
"name": "LOUÉ"
}
],
"links": {
"self": "http://localhost/api/v1/brands"
}
}
```
#### Commande CLI Artisan
```bash
php artisan arcadia:brand:list
```