O'quv markazlari va maktablar uchun mo'ljallangan Incentive Management (Geymifikatsiya va Rag'batlantirish) Tizimining React/TypeScript asosidagi frontend qismi.
| Texnologiya | Versiya | Maqsadi |
|---|---|---|
| React | 18+ | UI kutubxonasi |
| TypeScript | 5+ | Type-safe dasturlash |
| Vite | 5+ | Build tool va dev server |
| Tailwind CSS | 3+ | Utility-first styling |
| shadcn/ui | latest | UI komponentlar kutubxonasi |
| React Router v6 | 6+ | Client-side routing |
| TanStack Query | 5+ | Server state boshqaruvi (caching, refetch) |
| Axios | 1+ | HTTP so'rovlar va interceptorlar |
| React Hook Form | 7+ | Form boshqaruvi |
| Zod | 3+ | Schema validatsiya |
| Zustand | 4+ | Client-side global state |
src/
βββ app/
β βββ helpers/ # Global yordamchi funksiyalar (handleAutoLogout va b.)
β βββ layouts/ # Sahifa layoutlari
β β βββ AuthLayout # Login/Register uchun layout
β β βββ AdminLayout # Admin panel layouti
β β βββ StudentLayout # Student kabineti layouti
β βββ providers/ # React context provayderlar (QueryClient, Theme va b.)
β βββ routes/ # Routing konfiguratsiyasi va ProtectedRoute
β βββ store/ # Zustand global store
β
βββ assets/
β βββ constants/ # ROLES, API endpoints va boshqa konstantalar
β
βββ components/
β βββ shared/ # Qayta ishlatiladigan umumiy komponentlar
β βββ loaders/ # PageLoader, Skeleton va b.
β
βββ features/ # Feature-based arxitektura (asosiy biznes logika)
β βββ auth/ # Login, Register, JWT token boshqaruvi
β βββ controls/ # Tizim boshqaruvi (rooms, roles, employees va b.)
β βββ dashboard/ # Admin va Student dashboard
β βββ groups/ # Guruhlar: CRUD, studentlar, detail
β β βββ api/ # groups.api.ts β barcha HTTP so'rovlar
β β βββ components/ # GroupCard, GroupFormModal, StudentTable va b.
β β βββ constants/ # queryKeys.ts
β β βββ hooks/ # useGroup, useCreateGroup, useAddStudent va b.
β β βββ pages/ # GroupsPage, GroupDetailPage
β β βββ schemas/ # group.schema.ts (Zod)
β β βββ types/ # TypeScript interfeyslari
β βββ market/ # Do'kon (rewards store)
β βββ students/ # Studentlar CRUD va boshqaruvi
β βββ teachers/ # O'qituvchilar CRUD
β βββ tenants/ # O'quv markazlari (Tenant) boshqaruvi
β
βββ hooks/ # Global custom hooklar
βββ lib/ # Utility funksiyalar (cn, formatters va b.)
βββ pages/ # Route sahifalari (feature page'larni import qiladi)
β βββ auth/
β βββ control/
β βββ dashboard/
β βββ errors/
β βββ groups/
β βββ market/
β βββ students/
β βββ teachers/
β βββ tenants/
βββ services/ # Axios instance va API sozlamalari
β βββ api/ # request instance (interceptorlar bilan)
β βββ endpoints/ # API endpoint konstantalari
β βββ helpers/ # handleAutoLogout va b.
βββ types/ # Global TypeScript type'lar
βββ ustils/ # Qo'shimcha yordamchi funksiyalar
βββ widgets/ # Murakkab qayta ishlatiladigan UI bloklari
Ilova uch asosiy yo'nalishga bo'lingan:
/ β /login ga redirect
/login β Kirish sahifasi
/register β Ro'yxatdan o'tish
/forgot-password β Parolni tiklash
/admin β Admin panel (ADMIN | SUPER_ADMIN | CREATOR)
/admin β Dashboard
/admin/teachers β O'qituvchilar ro'yxati
/admin/groups β Guruhlar ro'yxati
/admin/groups/:id β Guruh detali (studentlar, edit)
/admin/students β Studentlar ro'yxati
/admin/market β Do'kon
/admin/tenants β O'quv markazlari
/admin/control β Boshqaruv paneli
/admin/control β Fanlar (subjects)
/admin/control/rooms β Xonalar
/admin/control/employees β Xodimlar
/admin/control/plans β Rejalar
/admin/control/reasons β Sabablar
/admin/control/send-message β Xabar yuborish
/admin/control/roles β Rollar boshqaruvi
/student β Student kabineti (STUDENT)
/student β Dashboard
/student/groups β Mening guruhlarim
/student/market β Do'kon
* β 404 sahifasi
Route himoyasi: Har bir yo'nalish ProtectedRoute orqali o'tadi β foydalanuvchining roli tekshiriladi, ruxsat bo'lmasa login sahifasiga yo'naltiriladi.
src/services/api/index.ts faylida sozlangan request instance barcha HTTP so'rovlar uchun ishlatiladi.
Base URL : VITE_API_URL || http://localhost:3001/api
Credentials : withCredentials: true (cookie-based auth)
Content-Type: application/json
Har bir so'rovga quyidagilar avtomatik qo'shiladi:
Accept-Languageheader βlocalStoragedagi tildan olinadi (default:uz)tenantIdquery param βlocalStoragedagi tenant ma'lumotidan olinadi
| Holat | Natija |
|---|---|
401 xato kelganda |
Access token yangilanadi va so'rov qayta yuboriladi |
| Token yangilanayotganda parallel so'rovlar kelsa | Queue'ga qo'shiladi, token kelgach hammasi qayta yuboriladi |
| Token yangilash ham muvaffaqiyatsiz bo'lsa | handleAutoLogout() chaqiriladi, foydalanuvchi chiqariladi |
401dan boshqa xatolar |
error.response bilan reject qilinadi |
Har bir feature quyidagi tuzilmaga ega:
features/<feature-name>/
βββ api/ # Barcha axios HTTP so'rovlari
βββ components/ # Faqat shu feature uchun komponentlar
βββ constants/ # queryKeys va boshqa konstantalar
βββ hooks/ # useQuery va useMutation hooklari
βββ pages/ # Sahifa komponentlari
βββ schemas/ # Zod validatsiya sxemalari
βββ types/ # TypeScript interfeyslari va type'lar
Query Keys namunasi:
export const groupKeys = { allGroups: (params?: Record<string, any>) => ["all-groups", params ?? {}], oneGroupById: (id: string) => ["one-group-by-id", id], allStudents: () => ["all-students"], } as const;
- Node.js
v18+ - npm yoki yarn
git clone <repository-url> cd erp-coin-system-frontend npm install
.env faylini yarating:
VITE_API_URL=http://localhost:3001/api
npm run dev
Ilova http://localhost:5173 da ishga tushadi.
npm run build npm run preview
Tizim cookie-based JWT autentifikatsiyasidan foydalanadi:
- Access Token β qisqa muddatli, HTTP-only cookie
- Refresh Token β uzun muddatli, HTTP-only cookie
- Token muddati tugasa, Axios interceptor avtomatik yangilaydi
is_authenticatedβlocalStorageda saqlanadi (bool flag)
Rollar:
| Rol | Konstantasi | Sahifalar |
|---|---|---|
| Creator | ROLES.CREATOR |
/admin/* |
| Super Admin | ROLES.SUPER_ADMIN |
/admin/* |
| Tenant Admin | ROLES.ADMIN |
/admin/* |
| Teacher | ROLES.TEACHER |
/admin/* (cheklangan) |
| Student | ROLES.STUDENT |
/student/* |
Barcha komponentlar light va dark mode uchun moslashtirilgan. Tailwind dark: prefiksi va shadcn/ui token sistemi ishlatilgan.
Frontend ERP Coin System Backend (NestJS + Prisma + PostgreSQL) bilan ishlaydi.
Backend haqida to'liq ma'lumot: Backend README
Asosiy API guruhlari:
| Modul | Endpoint |
|---|---|
| Auth | /api/auth/* |
| Users / Students | /api/users/* |
| Groups | /api/groups/* |
| Courses | /api/courses/* |
| Sessions | /api/sessions/* |
| Coin Rules | /api/coin-rules/* |
| Transactions | /api/coin-transactions/* |
| Rewards | /api/rewards/* |
| Purchases | /api/purchases/* |
| Tenants | /api/tenants/* |
- Yaratuvchi: Muxammadi Toshtemirov
- Telefon: +998(94) 542-63-07
- Email: muxammadi0799@gmail.com
- Telegram: @Muxammadi_Dev