# راهنمای فارسی Swagger پروژه

این پروژه حالا یک مستندات Swagger/OpenAPI داخلی دارد که از APIهای فعلی کد تولید شده است.

## مسیرها

- رابط Swagger UI: `/swagger`
- خروجی خام OpenAPI JSON: `/api/openapi`

## کاربرد هر مسیر

- `/swagger` برای مشاهده، جستجو و تست Endpointها در مرورگر است.
- `/api/openapi` برای اتصال ابزارهای دیگر مثل Postman Import، Redoc، یا CI/CD مناسب است.

## نحوه استفاده

1. پروژه را اجرا کنید.
2. در مرورگر به `/swagger` بروید.
3. از روی Tagها Endpoint مورد نظر را باز کنید.
4. در صورت نیاز روی `Try it out` بزنید و ورودی را پر کنید.
5. برای Endpointهای نیازمند احراز هویت، بهتر است ابتدا در همان مرورگر داخل برنامه لاگین کرده باشید.

## احراز هویت

این پروژه از `NextAuth` با Session Cookie استفاده می‌کند.

- بیشتر APIهای کاربری با Session کار می‌کنند.
- APIهای ادمین علاوه بر Session، نقش `ADMIN` هم می‌خواهند.
- در Swagger نیازی به Bearer Token نیست، چون درخواست‌ها روی همان Origin اجرا می‌شوند و Cookie مرورگر قابل استفاده است.

## دسته‌بندی Endpointها

- `Auth`: ثبت‌نام، Session و مسیرهای پایه NextAuth
- `User`: پروفایل و تست Session
- `Team`: ساخت و مدیریت تیم فانتزی
- `Players`: دریافت و مدیریت بازیکنان
- `Countries`: دریافت و مدیریت کشورها
- `Matches`: بازی‌ها، آمار، رویدادها و محاسبه امتیاز
- `Rounds` و `Gameweeks`: مدیریت بازه‌های مسابقات
- `Quiz`: کوئیز روزانه، نتایج و قرعه‌کشی
- `Golden Cards`: کارت‌های طلایی
- `Payment`: ساخت و تایید پرداخت
- `Upload`: آپلود عکس بازیکن

## نکات مهم

- مسیر `/api/payment/verify` پاسخ JSON نمی‌دهد و کاربر را Redirect می‌کند.
- مسیر `/api/upload/player-image` از `multipart/form-data` استفاده می‌کند.
- برخی مسیرها مثل `POST /api/admin/matches/{id}/calc-points` از داده‌های ثبت‌شده قبلی استفاده می‌کنند و بدنه ورودی ندارند.
- مستندات بر اساس Routeهای فعلی پروژه نوشته شده؛ اگر API جدید اضافه شود باید `lib/openapi.ts` هم به‌روزرسانی شود.

## نگهداری مستندات

فایل اصلی مستندات:

- `lib/openapi.ts`

Routeهای خروجی:

- `app/api/openapi/route.ts`
- `app/swagger/route.ts`

اگر API جدیدی اضافه کردید:

1. مسیر جدید را در `paths` اضافه کنید.
2. در صورت نیاز Schema مشترک را در `components.schemas` تعریف کنید.
3. اگر Endpoint نیازمند Session است، از Security فعلی استفاده کنید.
