# Baseapp — base Laravel 11 (API) + React (SPA)

Template de départ pour créer rapidement plusieurs applications partageant la même
architecture : une **API REST Laravel 11** (authentification par token Sanctum) et un
**front React (Vite + TypeScript + TailwindCSS)** servi séparément.

## Stack

| Côté      | Techno                                                                 |
|-----------|------------------------------------------------------------------------|
| Backend   | Laravel 11, PHP 8.2, Sanctum (tokens), Pest, Telescope (dev), MySQL    |
| Frontend  | React 19, Vite, TypeScript, TailwindCSS v4, axios, react-router-dom    |

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

## Prérequis

- PHP **8.2+** (CLI) — sous WAMP, voir la note plus bas
- Composer 2
- Node **20+** et npm
- MySQL (fourni par WAMP)

## Installation

### 1. Backend

```bash
cd backend
composer install
copy .env.example .env          # (cp sous Linux/Mac)
php artisan key:generate
```

Créer la base puis migrer/seed :

```bash
# Crée la base 'baseapp' (utf8mb4)
mysql -u root -e "CREATE DATABASE IF NOT EXISTS baseapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

php artisan migrate --seed
php artisan serve               # http://localhost:8000
```

> Ajuste `DB_DATABASE`, `DB_USERNAME`, `DB_PASSWORD` dans `backend/.env` si besoin.

### 2. Frontend

```bash
cd frontend
npm install
copy .env.example .env          # contient VITE_API_URL=http://localhost:8000
npm run dev                     # http://localhost:5173
```

## Compte de démonstration

Créé par le seeder :

- **Email** : `admin@baseapp.test`
- **Mot de passe** : `password`

## Endpoints API

| Méthode | URL            | Auth      | Description                          |
|---------|----------------|-----------|--------------------------------------|
| GET     | `/api/health`  | public    | Vérifie que l'API tourne             |
| POST    | `/api/login`   | public    | `{ email, password }` → `{ token, user }` |
| GET     | `/api/user`    | Bearer    | Utilisateur authentifié              |
| POST    | `/api/logout`  | Bearer    | Révoque le token courant             |

Le front stocke le token dans `localStorage` et l'envoie via l'en-tête
`Authorization: Bearer <token>` (voir `frontend/src/lib/api.ts`).

## Tests

```bash
cd backend
php artisan test            # ou: ./vendor/bin/pest
```

Les tests utilisent une base **SQLite en mémoire** (configurée dans `phpunit.xml`) :
ils ne touchent jamais la base MySQL de développement.

## Telescope (debug, local uniquement)

Accessible sur http://localhost:8000/telescope en environnement `local`.
Le paquet est en dépendance `--dev` et n'est chargé qu'en local (voir
`app/Providers/AppServiceProvider.php`), il ne s'exécutera pas en production.

## Démarrer un nouveau projet à partir de cette base

1. Copier le dossier `baseapp` sous un nouveau nom (ou `git clone` puis nouveau remote).
2. Backend : renommer `APP_NAME`, créer une nouvelle base et adapter `DB_DATABASE`,
   relancer `php artisan key:generate` puis `php artisan migrate --seed`.
3. Frontend : adapter `VITE_API_URL` si l'API change d'URL/port.
4. Développer : ajouter les modèles/migrations/contrôleurs côté `backend`, les pages
   et routes côté `frontend`.

## Note WAMP — PHP 8.2 en ligne de commande

WAMP permet plusieurs versions de PHP, mais le `php` du terminal dépend du `PATH`
Windows (souvent figé sur une ancienne version). Pour utiliser 8.2 en CLI :

- soit ajouter `D:\wamp64\bin\php\php8.2.x` **avant** l'ancienne entrée dans le `PATH`
  système (puis rouvrir le terminal) ;
- soit préfixer ponctuellement : `$env:Path = 'D:\wamp64\bin\php\php8.2.0;' + $env:Path`.
