# SenKredi Backoffice

Backoffice interne sécurisé pour gérer :
- les demandes d'abonnement
- les boutiques
- les détails d'entitlement
- les actions support/admin

## Stack
- Next.js App Router
- Supabase Auth
- `@supabase/ssr`
- Route Handlers côté serveur
- Supabase `service_role` côté serveur uniquement

## Pré-requis
- Node.js 20+
- un projet Supabase existant
- les correctifs RLS déjà appliqués sur la base SenKredi

## 1) Appliquer les migrations SQL incluses
Dans Supabase SQL Editor, exécute le contenu de :

- `supabase/migrations/20260327_admin_backoffice.sql`

Cette migration ajoute :
- `public.admin_users`
- `public.admin_action_logs`
- `public.is_admin_user()`
- `public.admin_approve_subscription_request(...)`
- `public.admin_reject_subscription_request(...)`

## 2) Créer au moins un utilisateur support/admin
Crée d'abord l'utilisateur dans **Authentication > Users** sur Supabase.

Récupère ensuite son UUID et exécute par exemple :

```sql
insert into public.admin_users (user_id, role)
values ('UUID_DE_L_UTILISATEUR', 'super_admin')
on conflict (user_id) do update
set role = excluded.role,
    is_active = true;
```

## 3) Configurer les variables d'environnement
Copie `.env.example` vers `.env.local`.

Renseigne :
- `NEXT_PUBLIC_SUPABASE_URL`
- `NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY` **ou** `NEXT_PUBLIC_SUPABASE_ANON_KEY`
- `SUPABASE_SERVICE_ROLE_KEY` (ou `SUPABASE_SECRET_KEY` si tu utilises la nouvelle clé secrète)
- `NEXT_PUBLIC_APP_URL`

## 4) Installer et lancer
```bash
npm install
npm run dev
```

## Écrans inclus
- `/login`
- `/dashboard`
- `/dashboard/subscription-requests`
- `/dashboard/shops`
- `/dashboard/shops/[shopId]`

## Principes de sécurité
- aucune clé `service_role` n'est exposée au frontend
- toutes les décisions admin passent par des Route Handlers serveur
- chaque appel admin vérifie que l'utilisateur connecté est présent dans `public.admin_users`
- toutes les actions sensibles sont journalisées dans `public.admin_action_logs`

## Contrat backend attendu
Ce backoffice suppose que ton projet Supabase contient déjà :
- `public.v_admin_shops`
- `public.v_admin_subscription_requests`
- `public.v_shop_entitlements_effective`
- `public.shop_billing_settings`
- `public.shop_entitlements`
- `public.subscription_requests`
- `public.memberships`
- `public.profiles`

## Notes
- les actions d'approbation/rejet utilisent les nouvelles fonctions `admin_approve_subscription_request` et `admin_reject_subscription_request`
- ces fonctions permettent d'enregistrer explicitement l'UUID de l'admin qui décide
