# Phase 8: Data Seeder — DONE

**Completed:** 2026-03-13

## What was delivered

### RestaurantSeeder (1 file)

**File:** `database/seeders/RestaurantSeeder.php`

A comprehensive seeder that generates a realistic restaurant dataset for sandbox testing. Includes:

#### 2 Restaurants

| Restaurant | Place | Cuisine | Max Covers | Service Periods | Auto-confirm |
|---|---|---|---|---|---|
| Le Jardin Méditerranéen | Paris (1st place) | Mediterranean / French | 80 | Lunch, Dinner | Yes |
| Sakura Lounge | Strasbourg (2nd place) | Asian Fusion | 50 | Brunch, Dinner | No |

#### 35 Tables (20 + 15)

- **Le Jardin Méditerranéen:** 20 tables across 6 zones (indoor, terrace, bar, private, vip, outdoor)
- **Sakura Lounge:** 15 tables across 5 zones (indoor, bar, terrace, private, vip)

#### Menu Categories (hierarchical)

- **Le Jardin Méditerranéen:** 10 parent + 14 child categories (food: Entrées/Salades/Soupes/Tapas, Plats/Viandes/Poissons/Pâtes/Végétarien, Desserts, Fromages; drink: Vins/Rouges/Blancs/Rosés, Cocktails, Boissons chaudes/Cafés/Thés/Infusions, Boissons fraîches/Jus/Sodas/Eaux, Bières)
- **Sakura Lounge:** 9 parent + 13 child categories (food: Starters/Sushi/Sashimi/Gyoza/Edamame, Mains/Ramen/Wok/Curry/Grillades, Desserts, Sides; drink: Sake & Spirits, Cocktails/Signature/Classiques, Thés/Matcha/Sencha/Oolong, Boissons fraîches, Bières)

#### ~85 Menu Items (44 + 41)

Each item includes:
- 3-tier pricing (standard + member, EUR)
- EU 14 allergens (as enum values)
- Dietary labels (vegetarian, vegan, gluten_free, etc.)
- Calories and preparation time
- Faker-generated descriptions

#### Daily Menus (7 days x multiple menus per restaurant)

- **Le Jardin Méditerranéen:**
  - "Menu Déjeuner" (lunch, daily) — 3 sections: Entrée, Plat, Dessert
  - "Carte du Soir" (dinner, daily) — full à la carte
  - "Formule Midi" (lunch, weekdays) — discounted prices (20% off)
- **Sakura Lounge:**
  - "Brunch Menu" (brunch, weekends) — 4 sections
  - "Omakase du Chef" (dinner, daily) — curated 5-section tasting menu
  - "À la Carte" (dinner, daily) — full menu

#### 60 Reservations (30 per restaurant)

Status distribution:
- ~40% CONFIRMED (future dates)
- ~20% PENDING (future dates)
- ~17% COMPLETED (past dates)
- ~10% SEATED (today)
- ~10% NO_SHOW (past dates)
- ~3% CANCELLED (mixed dates)

Features: varying party sizes (1-8), table assignments for confirmed/seated/completed, special requests on ~30%

#### 40 Paid Orders (20 per restaurant)

Each order includes:
- 2-5 OrderItems pointing to RestaurantMenuItems
- Payment providers: 40% Stripe, 30% Cash, 20% POS, 10% Wallet
- Tips on ~60% of orders (2.00-15.00 EUR)
- Restaurant table assignments
- Created over past 7 days for dashboard data

#### 2 Restaurant Manager Employees

| Employee | Email | Place |
|---|---|---|
| Jean-Pierre Martin | jp.martin@championspirit.com | Paris |
| Yuki Tanaka | yuki.tanaka@championspirit.com | Strasbourg |

Each with: active user account, restaurant_manager role, Sanctum API token, place attachment

### Modified Files

- `database/seeders/DatabaseSeeder.php` — Added `RestaurantSeeder::class` to the seeder chain

### Photos

Photo seeding was **not implemented** as the spec noted it as optional ("Alternative: If downloading photos is impractical..."). The seeder focuses on data completeness. Photos can be added later via `addMedia()` calls if seed photo assets are provided.

### Idempotency Note

The seeder does NOT check for existing data before creating — it is designed to run on a fresh database after standard seeders. Running it twice will create duplicate data. This matches the pattern of existing seeders (ClassicSeeder, PlaceSeeder).

## Quality Checks

- `vendor/bin/pint` — PASS (1 auto-fixed style issue on first run, clean on re-run)
- `vendor/bin/phpstan --level=7` — PASS (0 errors after fixing 12 initial type issues)

## Files Summary

| Type | Count |
|---|---|
| Seeder | 1 (RestaurantSeeder.php) |
| Modified files | 1 (DatabaseSeeder.php) |
| **Total new files** | **1** |

## Acceptance Criteria Status

- [x] 2 distinct restaurants with different cuisines and configurations
- [x] 35 tables total with proper zones and capacities
- [x] ~85 menu items with allergens, dietary labels, and 3-tier pricing
- [x] Daily menus for 7 days with sections and curated items
- [x] 60 reservations with realistic status distribution
- [x] 40 paid orders with items and tips
- [x] 2 restaurant manager employees with API tokens
- [x] Dashboard endpoints will return meaningful data from seeded data
- [x] Seeder can run on fresh database after standard seeders
- [ ] Photos (skipped — optional per spec)
- [ ] Tests (not created — seeder tests are integration-heavy and require full DB)
