# نصب و راه‌اندازی — باغستان (سامانه رزرواسیون باغ و ویلا)

## این پکیج چیه؟
```
backend/     فایل‌های لاراول — باید داخل یک پروژه تازه لاراول کپی بشن (مرحله ۲)
             شامل: migrations, models, controllers, routes, bootstrap/app.php
             (middleware از قبل ثبت شده)، seeder اولین ادمین، و job زمان‌بندی‌شده
             برای آزادسازی رزروهای رهاشده.
frontend/    دو فایل React که واقعاً به API فراخوانی می‌زنن (نه mock):
             VillaBookingSite.jsx  → سایت مشتری (جستجو، رزرو، پرداخت، OTP)
             DashboardSuite.jsx    → ورود واقعی + پنل فروشنده/ادمین/مشتری
             ⚠️ قبل از استفاده، مقدار API_BASE بالای هر دو فایل رو با دامنه
             واقعی سرورت جایگزین کن.
docs/        چک‌لیست کامل راه‌اندازی تا آنلاین شدن
```

## مرحله ۱ — پیش‌نیازها روی سرور
```bash
sudo apt update
sudo apt install php8.2 php8.2-cli php8.2-mysql php8.2-mbstring php8.2-xml \
  php8.2-curl php8.2-zip mysql-server nginx composer nodejs npm -y
```

## مرحله ۲ — ساخت پروژه لاراول و کپی فایل‌ها
```bash
composer create-project laravel/laravel baghestan
cd baghestan

cp -r ../backend/app/* app/
cp -r ../backend/database/migrations/* database/migrations/
cp -r ../backend/database/seeders/* database/seeders/
cp ../backend/routes/api.php routes/api.php
cp ../backend/routes/console.php routes/console.php
cp ../backend/bootstrap/app.php bootstrap/app.php
```

## مرحله ۳ — نصب پکیج‌ها
```bash
composer require laravel/sanctum morilog/jalali
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
```

## مرحله ۴ — تنظیم `.env` و دیتابیس
```sql
CREATE DATABASE baghestan CHARACTER SET utf8mb4;
```
مقادیر زیر رو در `.env` پر کن (شرح کامل هر کدوم در `backend/docs/setup-notes.md`):
```
DB_DATABASE=baghestan
DB_USERNAME=...
DB_PASSWORD=...
FRONTEND_URL=https://your-frontend-domain.ir
SMS_PROVIDER=kavenegar
KAVENEGAR_API_KEY=
SEP_MERCHANT_ID=
MELLI_MERCHANT_ID=
MELLI_TERMINAL_ID=
MELLAT_TERMINAL_ID=
MELLAT_USERNAME=
MELLAT_PASSWORD=
```
محتوای `backend/docs/config-services-snippet.php` رو با `config/services.php` ادغام کن.
`config/cors.php` رو هم طبق `backend/docs/setup-notes.md` بخش ۶ تنظیم کن (چون فرانت
روی دامنه‌ی جدا اجرا می‌شه).

## مرحله ۵ — migrate + seed
```bash
php artisan migrate
php artisan db:seed   # می‌سازه: کمیسیون پیش‌فرض ۱۰٪ + یک ادمین با موبایل 09120000000
```
⚠️ قبل از seed، شماره موبایل ادمین رو در `database/seeders/DatabaseSeeder.php` با
شماره واقعی خودت عوض کن.

## مرحله ۶ — کران برای job‌های زمان‌بندی‌شده
```bash
crontab -e
# اضافه کن:
* * * * * cd /path/to/baghestan && php artisan schedule:run >> /dev/null 2>&1
```
این باعث می‌شه رزروهای پرداخت‌نشده بعد از ۱۵ دقیقه خودکار آزاد بشن.

## مرحله ۷ — اجرا و تست
```bash
php artisan serve
# تست سریع:
curl -X POST http://localhost:8000/api/auth/otp/send -H "Content-Type: application/json" -d '{"mobile":"09120000000"}'
```

## مرحله ۸ — فرانت
```bash
npm create vite@latest baghestan-front -- --template react
cd baghestan-front
npm install lucide-react
# VillaBookingSite.jsx و DashboardSuite.jsx رو به src/ منتقل کن
# در هر دو فایل، خط اول API_BASE رو با آدرس واقعی بک‌اندت جایگزین کن
npm run dev
```
از این‌جا به بعد فرانت واقعاً با بک‌اند صحبت می‌کنه — ثبت‌نام با OTP واقعی، رزرو واقعی
در دیتابیس ثبت می‌شه، و نقش کاربر (مشتری/فروشنده/ادمین) از پاسخ سرور تعیین می‌شه.

## مرحله ۹ (اختیاری) — پنل ادمین گرافیکی‌تر با Filament
```bash
composer require filament/filament
php artisan filament:install --panels
php artisan make:filament-resource Property
php artisan make:filament-resource Booking
```

## آنچه هنوز نیاز به کار انسانی داره (نه برنامه‌نویسی صرف)
- تست واقعی درگاه‌های بانکی با merchant_id واقعی (فقط خودت با حساب بانکی واقعی می‌تونی)
- گرفتن سرور و دامنه واقعی و اجرای دستورات بالا روی اون سرور
- تست عملی کل جریان (رزرو → پرداخت → تایید → واریز به فروشنده) با داده واقعی

از نظر کدنویسی، هر بخشی که در این چت قابل نوشتن بود، نوشته شده و به API واقعی وصل شده.
