Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

WebCONuz/erp-coin-system-frontend

Repository files navigation

πŸŽ“ ERP Coin System β€” Frontend

O'quv markazlari va maktablar uchun mo'ljallangan Incentive Management (Geymifikatsiya va Rag'batlantirish) Tizimining React/TypeScript asosidagi frontend qismi.


πŸ“Œ Texnologiyalar

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

πŸ“ Loyiha Strukturasi

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

πŸ—ΊοΈ Routing Strukturasi

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.


🌐 Axios Konfiguratsiyasi

src/services/api/index.ts faylida sozlangan request instance barcha HTTP so'rovlar uchun ishlatiladi.

Asosiy sozlamalar

Base URL : VITE_API_URL || http://localhost:3001/api
Credentials : withCredentials: true (cookie-based auth)
Content-Type: application/json

Request Interceptor

Har bir so'rovga quyidagilar avtomatik qo'shiladi:

  • Accept-Language header β€” localStoragedagi tildan olinadi (default: uz)
  • tenantId query param β€” localStoragedagi tenant ma'lumotidan olinadi

Response Interceptor β€” Token Refresh Logikasi

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

πŸ—οΈ Feature-based Arxitektura

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;

βš™οΈ Ishga Tushirish

1. Talablar

  • Node.js v18+
  • npm yoki yarn

2. O'rnatish

git clone <repository-url>
cd erp-coin-system-frontend
npm install

3. Environment o'zgaruvchilari

.env faylini yarating:

VITE_API_URL=http://localhost:3001/api

4. Development serverini ishga tushirish

npm run dev

Ilova http://localhost:5173 da ishga tushadi.

5. Production build

npm run build
npm run preview

πŸ” Autentifikatsiya

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/*

πŸŒ™ Dark Mode

Barcha komponentlar light va dark mode uchun moslashtirilgan. Tailwind dark: prefiksi va shadcn/ui token sistemi ishlatilgan.


πŸ“š Backend bilan Bog'liqlik

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/*

πŸ“ž Kontakt

  • Yaratuvchi: Muxammadi Toshtemirov
  • Telefon: +998(94) 542-63-07
  • Email: muxammadi0799@gmail.com
  • Telegram: @Muxammadi_Dev

Releases

No releases published

Packages

Contributors

Languages

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /