Yakuniy Loyiha Spetsifikatsiyasi: "Ariza Tizimi"
Modul 7 ning topshiriq hujjati. 7.1 darsdan oldin o‘qib chiqing.
1. Mahsulot tavsifi
Kursga yoki xizmatga onlayn ariza qabul qiladigan, to‘lovni o‘tkazadigan va operatorga boshqaruv beradigan tizim.
Foydalanuvchilar:
| Rol | Kanal | Nima qiladi |
|---|---|---|
| Arizachi | Telegram bot | Ariza yuboradi, to‘laydi, holatini kuzatadi |
| Operator | Web admin / mobil ilova | Arizalarni ko‘radi, holatini boshqaradi |
2. Nima ishlashi kerak
2.1 Telegram bot
/start— tanishtiradi; keyin ariza yuborish oqimi: ism → telefon → xizmat tanlash → tasdiqlash- Foydalanuvchi tasdiqlagach: API'da ariza yaratiladi va foydalanuvchiga to‘lov havolasi qaytadi
- To‘lov o‘tganda bot o‘zi xabar yuboradi: "To‘lov qabul qilindi "
/holat— foydalanuvchining oxirgi arizasi holatini ko‘rsatadi
2.2 Backend API (NestJS + PostgreSQL)
- Resurslar:
arizalar,tolovlar(kontrakt/swagger-apiskill bilan chiziladi) - Ariza holatlari mashinasi:
YANGI → TOLOV_KUTILMOQDA → TOLANGAN → KORIB_CHIQILDI → YAKUNLANDI
↘ BEKOR_QILINDI
- Ruxsat etilmagan holat o‘tishi 409 xato qaytaradi
- To‘lov webhook endpoint'i: imzoni tekshiradi + idempotent ishlaydi (bir xil webhook ikki marta kelsa, to‘lov ikki marta yozilmaydi)
- Sahifalash, holat bo‘yicha filtr, ism bo‘yicha qidiruv
2.3 To‘lov
- Provayder: Payme/Click (test muhiti) yoki Stripe (test mode) — faqat sandbox!
- Oqim: ariza → to‘lov yaratish → provayder sahifasi → webhook → holat yangilanadi
- To‘lov mantig‘iga testsiz kod qo‘shish taqiqlanadi (CLAUDE.md qoidasi)
2.4 Admin panel (Next.js)
- Login (bitta admin, session cookie; parol hash ko‘rinishida — env'da)
- Arizalar jadvali: raqam, ism, xizmat, holat (rangli badge), to‘lov, sana; sahifalash
- Filtr (holat) + qidiruv (ism); ariza tafsiloti + to‘lov tarixi
- Holat o‘zgartirish (faqat ruxsat etilgan o‘tishlar)
2.5 Mobil klient (Swift YOKI Kotlin — bittasi)
- Operator uchun: arizalar ro‘yxati (holat filtri), tafsilot, holat o‘zgartirish
- Dars 6.5 dagi "5 usul" bilan nazorat qilish majburiy
3. Texnik talablar
- Monorepo:
apps/api,apps/bot,apps/admin+packages/shared(kontraktdan olingan tiplar) - Bot va admin faqat API orqali ishlaydi (bazaga to‘g‘ridan-to‘g‘ri ulanmaydi)
- Migratsiyalar: flyway uslubi (
V00N__nom.sql), naming — kurs standartlari bo‘yicha (Dars 6.4) - Sirlar: faqat
.env/ secrets; kodda birorta token yo‘q - CI: har PR'da typecheck + testlar + AI review; merge'dan keyin avtomatik deploy
4. Baholash mezonlari (100 ball)
| Mezon | Ball | Nimaga qaraladi |
|---|---|---|
| Arxitektura va qatlamlar | 20 | Monorepo tartibi, hamma narsa API orqali ishlashi, shared tiplar |
| To‘lov xavfsizligi | 25 | Imzo tekshiruvi, idempotentlik, holat mashinasi, testlar koddan oldin yozilgani |
| Kod sifati va review izlari | 20 | PR tarixi, review izohlari, CLAUDE.md qoidalariga rioya |
| Funksional to‘liqlik | 20 | Barcha oqimlar ishlaydi (bot → to‘lov → admin → mobil) |
| CI/CD va hujjatlar | 15 | Yashil pipeline, README, ARCHITECTURE.md |
5. Bitiruv topshirig‘i (Dars 7.4 dan keyin)
Tizimga yangi funksiya qo‘shing: arizalarga operator izohlari — barcha qatlamlar bo‘ylab (migratsiya → API → admin UI → mobil), to‘liq tsikl bilan (reja → test → kod → review → PR → CI → deploy).
6. Chegaralar (nima TALAB QILINMAYDI)
- Real pul o‘tkazish (faqat sandbox)
- Push-bildirishnomalar (polling yetadi; push — "keyingi qadam")
- Ko‘p operatorli rollar tizimi (bitta admin yetadi)
- App Store / Play Market'ga chiqarish