# Medii

Producția, staging-ul și proba rulează același cod, dar setările de mediu și câteva gărzi le fac să se comporte diferit.

## Pe scurt

| Mediu | Adresa | Valoarea `MEDIU` | Rută de probă |
| --- | --- | --- | --- |
| Producție | `app.ilustromania.com` | `productie` (implicită) | nu există, oricum ar fi configurat serverul |
| Staging | `staging.ilustromania.com` | `staging` | există doar dacă e setat `OM_PROBA` |
| Probă | serverul de probă (fără adresă publică fixă în cod) | `proba` | există doar dacă e setat `OM_PROBA` |

Codul este același. Diferențele vin din variabilele de mediu citite la pornire, în `config.ts`, și din două gărzi legate de numele gazdei de producție, `GAZDA_PRODUCTIE`.

## Mediul declarat: `MEDIU`

`MEDIU` acceptă doar `productie`, `staging` și `proba`. Orice altă valoare oprește pornirea. Dacă variabila lipsește, serverul se socotește **producție**: un server uitat neconfigurat primește regulile cele mai stricte, nu cele mai permisive.

## Proba: `OM_PROBA` și `/v1/sesiune/proba`

`POST /v1/sesiune/proba` deschide o sesiune pentru „omul de probă” din `OM_PROBA` (cont, firmă, rol), fără parolă. Sesiunea durează cât una obișnuită, 8 ore. E făcută pentru capturi și teste automate, nu pentru oameni.

Ruta are trei centuri, puse una peste alta:

| Centura | Unde | Ce se întâmplă |
| --- | --- | --- |
| 1. Fără `OM_PROBA` | la montarea rutelor | ruta nu este înregistrată deloc |
| 2. `OM_PROBA` cu `MEDIU=productie` sau cu `GAZDA_PUBLICA=app.ilustromania.com` | la pornire | API-ul refuză să pornească, cu un mesaj clar |
| 3. Cerere venită pe gazda de producție | la fiecare cerere | răspunde `404 negasit`, ca și cum ruta n-ar exista |

```bash title="Sesiune de probă pe staging"
curl -i -X POST https://staging.ilustromania.com/nucleu/v1/sesiune/proba
# 204 + Set-Cookie: __Host-sesiune=…
```

> [!WARNING]
> Omul de probă poate avea rolul `admin`. Ruta este publică în harta accesului tocmai pentru că sesiunea o creează ea. De aceea, siguranța stă în cele trei centuri, nu într-o parolă.

## Ce diferă între medii

| Setare | Producție | Staging și probă |
| --- | --- | --- |
| `OM_PROBA` | interzis (pornirea eșuează) | permis |
| `CASCADA_PRODUS`, dacă lipsește | `off`: dezactivarea unui produs nu le oprește pe cele care îl conțin | `on` |
| Panoul de publicare | publică doar pe `app.ilustromania.com` | nu are rând propriu |
| Linkurile din emailurile cu cod | spre `app.ilustromania.com` | spre `staging.ilustromania.com`, dacă de acolo s-a cerut codul |

Orice altă gazdă decât cele două primește, în email, adresa de producție.

## Comutatoarele de mediu

Următoarele comutatoare au aceeași valoare implicită pe toate mediile. Valoarea lor efectivă pe fiecare server nu e în codul platformei: o pune configurarea serverului.

| Variabilă | Implicit | Ce face |
| --- | --- | --- |
| `SCRIERE_STARI` | `off` | `off` = rutele de scriere ale meniului răspund `409`; `on` = scriu |
| `OFICIAL_ACTIV` | `off` | `off` = orice acțiune pe Oficial, în panoul de publicare, dă `409 neactivat` |
| `PUNTE_ACCEPTA_V1` | `0` | acceptă sau nu forma veche a punții de sesiune |
| `PUBLICARE_DIR` și cele două stări | absente | fără ele, rutele `/v1/publicare/*` nu există; trebuie date toate trei, altfel pornirea eșuează |

## Steagurile de funcții

Steagurile (`GET /v1/flaguri`) nu țin de mediu. Ele stau în baza de date a fiecărui mediu, deci staging-ul și producția își au fiecare setul lor. Regula:

- rândul cel mai specific câștigă: cont, apoi firmă, apoi global;
- `procent` între 1 și 99 pornește funcția treptat, după o „găleată” 0–99 calculată din id-ul contului, aceeași pe orice mașină;
- un steag necunoscut înseamnă `false`.

Vezi și [Roluri și drepturi](#roluri-si-drepturi) pentru ce vede fiecare om, indiferent de mediu.
