Files
pcrt-legal-return/README.md
tommaso 4586b2e557 Initial scaffold: Shopify recesso (withdrawal) compliance app
- Remix (TypeScript) + Polaris, official Shopify app template
- Prisma multi-tenant schema (Settings, ExclusionRule, WithdrawalRequest, AuditLog, WebhookEvent) on Postgres
- Mandatory GDPR compliance webhooks (data_request, redact, shop/redact) + HMAC handlers
- API version pinned 2026-04, scopes read_orders/read_products
- Fly deploy config; two-env strategy (custom now, public later)
- Dev setup: shopify.web.toml + Vite allowedHosts for tunnels
- Docs: PLAN.md, ANALISI-REQUISITI-LEGALI.md (Art. 54-bis compliance)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mv83a29B4eFv5ixoj6PoE1
2026-07-06 18:02:17 +02:00

91 lines
3.6 KiB
Markdown

# Pizeta Recesso — App Shopify per la funzione di recesso
App Shopify riutilizzabile che rende un negozio conforme alla **funzione elettronica
di recesso** ("pulsante di recesso") obbligatoria — **Art. 54-bis Codice del Consumo**
(D.Lgs 209/2025, recepimento Dir. UE 2023/2673), in vigore per i contratti conclusi
**dal 19 giugno 2026**.
Contesto e requisiti legali: vedi [`PLAN.md`](./PLAN.md) e
[`ANALISI-REQUISITI-LEGALI.md`](./ANALISI-REQUISITI-LEGALI.md).
## Struttura cartelle
```
pizeta-recesso-app/ ← repo git (docs + codice insieme)
├─ PLAN.md piano multi-agente + decisioni bloccate
├─ ANALISI-REQUISITI-LEGALI.md base legale verificata
├─ README.md questo file
└─ app/ app Shopify (template ufficiale Remix, TypeScript)
├─ app/routes/ route Remix (admin embedded + webhook)
├─ prisma/schema.prisma modello dati Postgres (multi-tenant per-shop)
├─ extensions/ theme app extension (storefront) — in arrivo
├─ shopify.app.toml config app (scopes, api_version pinnata, webhook)
├─ fly.toml deployment Fly (app "recesso-custom")
├─ Dockerfile build produzione
└─ .env.example template variabili d'ambiente
```
## Prerequisiti
- **Node ≥ 20.19** (vedi `app/package.json``engines`)
- **Shopify CLI** (`npm i -g @shopify/cli`)
- **Fly CLI** (`flyctl`) per il deployment
- Un **Postgres** raggiungibile (Fly Postgres o Supabase) per `DATABASE_URL`
## Setup sviluppo
```bash
cd app
npm install
# 1. Collega la registrazione app "Legal Return PCRT" (scrive client_id nel toml)
shopify app config link
# 2. Configura le env (mai committare .env)
cp .env.example .env # poi compila i valori
# 3. Provisiona il DB e applica lo schema Prisma
# (imposta prima DATABASE_URL nel .env)
npx prisma migrate dev --name init
# 4. Avvia il dev server — SOLO sullo store usa-e-getta pcrt-reso-test
shopify app dev --store pcrt-reso-test
```
### ⚠️ Landmine — mai `shopify app dev` su store da trasferire
`shopify app dev` (draft app) contro un development store **disabilita in modo
irreversibile il trasferimento** di quello store (PLAN §0-bis). Usare `shopify app dev`
/ draft **SOLO su `pcrt-reso-test`**. Mai su `pizeta-pharma-2` o su store destinati al
cliente. L'app **finita**, installata via link custom, non ha questo problema.
## Strategia due ambienti (custom vs public)
Una sola base di codice **public-grade**, distribuita **Custom** ora e **Public** in
futuro (PLAN §0-ter). Gli ambienti sono **isolati per costruzione**:
| Ambiente | Distribuzione | Fly app | DB |
|-----------------|----------------------|------------------|----------|
| Sviluppo/test | draft (`app dev`) | — | locale |
| **Custom LIVE** | Custom install link | `recesso-custom` | dedicato |
| **Public** (poi)| Public + review | `recesso-public` | dedicato |
Registrazioni Partner distinte + Fly app distinte + DB distinti → un deploy della
public **non può** impattare gli store live sulla custom. Regole anti-rottura:
migrazioni DB solo **additive/backward-compatible**, theme extension **versionate**,
**API version pinnata** (bump solo dopo test su `pcrt-reso-test`).
## Deployment (Fly)
I segreti si impostano con `fly secrets` (mai nel repo):
```bash
cd app
fly secrets set \
DATABASE_URL="postgresql://..." \
SHOPIFY_API_KEY="..." \
SHOPIFY_API_SECRET="..." \
SHOPIFY_APP_URL="https://recesso-custom.fly.dev"
fly deploy
```