---
alwaysApply: true
---

# مستندسازی معماری پروژه Ai-School Frontend

## بررسی و مستندسازی معماری کامل پروژه

این پروژه یک ادمین پنل Next.js 15 با معماری پیشرفته است که بر پایه Vuexy Template ساخته شده است.

### ساختار کلی پروژه

```
frontend/
├── src/
│   ├── @core/          # کامپوننت‌ها و ابزارهای اصلی
│   ├── @layouts/       # لایه‌بندی‌های مختلف (Vertical/Horizontal)
│   ├── @menu/          # سیستم منو (عمودی/افقی)
│   ├── app/            # Next.js App Router
│   ├── components/     # کامپوننت‌های قابل استفاده مجدد
│   ├── contexts/       # Context API برای state management
│   ├── libs/           # کتابخانه‌های شخصی‌سازی شده
│   ├── redux-store/    # Redux store و slices
│   ├── views/          # View components برای صفحات
│   └── utils/          # توابع کمکی
```

### 1. ساختار Routing (Next.js App Router)

#### مسیرهای اصلی:

- `/layout.tsx` - Root layout
- `/(dashboard)/(private)/` - صفحات احراز هویت شده
- `/(blank-layout-pages)/(guest-only)/` - صفحات مهمان (Login, Register)
- `/(blank-layout-pages)/pages/` - صفحات عمومی

#### نحوه Fetch کردن Routes:

- Routes به صورت فایل‌های `page.tsx` در دایرکتوری‌های `app/(dashboard)/(private)/` تعریف می‌شوند
- هر صفحه می‌تواند Server Component باشد و داده‌ها را از API fetch کند
- مثال: `src/app/(dashboard)/(private)/dashboards/crm/page.tsx`

#### Redirects:

- در `next.config.ts` تعریف شده‌اند
- `/` به `/dashboards/crm` redirect می‌شود

### 2. کامپوننت‌ها

#### کامپوننت‌های آماده (Core Components):

- **@core/components/mui/** - کامپوننت‌های MUI شخصی‌سازی شده:
  - `Autocomplete.tsx`
  - `Avatar.tsx`
  - `Badge.tsx`
  - `Chip.tsx`
  - `IconButton.tsx`
  - `TabList.tsx`
  - `TextField.tsx`

- **@core/components/custom-inputs/** - Input های سفارشی:
  - `Horizontal.tsx` - Input با label افقی
  - `Vertical.tsx` - Input با label عمودی
  - `Image.tsx` - Input برای آپلود تصویر

- **@core/components/customizer/** - تنظیمات تم و layout
- **@core/components/scroll-to-top/** - دکمه بازگشت به بالا
- **@core/components/option-menu/** - منوی انتخاب

#### کامپوننت‌های Layout:

- **components/layout/vertical/** - کامپوننت‌های layout عمودی:
  - `Navigation.tsx` - منوی کناری
  - `Navbar.tsx` - نوار بالایی
  - `Footer.tsx` - فوتر

- **components/layout/horizontal/** - کامپوننت‌های layout افقی:
  - `Header.tsx` - هدر افقی
  - `Navigation.tsx` - منوی افقی
  - `Footer.tsx` - فوتر

- **components/layout/shared/** - کامپوننت‌های مشترک:
  - `UserDropdown.tsx` - منوی کاربر
  - `NotificationsDropdown.tsx` - اعلان‌ها
  - `ModeDropdown.tsx` - تغییر تم (Dark/Light)
  - `search/` - جستجو

#### کامپوننت‌های آماده استفاده:

- **components/card-statistics/** - کارت‌های آمار:
  - `Vertical.tsx` - کارت عمودی
  - `Horizontal.tsx` - کارت افقی
  - `StatsWithAreaChart.tsx` - کارت با نمودار

- **components/dialogs/** - دیالوگ‌های آماده:
  - `confirmation-dialog/` - تایید عملیات
  - `edit-user-info/` - ویرایش اطلاعات کاربر
  - `role-dialog/` - مدیریت نقش‌ها
  - `permission-dialog/` - مدیریت دسترسی‌ها

- **components/pricing/** - کامپوننت‌های قیمت‌گذاری
- **components/stepper-dot/** - Stepper با نقطه

### 3. سیستم منو (Menu System)

#### ساختار منو:

- **@menu/vertical-menu/** - منوی عمودی:
  - `Menu.tsx` - منوی اصلی
  - `MenuItem.tsx` - آیتم منو
  - `SubMenu.tsx` - زیرمنو
  - `MenuSection.tsx` - بخش منو

- **@menu/horizontal-menu/** - منوی افقی:
  - `Menu.tsx`
  - `MenuItem.tsx`
  - `SubMenu.tsx`

#### داده‌های منو:

- **src/data/navigation/verticalMenuData.tsx** - داده‌های منوی عمودی
- **src/components/GenerateMenu.tsx** - تابع تولید منو از داده‌ها

#### Contexts:

- `@menu/contexts/verticalNavContext.tsx` - Context منوی عمودی
- `@menu/contexts/horizontalNavContext.tsx` - Context منوی افقی

#### Hooks:

- `@menu/hooks/useVerticalMenu.tsx` - Hook منوی عمودی
- `@menu/hooks/useHorizontalMenu.tsx` - Hook منوی افقی
- `@menu/hooks/useVerticalNav.tsx` - Hook navigation عمودی
- `@menu/hooks/useHorizontalNav.tsx` - Hook navigation افقی

### 4. ساختار API

#### API Client:

- **src/libs/api/client.ts** - کلاس `ApiClient`:
  - مدیریت base URL
  - مدیریت authentication token (از localStorage)
  - متدهای `get`, `post`, `put`, `delete`
  - مدیریت خطاها و 401 (unauthorized)

#### API Services:

- **src/libs/api/services/**:
  - `authService.ts` - احراز هویت:
    - `requestOTP(phoneNumber)` - درخواست OTP
    - `verifyOTP(token, otpCode)` - تایید OTP
    - `logout()` - خروج
  - `taskService.ts` - مدیریت تسک‌ها
  - `eventService.ts` - مدیریت رویدادها
  - `simulatorService.ts` - شبیه‌ساز

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

```typescript
import { authService } from '@/libs/api'

// درخواست OTP
const tempToken = await authService.requestOTP(phoneNumber)

// تایید OTP
await authService.verifyOTP(tempToken, otpCode)
```

### 5. Hooks

#### Core Hooks (@core/hooks):

- `useSettings.tsx` - دسترسی به تنظیمات تم و layout
- `useLayoutInit.ts` - مقداردهی اولیه layout
- `useImageVariant.ts` - مدیریت variant تصاویر
- `useObjectCookie.ts` - مدیریت cookie به صورت object

#### Custom Hooks (hooks):

- `useIntersection.ts` - Intersection Observer برای lazy loading

#### Menu Hooks (@menu/hooks):

- `useVerticalMenu.tsx` - مدیریت state منوی عمودی
- `useHorizontalMenu.tsx` - مدیریت state منوی افقی
- `useVerticalNav.tsx` - مدیریت navigation عمودی
- `useHorizontalNav.tsx` - مدیریت navigation افقی
- `useMediaQuery.tsx` - Responsive breakpoints

### 6. مدیریت State

#### Redux Store:

- **src/redux-store/index.ts** - تنظیمات store:
  - `chatReducer` - state چت
  - `calendarReducer` - state تقویم
  - `kanbanReducer` - state کانبان
  - `emailReducer` - state ایمیل

#### Context API:

- **src/contexts/authContext.tsx** - مدیریت احراز هویت:
  - `user` - اطلاعات کاربر
  - `isAuthenticated` - وضعیت احراز هویت
  - `isLoading` - وضعیت بارگذاری
  - `login()` - ورود
  - `logout()` - خروج
  - `requestOTP()` - درخواست OTP

- **@core/contexts/settingsContext.tsx** - تنظیمات تم و layout
- **@menu/contexts/** - Contexts منو
- **src/contexts/intersectionContext.tsx** - Intersection Observer

### 7. Layouts

#### Vertical Layout:

- **@layouts/VerticalLayout.tsx** - Layout عمودی:
  - Navigation (منوی کناری)
  - Navbar (نوار بالایی)
  - Content (محتوای اصلی)
  - Footer (فوتر)

#### Horizontal Layout:

- **@layouts/HorizontalLayout.tsx** - Layout افقی:
  - Header (هدر)
  - Content (محتوای اصلی)
  - Footer (فوتر)

#### Layout Wrapper:

- **@layouts/LayoutWrapper.tsx** - Wrapper برای switch بین layouts

### 8. احراز هویت (Authentication)

#### AuthGuard:

- **src/hocs/AuthGuard.tsx** - محافظت از صفحات:
  - بررسی `isAuthenticated`
  - Redirect به صفحه login در صورت عدم احراز هویت

#### GuestOnlyRoute:

- **src/hocs/GuestOnlyRoute.tsx** - فقط برای مهمانان:
  - Redirect به dashboard در صورت احراز هویت

#### AuthProvider:

- **src/contexts/authProvider.tsx** - Provider احراز هویت
- **src/contexts/authContext.tsx** - Context و Hook `useAuth()`

### 9. زبان و جهت متن

#### پیکربندی:

- **کل پروژه به فارسی است** - تمام متون، کامنت‌ها و مستندات به فارسی
- جهت متن: `rtl` (راست به چپ) برای تمام صفحات
- فونت: استفاده از فونت‌های فارسی (ایران سنس و غیره)

### 10. سیستم تم (Theme)

#### پیکربندی:

- **src/configs/themeConfig.ts** - تنظیمات:
  - `mode`: 'system' | 'light' | 'dark'
  - `skin`: 'default' | 'bordered'
  - `layout`: 'vertical' | 'collapsed' | 'horizontal'
  - `navbar`, `contentWidth`, `footer` settings

#### Theme Provider:

- **src/components/theme/** - مدیریت تم:
  - `index.tsx` - ThemeProvider
  - `mergedTheme.ts` - ادغام تم‌ها
  - `userTheme.ts` - تم کاربر

#### Customizer:

- **@core/components/customizer/** - تنظیمات زنده تم و layout

### 11. Views

#### ساختار:

- **src/views/** - کامپوننت‌های view برای صفحات:
  - `dashboards/` - داشبوردها
  - `apps/` - اپلیکیشن‌ها
  - `pages/` - صفحات
  - `forms/` - فرم‌ها
  - `charts/` - نمودارها

#### الگوی استفاده:

```tsx
// در page.tsx
import DashboardView from '@views/dashboards/crm'

const DashboardPage = async () => {
  const data = await fetchData() // Optional
  return <DashboardView data={data} />
}
```

### 12. Providers

#### Providers Chain:

- **src/components/Providers.tsx** - زنجیره Providers:

  1. `AuthProvider` - احراز هویت
  2. `VerticalNavProvider` - منوی عمودی
  3. `SettingsProvider` - تنظیمات
  4. `ThemeProvider` - تم
  5. `ReduxProvider` - Redux

### 13. Path Aliases

#### تعریف شده در tsconfig.json:

- `@/*` → `./src/*`
- `@core/*` → `./src/@core/*`
- `@layouts/*` → `./src/@layouts/*`
- `@menu/*` → `./src/@menu/*`
- `@assets/*` → `./src/assets/*`
- `@components/*` → `./src/components/*`
- `@configs/*` → `./src/configs/*`
- `@views/*` → `./src/views/*`

### 14. قوانین مهم معماری

1. **زبان پروژه**: **کل پروژه باید به فارسی باشد** - تمام کامنت‌ها، متون، نام متغیرها (در صورت امکان)، و مستندات باید به فارسی نوشته شوند. پروژه تک‌زبانه است و فقط فارسی پشتیبانی می‌شود.
2. **Routing**: همه routes در `app/` بدون `[lang]` تعریف می‌شوند. مسیرها مستقیماً در `app/(dashboard)/(private)/` یا `app/(blank-layout-pages)/` قرار دارند.
3. **Components**: 
   - کامپوننت‌های قابل استفاده مجدد در `components/`
   - View components در `views/`
   - Core components در `@core/components/`
4. **API**: همه API calls از طریق `libs/api/` و services
5. **State**: 
   - State محلی با Context API
   - State پیچیده با Redux (chat, calendar, kanban, email)
6. **Authentication**: استفاده از `AuthGuard` برای صفحات protected
7. **Theme**: استفاده از `useSettings()` برای دسترسی به تنظیمات
8. **Layout**: استفاده از `LayoutWrapper` برای switch بین layouts
9. **جهت متن**: تمام صفحات با جهت `rtl` (راست به چپ) هستند

### 15. فایل‌های مهم

- `next.config.ts` - تنظیمات Next.js و redirects
- `tailwind.config.ts` - تنظیمات Tailwind CSS
- `tsconfig.json` - تنظیمات TypeScript و path aliases
- `src/configs/themeConfig.ts` - تنظیمات تم
- `src/data/navigation/verticalMenuData.tsx` - داده‌های منو

---

**نکته مهم**: این معماری باید در تمام توسعه‌های آینده رعایت شود. هر تغییری باید با این ساختار سازگار باشد.
