# Sobook — réservation de chambres d'hôtel

Application dérivée du template **baseapp** (Laravel 13 API + React SPA) :

- **Site public** (`/`) : présentation de l'établissement, liste des chambres, recherche par dates,
  page chambre avec réservation en ligne (prestations en option, prix en direct), page de
  confirmation, consultation d'une réservation par référence + e-mail. Multilingue (FR/DE par
  défaut, EN/IT prêts, extensible).
- **Espace de gestion** (`/admin`) : tableau de bord (arrivées/départs du jour, planning de la
  semaine, dernières réservations, statistiques), réservations (création avec création du client à
  la volée, devis en direct, statuts, paiement, e-mails, facture imprimable), planning, clients,
  chambres (photos, équipements, textes traduits), prestations, tarifs spéciaux et fermetures,
  utilisateurs, réglages (coordonnées, logo, couleurs, règles de réservation, langues, SMTP,
  modèles d'e-mails, facture).

```
app-sobook/
├── backend/    # API Laravel (http://localhost:8000)
└── frontend/   # SPA React (http://localhost:5173)
```

## Démarrer en local

Prérequis : WAMP (MySQL démarré, PHP 8.4), Composer, Node 20+.

```bash
dev.bat
```

- Site public : http://localhost:5173/
- Espace de gestion : http://localhost:5173/admin — `admin@baseapp.test` / `password`
  (compte réception : `user@baseapp.test` / `password`).
- Base MySQL : `app_sobook` (données de démonstration créées par `migrate --seed` en local).

### Installation depuis zéro

```bash
cd backend
composer install
copy .env.example .env
artisan.bat key:generate
mysql -u root -e "CREATE DATABASE IF NOT EXISTS app_sobook CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
artisan.bat migrate --seed
artisan.bat storage:link

cd ../frontend
npm install
copy .env.example .env
```

## Réglages importants (admin → Réglages)

| Onglet | Contenu |
|---|---|
| Établissement | nom, adresse, téléphone, e-mail, site, logo, couleurs, image d'accueil, présentation |
| Réservation | devise, heures d'arrivée/départ, séjour minimum, délai max, réservation en ligne on/off, confirmation automatique, e-mail de notification |
| Langues | langues du site public et langue par défaut |
| Envoi d'e-mails (SMTP) | hôte, port, chiffrement, identifiants (mot de passe chiffré), expéditeur, bouton de test |
| Modèles d'e-mails | confirmation, demande reçue, annulation, notification gestionnaire — par langue, avec variables |
| Facture | n° TVA, taux de TVA affiché, IBAN, pied de facture |

Sans SMTP configuré, les e-mails partent par le mailer du `.env` (en local : `log`, visible dans
`backend/storage/logs/laravel.log`). Chaque envoi (réussi ou non) est journalisé sur la réservation.

## API principale

| Méthode | URL | Auth | Description |
|---|---|---|---|
| GET | `/api/settings` | public | réglages publics (identité, coordonnées, règles) |
| GET | `/api/public/rooms?check_in&check_out&adults&children&lang` | public | chambres (disponibles si dates) |
| GET | `/api/public/rooms/{slug}` | public | fiche chambre |
| GET | `/api/public/rooms/{id}/unavailable-dates` | public | nuits bloquées |
| POST | `/api/public/quote` | public | prix + disponibilité |
| POST | `/api/public/bookings` | public | réservation en ligne |
| GET | `/api/dashboard`, `/api/calendar?from&to` | Bearer | tableau de bord, planning |
| CRUD | `/api/bookings`, `/api/guests` | Bearer | réservations (+ `/quote`, `/{id}/status`, `/{id}/payment`, `/{id}/resend-email`), clients |
| CRUD | `/api/rooms`, `/api/services`, `/api/closures`, `/api/rate-rules` | Bearer admin | configuration de l'offre |
| GET/PUT | `/api/settings/all`, `/api/settings`, `POST /api/settings/test-email` | Bearer admin | réglages |

## Reprise des données d'un site WordPress (VikBooking)

```bash
mysql -u root -e "CREATE DATABASE tmp_export CHARACTER SET utf8mb4"
mysql -u root tmp_export < export-wordpress.sql
cd backend
artisan.bat sobook:import-vikbooking tmp_export --fresh --mark-past-paid --images-base=http://localhost:8000/storage/uploads/rooms
```

`--fresh` remplace les données métier existantes (chambres, clients, réservations, fermetures).
Les photos des chambres sont à déposer dans `backend/storage/app/public/uploads/rooms/`.
Les réservations importées portent la référence `VB-<n° VikBooking>`.

## Tests et qualité

```bash
cd backend
artisan.bat test          # Pest (SQLite en mémoire)
vendor\bin\pint           # format PHP (avec PHP 8.4 dans le PATH)

cd ../frontend
npm run lint
npm run build
```

## Déploiement

Voir `DEPLOY.md`. En production : `migrate --force`, `storage:link`, configurer le SMTP dans les réglages.
