Sayt, CRM, botlar va integratsiyalarda bajarilgan ishlar shu sahifada qadam-baqadam va doimiy saqlanadi.
Oxirgi yangilanish: Yozuvlar: 36
CRM interfeysi
Sidebar scrolli, yig‘iladigan menyu va fluid CRM layout ishga tushdi
Bajarildi
CRM sidebarida endi yuqori va pastki bloklar joyida qoladi, menyuning o‘zi mustaqil scroll qiladi va aktiv band avtomatik ko‘rinadi. Desktopda menyu ikonkalargacha yig‘iladi, holati eslab qolinadi; planshetda to‘liq drawer ochiladi. Dashboard va jadvallar 1600px gacha barcha mavjud kenglikni egallaydi.
Sidebar scrollbar 6px: oddiy holatda yashirin, menyu hoverida 18% oq va thumb hoverida 30%
Ochiq yuzalarda 15% qora native scrollbar; jadval, board va stepper gorizontal scrolllari 6px
Barcha telefon maydonlari yagona +998 formatiga o‘tkazildi
Bajarildi
Sayt va CRM endi bitta umumiy PhoneInput’dan foydalanadi, Staff ilovasida esa ayni qoidali native komponent bor. Prefiks o‘chmaydi, foydalanuvchi 9 raqamni kiritadi, turli paste formatlari +998XXXXXXXXX ko‘rinishiga keladi va to‘liq bo‘lmagan telefon yuborilmaydi. Yangi signed Staff APK ham chop etildi.
Saytdagi callback, quiz va foto-baho formalarining barchasi tuzatildi
CRM login, buyurtma, mijoz, lid, qo‘ng‘iroq, usta, kuryer, filial, xodim, chat va Sozlamalardagi telefonlar shared komponentda
+998, 998, lokal 9 raqam, bo‘shliq/qavs/chiziqli va 00998 formatlari normallashtiriladi
Majburiy bo‘sh va barcha qisman raqamlar submitni bloklaydi; hint RU/UZ
Kod auditi xom web/mobile telefon inputi qolmaganini tasdiqladi va kelajak regressiyasini CI’da bloklaydi
Zamonaviy boshqaruv markazi va Telegram auto-lid nazorati ishga tushdi
Bajarildi
Sozlamalar endi qidiruvli yagona boshqaruv markazi: tashkilot va workflow, sayt, kanallar, shifrlangan integratsiyalar, AI, skriptlar, jamoa huquqlari, filiallar, katalog va ijrochilar bir joydan ochiladi. SUPERADMIN Telegram private-chatlari uchun auto-lidni audit bilan yoqib/o‘chiradi; standart va production holati OFF, guruhlar hamda tarix importi esa doim auto-lidsiz.
Production toggle aniq OFF qilib saqlandi va o‘zgarish auditga yozildi
Faqat yangi incoming private Telegram chat toggle ON bo‘lganda lid yaratishi mumkin
Telegram guruhi, outgoing xabar va tarix importi har qanday holatda lid yaratmaydi
40/40 eski Telegram-import lid ARCHIVED, faol voronkada 0 va ma’lumot o‘chirilmagan
Settings UI 40 arxivlangan, 0 kutayotgan va tarix importi doim OFF ekanini real ko‘rsatadi
Qidiruv va 11 boshqaruv kartasi CRM imkoniyatlarini yagona katalogga birlashtiradi
53 backend suite/409 test, backend/CRM build, audit 0 vulnerability muvaffaqiyatli
Production Settings browser acceptance 1440/1280/900 px, overflow va runtime-error 0
CRM chatlar va lidlar
Chatlardan auto-lid to‘xtatildi va real CRM messenger ishga tushdi
Bajarildi
Kiruvchi Telegram chatlari productionda auto-lid yaratmaydi, tarix importi esa doim bundan himoyalangan: lidni menejer chatdan aniq yaratadi, site/quiz va kuryer arizalari avvalgidek ishlaydi. CRM chatida real javob va fayl yuborish, AI draft, shablon, emoji, yetkazish holati, retry, ichki qidiruv, unread reset va responsive mijoz paneli mavjud. Chatdan buyurtma yaratilganda dialog mijozga atomik bog‘lanadi.
Kiruvchi va import xabari yangi lid yaratmaydi; “Lid yaratish” alohida boshqariladigan amal
40 ta eski auto-lid CHAT_IMPORT sifatida belgilandi va audit bilan ARCHIVED qilindi; faol lid 0
Legacy CHAT_IMPORT lidlar buyurtma telefoniga yashirin avtomatik konvertatsiya qilinmaydi
Telegramga manager javobi va haqiqiy PNG yetdi; sending/delivered/failed hamda retry DBda saqlanadi
AI draft, Skript shablonlari, emoji, Enter/Shift+Enter va dialog ichidagi server qidiruvi ishlaydi
Unread dialog ochilganda nolga tushadi; nazoratli autoscroll va “oxirgi xabarlarga” tugmasi mavjud
O‘ng panel kesilmaydi; buyurtma, lid, mijoz kartasi va qo‘ng‘iroq tezkor amallari ko‘rinadi
Production Telegram→CRM→reply→attachment→AI→order oqimi 14/14, browser 1440/1280/900 va 53 suite/409 test muvaffaqiyatli
Mijoz Telegram-boti
Ikkinchi raqam, real kuryer chaqiruvi va sharhlar ishga tushdi
Bajarildi
Mijoz boti endi tasdiqlangan asosiy raqamdan keyin qo'shimcha telefonni taklif qiladi va buyurtmalarni barcha bog'langan raqamlar bo'yicha topadi. Kuryer chaqiruvi lokatsiya, sana, sozlamadagi vaqt oralig'i va izoh bilan haqiqiy CRM arizasi hamda marshrut nuqtasini yaratadi. Sharhlar 1–5 baho va matn bilan moderatsiyaga tushadi; eski vaqtinchalik tugmalar olib tashlandi.
Matndagi +998, 998, mahalliy 9 raqam va bo'shliqli format yagona +998XXXXXXXXX ko'rinishiga o'tadi
Mobil operator kodi tekshiriladi, tasdiqlangan ikkinchi raqam verified mijoz kanali sifatida saqlanadi
“Buyurtmalarim” eski dublikat client kartochkasida qolgan buyurtmani ham barcha bog'langan telefonlar orqali topadi
Buyurtma topilmasa va ikkinchi raqam bo'lmasa, bot ayni raqam qo'shish oqimini taklif qiladi
Kuryer uchun Telegram lokatsiyasi yoki qo'lda xarita nuqtasi, Bugun/Ertaga, 4 ta amaldagi slot va ixtiyoriy izoh ishlaydi
Noma'lum telefon uchun client va lead, pickup buyurtma, kuryer nuqtasi/vazifasi, manager bildirishnomasi va audit atomik yaratiladi
Route insertion mavjud algoritm bilan ishga tushadi; mijoz botning o'zidan sana va slot tasdig'ini oladi
1–5 yulduzli matnli sharh CRM moderatsiyasiga public qilinmagan holatda tushadi
51 backend suite/389 test, 27 focused test, snapshot restore, production read-only va Telegram getMe, izolyatsiyalangan compiled-API E2E 17/17 muvaffaqiyatli
Buyurtmalar va nazorat
Buyurtma statusini xavfsiz va nazoratli qaytarish ishga tushdi
Bajarildi
Administrator xato statusni endi oddiy bosish bilan emas, majburiy sabab va oqibatlar ko‘rigidan keyin qaytaradi. Tizim chek, usta hisoblamasi, ishlab chiqarish bosqichi, kuryer vazifasi va mijoz xabarini bitta nazoratli tranzaksiyada boshqaradi; har bir amal muallif va sabab bilan auditga yoziladi.
ADMIN va SUPERADMIN doim ruxsatli; MANAGER huquqini faqat tizim egasi alohida yoqadi
“Boshqa” sababi uchun matn majburiy, tasdiqdan oldin barcha oqibatlar RU/UZ ko‘rsatiladi
To‘lanmagan usta hisoblamasi “Kutilmoqda”ga qaytadi; to‘langan summa o‘zgarmaydi va avans markerini oladi
Chek bekor qilinmaydi, ishlab chiqarish fotosi saqlanadi va bosqich ayni ustaga qayta ochiladi
Kafolatli qaytarish alohida flag va mijoz uchun 0 narxli qayta ishlash yaratadi
Oddiy rollback mijozga xabar yubormaydi; kafolatli nuqson bundan yagona istisno
Buyurtma lentasida muallif, yo‘nalish va sabab “⟲” bilan ko‘rinadi; to‘liq audit yozuvi saqlanadi
49 backend suite/362 test, izolyatsiyalangan DB+media restore, migration dry-run, production API va 1440px browser acceptance muvaffaqiyatli
Xavfsizlik va integratsiyalar
Integratsiya kalitlari shifrlangan markaziy saqlashga ko‘chirildi
Bajarildi
Botlar, Telegram, AI, Instagram va kelajakdagi tashqi providerlar uchun yagona secret boshqaruvi ishga tushirildi. Har bir qiymat alohida AES-256-GCM bilan shifrlanadi; brauzer faqat niqobni ko‘radi, qiymatning o‘zi esa log, audit yoki API javobiga chiqmaydi. Superadmin endi Sozlamalarda kalitni xavfsiz almashtirishi va ulanishni tekshirishi mumkin.
Amaldagi env va eski DB saqlash joylari qiymatlarni oshkor qilmasdan to‘liq inventarizatsiya qilindi
10 ta amaldagi credential markaziy shifrlangan jadvalga ko‘chirildi; eski site, kanal va Telegram session plaintext qoldig‘i 0
Master key DB va Gitdan tashqaridagi cheklangan faylda; env faqat shu faylga havolani saqlaydi
Secret cache yangilash yoki o‘chirishda invalidatsiya qilinadi; migratsiya qayta ishlatilganda xavfsiz no-op
“Integratsiyalar va kalitlar” faqat SUPERADMIN uchun ochiq; sozlangan qiymatlar faqat ****1234 ko‘rinishida
ADMIN uchun secret API 403; Telegram API ID/hash, Instagram verify token va umumiy site-text javoblari ochiq qiymat bermaydi
Asosiy mijoz boti, xodimlar boti va Gemini bilan real connection test muvaffaqiyatli
47 backend suite/350 test, barcha production buildlar, dependency audit 0, acceptance 19/19 va browser smoke 26/26 muvaffaqiyatli
Buyurtmalar va ishlab chiqarish
Ko‘p-buyumli buyurtma, alohida xizmatlar va har-buyumga foto ishga tushirildi
Bajarildi
Bitta buyurtmadagi har bir juft oyoq kiyim, sumka yoki boshqa jismoniy buyum endi mustaqil birlik sifatida yuritiladi. Qo‘lda qabul qilish va AI draft har bir buyumga o‘z xizmatlari, tavsifi va fotosini biriktiradi; buyurtma kartasida ruxsatga mos tahrirlash, jami va chegirmani qayta hisoblash, 1/N formatdagi birkalar hamda ishlab chiqarish bosqichida har bir buyum uchun majburiy ichki foto ishlaydi.
Qo‘lda qabul qilishda 50 tagacha jismoniy buyum qo‘shiladi; har bir buyumning o‘z katalog xizmatlari, tavsifi va narxi bor
AI draft jismoniy buyumlar sonini saqlaydi, “2 dona” kabi miqdorni alohida buyumlarga ajratadi va noaniq natijani inson tekshiruviga chiqaradi
Har bir xizmatning OrderItem bilan majburiy DB aloqasi, eski yozuvlar uchun backfill va buyurtma ichida noyob item pozitsiyasi migratsiya bilan joriy qilindi
Buyurtma kartasida mijoz, muddat, izoh, chegirma, buyum, foto va xizmatlar faqat tegishli permissionlar doirasida tahrirlanadi
Katalog narxi odatda canonical qiymatda qoladi; qo‘lda narx o‘zgartirish faqat price:override huquqi bilan ishlaydi
Buyum/xizmat o‘zgarishidan keyin jami, foizli chegirma, qoldiq va ortiqcha to‘lov qayta hisoblanadi
Boshlangan yoki yopilgan ishlab chiqarish bosqichidagi xizmatni xavfli o‘zgartirish va o‘chirish bloklanadi
Staff bot har bosqichdagi barcha buyumlar uchun alohida ichki foto talab qiladi va oxirgi foto yuklangach bosqichni yakunlaydi
PDF birkalarda buyum raqami 1/N ko‘rsatiladi; 9 buyumli buyurtma avtomatik ikki sahifaga joylanishi test bilan tasdiqlandi
Yakuniy tekshiruv: 44 backend suite va 332 test, barcha production buildlar, 48 jadval/1925 media restore, migratsiya dry-run hamda HTTPS acceptance 19/19 muvaffaqiyatli
Mobil ilova
Android APK ochilmasligi tuzatildi va 1.0.3 release e’lon qilindi
Jarayonda
Oldingi APK o‘rnatilgach ochilmasligining aniq sababi topildi: Android manifest ishga tushirgan launcher klassi bilan Kotlin package nomi bir-biriga mos emas edi. Canonical package tiklandi, yangi imzolangan release productionga chiqarildi va Android runtime’da toza o‘rnatish hamda launcher sinovidan o‘tdi. Egasi yangi versiyani jismoniy telefonida tasdiqlagach yozuv yakunlanadi.
Eski 1.0.2 (3) manifesti uz.restoria.staff.MainActivity ni chaqirgan, DEX klassi esa uz.restoria.restoria_staff paketida bo‘lgan; bu Android launcher klassni topa olmasligiga olib kelgan
MainActivity uz.restoria.staff canonical paketiga ko‘chirildi, manifest launcher klassni to‘liq nom bilan ko‘rsatadi
Release jarayoniga manifestdagi launcher va DEX ichidagi klass mosligini tekshiradigan fail-closed nazorat qo‘shildi
Flutter analyze va test muvaffaqiyatli; Restoria Staff 1.0.3 (4) release APK release kaliti bilan imzolandi va zipalign tekshiruvidan o‘tdi
APK application ID, version, min/target SDK, manifest launcher va DEX klassi statik tekshiruvdan muvaffaqiyatli o‘tdi
Android 15 runtime’da toza o‘rnatildi; LAUNCHER intent MainActivity ni ochdi, ilova processi va foreground activity tasdiqlandi, Flutter login oynasi chizildi
Logcat’da Restoria uchun FATAL EXCEPTION, ClassNotFoundException, Unable to instantiate activity yoki ANR topilmadi
Production metadata va download HTTP 200: restoria-staff-1.0.3-4.apk, 49 058 337 bayt; SHA-256 va fayl lokal release bilan baytma-bayt mos
Jismoniy telefon tekshiruvi ochiq: egasi CRM’dan aynan 1.0.3 (4) ni o‘rnatib, ochilishini tasdiqlaydi
Barcha xodimlar uchun rol qo‘llanmasi va doimiy APK havolasi yaratildi
Bajarildi
CRM’da barcha avtorizatsiyadan o‘tgan xodimlar uchun “Qo‘llanma va APK” bo‘limi yaratildi. Egasi va administrator barcha lavozimlarni tanlab ko‘radi, boshqa xodim esa o‘z roliga mos boshlash, kundalik jarayon va xavfsizlik qoidalarini ko‘radi. Shu bo‘limdan haqiqiy release key bilan imzolangan Restoria Staff APK’ning dolzarb versiyasi yuklanadi.
SUPERADMIN, ADMIN, MANAGER, RECEPTIONIST, MASTER_INTERNAL, MASTER_EXTERNAL, QC, COURIER va CASHIER uchun alohida RU/UZ qo‘llanma yozildi
Qo‘llanmalar real permission va mavjud CRM/mobile jarayonlariga mos: xodimga yopiq telefon, narx yoki tizim amali va’da qilinmaydi
Sahifa barcha JWT orqali kirgan xodimlarga biznes permissiondan mustaqil ochiq; adminlar barcha rolni tanlaydi, qolganlar faqat o‘z rolini ko‘radi
Qo‘llanmani brauzerdan chop etish yoki PDF sifatida saqlash rejimi qo‘shildi
Mobil Profilga “rolim bo‘yicha qo‘llanma”, “APK yangilanishini yuklash” va real package version ko‘rsatkichlari qo‘shildi
Qabul ekranidagi eski nomuvofiqlik tuzatildi: kamera fotosi endi huquq tekshiruvidan keyin BEFORE + INTERNAL sifatida saqlanadi va mijoz konturiga aralashmaydi
Foto yuklashda tarmoq uzilsa yaratilgan buyurtma takrorlanmaydi; ilova aniq ogohlantiradi, CRM buyurtma kartasida esa qabul fotosini qayta qo‘shish amali bor
Restoria Staff 1.0.2+3 release APK 48,723,453 bayt; apksigner orqali imzo tekshirildi va Android Debug imzosi qat’iy rad etiladi
APK metadata version, hajm, SHA-256, sana, Android minimumi va RU/UZ release note beradi; download 5/min rate limit va nosniff bilan ishlaydi
Manifest faqat canonical restoria-staff-x.y.z-code.apk nomi, mos version/size, oddiy fayl va symlinksiz qat’iy tekshiruvdan o‘tganda ochiladi
npm run release:mobile-apk kelgusida pub get, analyze, test, release build, imzo tekshiruvi va CRM fayl/manifestini atomik yangilashni bitta jarayonda bajaradi
Play Console uchun 1.0.2+3 release AAB ham 41.4 MB hajmda qayta build qilindi va release imzosi mavjudligi tekshirildi
37 backend suite, 279/279 test, Flutter analyze/test, barcha production buildlar va npm production audit 0 muvaffaqiyatli
APKni ham qamragan yangi atomik snapshot: 343 DB obyekti va 12 media; retention oldingi shu kun snapshotini o‘chirib, 2 ta kerakli snapshotni saqladi
Production deploy yakunlandi: real HTTPS read-only acceptance 19/19, API/CRM/sayt/ikkala bot PM2’da online
Browser smoke 82/82: 8 ta faol rol akkaunti, ruxsat/taqiq chegaralari, owner selectoridagi barcha 9 rol qo‘llanmasi, ADMIN ko‘rinishi, APK tugmasi va public sahifalar tasdiqlandi
Production’dan APK to‘liq qayta yuklandi: Content-Type/filename/48,723,453 bayt va SHA-256 local release bilan aynan mos
Tashqi stock media olib tashlandi, o‘z kontenti uchun ZIP-import yaratildi
Bajarildi
Egasi so‘roviga ko‘ra avvalgi Pexels foto va videosi bosh sahifadan hamda loyiha assetlaridan olib tashlandi. Ularning o‘rniga CRM sozlamalarida Restoria’ning o‘z foto va videolarini bitta ZIP orqali xavfsiz yuklash, ko‘rib chiqish, RU/UZ sarlavhasini va tartibini tahrirlash hamda har bir materialni alohida chop etish imkoniyati yaratildi.
Oldingi 6 ta stock foto, 1 ta video, poster va statik katalog kodi o‘chirildi; o‘z kontenti hali chop etilmagan bo‘lsa bo‘sh media bo‘limi va uning menyu havolasi ko‘rinmaydi
ZIP uchun 45 MB siqilgan hajm, 80 yozuv, 20 media, 80 MB ochilgan umumiy hajm va har bir foto/video uchun alohida limitlar qat’iy tekshiriladi
Absolyut yo‘l, ../ traversal, backslash, symlink, ortiqcha katalog chuqurligi, uzun nom, shifrlangan/buzilgan ZIP, ZIP-bomb va noma’lum formatlar rad etiladi
Oddiy rejimda JPEG, PNG, WebP, MP4 va WebM fayllarini ZIPga joylash kifoya; fayl nomidan xavfsiz RU/UZ sarlavha hosil qilinadi
Ixtiyoriy manifest.json orqali aniq RU/UZ sarlavha, izoh, tartib va video posteri beriladi; dublikat, mos kelmagan tur va manifestdan tashqari fayl import qilinmaydi
Rasmlar signatura va decode bo‘yicha tekshirilib, EXIFsiz va 2000 px chegaradagi WebPga qayta kodlanadi; video faqat haqiqiy MP4/WebM signaturasi bilan qabul qilinadi
Har bir import isPublished=false bilan yashirin yaratiladi; publik API faqat qo‘lda tasdiqlangan elementlarning xavfsiz fieldlarini va HTTPS media URLlarini beradi
Import DB yozuvlari va audit logi bitta transactionda saqlanadi; xato bo‘lsa yangi yozilgan barcha fayllar avtomatik tozalanadi
O‘zgartirish va o‘chirish settings.system huquqi bilan himoyalangan; o‘chirish faqat UUID nomli site-media fayllariga tegishi mumkin
Migratsiyadan oldin atomik snapshot olindi: 339 DB obyekti va 9 media; 16-migratsiya qo‘llandi, schema-diff natijasi nol
36 backend suite, 275/275 test; backend, CRM va sayt production buildlari hamda npm production audit 0 muvaffaqiyatli
Birinchi production qabul sinovi public site-media allowlistidagi yetishmagan yo‘lni va testdagi avtomatik sarlavha taxminini aniqladi; yo‘l faqat public site-media uchun ochildi, vaqtinchalik test yozuvi va fayli to‘liq tozalandi
Yakuniy real HTTPS qabul sinovi 4/4: ZIP import, yashirin moderatsiya, qo‘lda publikatsiya, WebP 200, DB va fayl cleanup; sinovdan keyin site-media yozuv/fayl qoldig‘i 0/0
Read-only production acceptance 15/15 va SUPERADMIN/public browser smoke 24/24; API, CRM, sayt va ikkala bot PM2’da online
Asosiy sayt kontenti
Tarixiy yozuv: litsenziyalangan media qo‘shilgan edi, keyin olib tashlandi
Bajarildi
Bu yozuv 2026-07-21 kuni vaqtincha qo‘shilgan Pexels foto va videosining tarixini saqlaydi. Egasi keyingi topshirig‘ida tashqi kontentni olib tashlashni va o‘z materiallari uchun ZIP-import yaratishni so‘radi; assetlar va bo‘lim olib tashlandi, yangi natija yuqoridagi yozuvda qayd etilgan.
Tasodifiy sayt yoki Instagram kontenti ko‘chirilmadi: faqat qayta foydalanish shartlari aniq Pexels materiallari olindi
Manba sahifalari, mualliflar va Pexels litsenziyasi 2026-07-21 kuni tekshirildi va foydalanuvchiga ko‘rinadigan qilindi
Yuklangan fayllar JPEG/MP4 signaturasi bo‘yicha tekshirildi; rasmlar qayta kodlanib EXIF metadatasiz WebP formatiga o‘tkazildi
6 ta WebP foto jami taxminan 731 KiB; video 4.2 MB va poster 24 KB — rasmlar lazy-load, video preload=metadata bilan ishlaydi
Media RU/UZ sarlavha, izoh va accessibility alt/aria matnlari bilan to‘ldirildi
Referens materiallar “Restoria real ishi” galereyasiga qo‘shilmadi; real oldin/keyin ishlar faqat CRM orqali chop etilishi saqlandi
Instagram fotosi yoki videosini ruxsatsiz rehost qilish taqiqlandi; keyinchalik faqat muallif ruxsati yoki rasmiy embed bilan qo‘shiladi
Bildirishnoma, buyurtma, integratsiya va vakolat chegaralari mustahkamlandi
Bajarildi
API va CRM bo‘yicha yakuniy yozish/ko‘rish auditi dashboard bildirishnomalari, buyurtma maxfiyligi, kuryer profili, xodim vakolati va Instagram public callbacklarida qo‘shimcha qat’iy chegaralarni aniqladi. Tuzatishlar faqat server permissioniga tayangan, UI esa mavjud huquqqa mos ravishda keraksiz action va so‘rovlarni yashiradigan qilib yakunlandi.
Notification API faqat DASHBOARD kanalini va recipient maydonisiz xavfsiz fieldlarni beradi; admin, manager va receptionist audience’lari ajratilgan
WebSocket notification matni tarqatilmaydi: faqat event kodi tegishli permission-roomga yuboriladi
CRM kolokoli dashboard.view bo‘lmasa ko‘rinmaydi va notification APIga so‘rov qilmaydi
Master faqat bevosita, stage yoki task orqali biriktirilgan buyurtmani; OTK esa faqat OTK task queue/history buyurtmalarini oladi
Master va OTK uchun mijoz telefon/kanal/manzil, delivery detail, payment va client-price fieldlari server javobida kesiladi
Order search, card, allowed transition, stage va event feed bir xil row-level tekshiruvdan foydalanadi; moliyaviy eventlar ruxsatsiz feedga kirmaydi
Excel eksport reports.finance, PDF hujjatlar receipts.print, payment-link orders.finance, katalog/prays oqimi price.view bilan bog‘landi
Order card ruxsatlar yuklangandan keyin ochiladi va faqat mos finance/status/assign/courier/payment/discount/document bloklarini ko‘rsatadi
Receptionist kuryer ro‘yxati va delivery arizasini ishlatadi; kuryer profilini yaratish/tahrirlash/deaktivatsiya routes.manage bilan cheklangan
Delivery nuqtasi DTO hamda service darajasida mavjud order, ISO sana, slot, coordinate, stage va faol kuryer bo‘yicha tekshiriladi; yakunlangan nuqta tahrirlanmaydi
Individual users.manage huquqi o‘zidan yuqori rol yoki permissionni bera olmaydi; SUPERADMIN va oxirgi faol ega invariantlari saqlanadi
Instagram POST webhook raw-body HMAC imzosiz yopiq; public manual/mock fallback olib tashlandi, OAuth state hash holida 10 daqiqalik va bir martalik
PBX, bot va tracking service kalitlari umumiy constant-time taqqoslashdan foydalanadi
Yangi va almashtiriladigan parol 8–128 belgida DTO va service darajasida tekshiriladi; mavjud login/parol o‘zgartirilmadi
34 backend suite: 265/265; barcha production buildlar, Prisma validate, npm audit 0 hamda Flutter format/analyze/test muvaffaqiyatli
Production RBAC API qabul sinovi 19/19: notification fieldlari, master scope/redaction, receptionist 403 va unsigned webhook DBga yozmasdan tasdiqlandi
Umumiy read-only production acceptance 17/17; API/DB health, HTTPS va fail-closed integratsiyalar ishlaydi
Real HTTPS browser smoke 73/73: 8 faol rolning ruxsat etilgan va taqiqlangan sahifalari, order resize persistence hamda 3 public sahifa
API, CRM, sayt va ikkala bot PM2’da online; milestone public hisobotda ko‘rinadi va kod remote Git branch’iga yuborildi
Roadmap P1–P3
Mobil ish oqimi, marshrut tartibi va jadval qulayligi yakunlandi
Bajarildi
Masterlar mobil ilovada bosqichni qabul qilish, muammoni sabab bilan qaytarish, kamera yoki galereyadan xavfsiz ichki foto biriktirish, faqat fotodan keyin ishni yakunlash va o‘z daromadini ko‘rish imkoniga ega bo‘ldi. CRM marshrut ichidagi drag-and-drop tartibini atomik saqlaydi, buyurtma ustunlari esa sichqon, sensor yoki klaviatura bilan o‘lchamlanib brauzerda saqlanadi. Shu jarayonda vazifa va kuryer nuqtalarining boshqa xodim tomonidan bajarilishiga yo‘l qo‘ygan ownership nomuvofiqligi ham yopildi.
Mobil stage actionlar backendning mavjud role/owner va xavfsiz image decode/re-encode himoyasidan foydalanadi
Earnings ekrani shu oy yoki barcha vaqt bo‘yicha faqat JWTga bog‘langan master ma’lumotini oladi; sana chegaralari lokal to‘liq kun sifatida qat’iy tekshiriladi
Production API default manzili HTTPS; release manifest cleartext trafik va keraksiz lokatsiya ruxsatini taqiqlaydi
Android scaffold, Gradle wrapper va pubspec.lock reproduktiv build uchun Gitga qo‘shildi; local key/property va keystore sir bo‘lib qoladi
Release AAB haqiqiy non-debug upload-key bilan tekshirildi; signing to‘liq bo‘lmasa release build fail-closed
Marshrut ichki tartibi faqat to‘liq aktual UUID ro‘yxatini qabul qiladi va barcha sortOrder qiymatlarini bitta transactionda yozadi
TO_MASTER/FROM_MASTER nuqtalari algoritm va xaritaga kiritildi; yakunlash buyurtmani xato “berildi” holatiga o‘tkazmay, tegishli stage jarayonini davom ettiradi
Tashqi master callback’i retry-safe qilindi: ochiq ish vazifasi dublikatlanmaydi, bosqich takroran OTKga o‘tmaydi va callback xatosida nuqta statusi qaytariladi
Manual kuryerga ko‘chirish tanlangan kuryerni qayta algoritm bilan bekor qilmaydi; eski va yangi ro‘yxatlar ketma-ket normallashtiriladi
Kuryer actionlari rol, point owner, status, sabab va summa bo‘yicha himoyalandi; boshqa tasks.my rollariga begona marshrut va action yopildi
Buyurtma ustunlari 64–480 px chegarada pointer/klaviatura bilan o‘zgaradi, buzilgan storage qiymatlari sanitizatsiya qilinadi va reset mavjud
27 backend suite: 240/240; Flutter format/analyze/test, barcha production buildlar, Prisma validate va npm audit 0 muvaffaqiyatli
Production read-only acceptance 17/17; API health, DB, HTTPS, auth va fail-closed integratsiyalar tasdiqlandi
Real HTTPS browser smoke 24/24: 20 CRM sahifa, resize→reload persistence va 3 public sahifa
Production master API: earnings 200, client phone yashirin; begona route/action 403 va noto‘liq order DBga yozmasdan 400
API, CRM, sayt va ikkala bot PM2’da online; yangi milestone public hisobotda ko‘rinadi va commit remote Git branch’iga yuborildi
Production qabul
Tashqi ma’lumotsiz bajariladigan roadmap production’ga topshirildi
Bajarildi
Sayt, CRM, API, botlar, media CMS, dependencylar va fail-closed integratsiyalar bitta yakuniy qabul siklidan o‘tdi. Eski production’ga yozuvchi acceptance/smoke skriptlari read-only formatga almashtirildi, ichki hujjatlardagi mock va ochiq LAN port haqidagi eskirgan da’volar tuzatildi. Qolgan bandlar faqat egadan tashqi credential, haqiqiy media yoki server sudo ruxsati kelgach bajariladi.
230/230 backend test, to‘rtta production build va npm audit 0 muvaffaqiyatli
Read-only production acceptance: 17/17; test user, lead, order, payment yoki call yaratilmadi
Haqiqiy HTTPS domenlar orqali read-only browser smoke: 20 ta CRM va 3 ta public sahifa, 23/23 muvaffaqiyatli
CRM→API→public media E2E: PNG→WebP, haqiqiy MP4, public ko‘rinish va to‘liq DB/fayl cleanup
DBga bog‘lanmagan ikkita eski 4×4 test PNG recoverable Trash’ga ko‘chirildi; galereya DB va katalog toza
Prisma 6.19.3 health, 15 migration va nol schema-diff bilan production’da ishlamoqda
Yakuniy atomik snapshot: 339 DB obyekti va 9 media; izolatsiyalangan restore: 45 jadval va 9/9 media
API, CRM, sayt va ikkala bot PM2’da online; public sayt, hisobot va CRM HTTP 200
3000/3001/3002 faqat 127.0.0.1da; payment mock/webhook 503, PBX kalitsiz 403, delivery 503 va DB o‘zgarmaydi
Barcha kod va hisobot commitlari Git remote branch’iga yuborildi
Ma’lumotlar qatlami
Prisma 5.22 dan 6.19.3 ga nazoratli yangilandi
Bajarildi
Prisma ORM va Client bir xil 6.19.3 versiyaga ko‘chirildi. Rasmiy breaking-change ro‘yxati schema va kod bo‘yicha tekshirildi, CLI konfiguratsiyasi alohida prisma.config.ts fayliga o‘tkazildi. Production DBga hech qanday noma’lum schema o‘zgarishi qo‘llanmadi.
Node 22.14 va TypeScript 5.6 Prisma 6 talablariga mos
Bytes field, eski NotFoundError, $use middleware va PostgreSQL implicit many-to-many bog‘liqligi topilmadi
Prisma Client 6.19.3 muvaffaqiyatli generatsiya qilindi, schema valid
Production bazadagi 15 migratsiya dolzarb va schema-diff natijasi “No difference detected”
230 ta backend testi, barcha production buildlar va 0-vulnerability audit o‘tdi
Prisma 7 ESM, yangi client output, PostgreSQL driver adapter va pool semantikasini bir vaqtda o‘zgartirgani uchun alohida arxitektura migratsiyasiga ajratildi
Integratsiyalar xavfsizligi
Delivery, PBX va to‘lov adapterlari rostgo‘y fail-closed holatga o‘tkazildi
Bajarildi
Shartnoma va tekshirilgan real adapter bo‘lmaguncha production endi soxta Yandex trek, “javob berildi” telefon yozuvi yoki soddalashtirilgan Payme/Click/Uzum webhook natijasini yaratmaydi. CRM integratsiya holatini ochiq ko‘rsatadi; ichki kuryer, qo‘lda tasdiqlangan qo‘ng‘iroq va naqd/terminal oqimlari ishlashda davom etadi.
DELIVERY_PROVIDER production’da disabled; mock faqat test/development muhitida mumkin
Yandex tokenining o‘zi real API chaqiruvisiz vazifani “yo‘lda” holatiga o‘tkaza olmaydi
Payme, Click va Uzum CRM’da saqlangan, “ulanmagan” deb ko‘rinadi va tanlab bo‘lmaydi
Soddalashtirilgan real payment invoice/webhook metodlari olib tashlanib, contract testgacha yopildi
PBX kaliti bot kalitidan alohida, kamida 32 belgili va faqat X-PBX-Key header orqali qabul qilinadi
PBX kaliti constant-time taqqoslanadi, webhooklar rate-limit bilan himoyalangan
ATS ulanmagan click-to-call endi soxta ANSWERED yozuvi yaratmaydi; qurilmaning raqam terish oynasini ochadi
Credential xavfsizligi
Production JWT va ichki servis kalitlari xavfsiz aylantirildi
Bajarildi
Deploydan keyingi qat’iy tekshiruv eski konfiguratsiyada developmentga xos kalit nomlanishi saqlanib qolganini aniqladi. Qiymatlar publik qilinmasdan kriptografik tasodifiy, alohida kalitlarga atomik almashtirildi; barcha servislar yangi konfiguratsiya bilan birga qayta yuklandi. Xavfsizlik uchun avvalgi CRM sessiyalari bekor bo‘ldi, login va parol esa o‘zgarmadi.
JWT va bot-service kaliti 48 kriptografik tasodifiy baytdan alohida yaratildi
Almashtirish vaqtinchalik fayl va atomik rename bilan, qiymatlarni terminalga chiqarmasdan bajarildi
Validator endi local/development/sample/test shablonlarini hamda bir xil ikki kalitni rad etadi
Faol API processi aynan yangilangan kalitlarni yuklagani qiymatlarni ko‘rsatmasdan tekshirildi
API, CRM, sayt va ikkala Telegram boti online; health va public sahifalar 200 holatda
Asosiy sayt va CMS
Sayt boyitildi, real media uchun xavfsiz CRM boshqaruvi qo‘shildi
Bajarildi
Bosh sahifaga xizmat yo‘nalishlari, parvarish tavsiyalari, qulay navigatsiya, real ish videosi bloki, SEO structured data va accessibility yaxshilanishlari qo‘shildi. CRM endi RU/UZ matnlarini, “oldin/keyin” juftligini, tartibini va jarayon videosini boshqaradi. Haqiqiy tasdiqlangan media bo‘lmasa, sayt mavjud grafikani rostgo‘y ravishda “illyustratsiya” deb belgilaydi.
Bosh sahifa 6 ta xizmat yo‘nalishi, 4 ta parvarish tavsiyasi va aniq CTA bilan to‘ldirildi
CRM’da ikki tilli sayt matnlari hamda galereya/video boshqaruvi yaratildi
Galereya rasmlari serverda ochilib tekshiriladi, EXIF/metama’lumotdan tozalanadi, 2000 px gacha kichraytiriladi va WebP formatiga o‘tkaziladi
Jarayon videosi faqat MP4/WebM byte-signature bilan, UUID nomida va 30 MB limitda qabul qilinadi
Buyurtmadagi “keyin” fotosini galereyaga chiqarish uchun haqiqiy “oldin” fotosi va mijozga ko‘rinadigan media talabi qo‘yildi
URL, xarita koordinatasi, lazy-loading, klaviatura skip-link, JSON-LD va ikki tilli alt/aria matnlari tekshirildi
222 ta backend testi, barcha production buildlar va dependency audit muvaffaqiyatli o‘tdi; auditda 0 ta zaiflik
Kutubxonalar xavfsizligi
Next.js va NestJS xavfsiz versiyalarga nazoratli yangilandi
Bajarildi
Sayt va CRM Next.js 15.5.20 ga, API esa NestJS 11.1.28 hamda Express 5 liniyasiga ko‘chirildi. Har bir breaking o‘zgarish kod darajasida moslashtirildi; framework, upload va transitive paketlar auditi nol zaiflikka tushirildi.
Boshlang‘ich npm audit: 29 ta yozuv; yakuniy audit: 0 ta
Next.js async route-param API’siga barcha public sahifalar moslashtirildi
NestJS peer-paketlari bitta 11.1.28 dependency grafigiga birlashtirildi
Multer 2.2 va Express 5 production liniyasi o‘rnatildi
JWT muddati qat’iy formatda tekshirilib, xavfsiz son qiymatiga aylantiriladi
216 ta backend testi va barcha to‘rtta ilova production build’i muvaffaqiyatli o‘tdi
Server chegaralari
Ichki servis portlari va production konfiguratsiyasi yopildi
Bajarildi
API, CRM va sayt endi faqat server loopback interfeysida ishlaydi; tashqi trafikning yagona yo‘li Nginx bo‘lib qoldi. PM2 root env’ni deterministik yuklaydi va production rejimini majburiy o‘rnatadi, backend esa xavfli konfiguratsiyada start olmaydi.
3000, 3001 va 3002 portlari faqat 127.0.0.1 manzilida tinglamoqda
Barcha besh PM2 servisida NODE_ENV=production tekshirildi
JWT va ichki servis kalitlaridagi development fallbacklar olib tashlandi
Production CORS faqat rasmiy HTTPS originlarga qisqartirildi
Public domen ichki stage media uchun 404, galereya uchun 200 qaytarmoqda
Nginx CSP/header va upload chegaralari Git’da tayyor; qo‘llash uchun server root ruxsati kerak
Backup va tiklash
DB va media uchun atomik backup hamda real restore-test joriy qilindi
Bajarildi
Kunlik systemd vazifasi PostgreSQL va lokal media fayllarini bitta versiyalangan snapshotga yig‘adi, SHA-256 bilan tekshiradi va daily/weekly/monthly retention qoidasini qo‘llaydi. Haftalik test nusxani alohida vaqtinchalik DB va katalogga tiklaydi.
Real snapshotda 339 ta DB obyekti va 11 ta media fayl saqlandi
Izolatsiyalangan sinovda 45 ta jadval va barcha 11 ta media muvaffaqiyatli tiklandi
Backup va restore systemd service’lari exit-code 0 bilan qayta tekshirildi
Bir vaqtda ikki backup ishlashini bloklovchi lock va atomik staging qo‘shildi
Offsite nusxa to‘liq credential bo‘lmasa ishlamaydi; tayyor oqim AES-256 bilan shifrlaydi va qayta ochib tekshiradi
Kirish xavfsizligi
Tizim egasining SUPERADMIN kirishi xavfsiz tiklandi
Bajarildi
Tizim egasining tasdig‘i bilan yagona faol SUPERADMIN hisobiga yangi kuchli vaqtinchalik parol o‘rnatildi. Maxfiy credential hisobotga yoki kodga kiritilmadi.
Reset faqat aniq topilgan bitta faol SUPERADMIN hisobiga qo‘llandi
Amal server audit-log’iga sirlarni kiritmasdan yozildi
Yangi credential real login API orqali muvaffaqiyatli tekshirildi
Media xavfsizligi
Barcha fayl yuklash oqimlari yagona xavfsiz qoidaga o‘tkazildi
Bajarildi
Bosqich, mijoz, galereya, Telegram va qo‘ng‘iroq mediafayllari endi foydalanuvchi yuborgan nom yoki MIME’ga ishonmaydi. Server fayl turini mazmuni bo‘yicha tekshiradi, xavfsiz UUID nom beradi va qat’iy hajm limitini qo‘llaydi.
Rasmlar faqat JPEG, PNG yoki WebP byte-signature bilan qabul qilinadi
Bosqich fotosini faqat biriktirilgan usta yoki administrator yuklay oladi
Audio faqat MP3, WAV, OGG yoki M4A sifatida tekshirilib saqlanadi
PBX yozuvlari faqat alohida ruxsat etilgan HTTPS hostdan, redirectsiz va 50 MB gacha olinadi
Telegram hujjatlari bajarilmaydigan binar formatda, asl nomi esa faqat xavfsiz ko‘rsatish uchun saqlanadi
Mavjud media ombori tekshirildi: fayl turlari kutilgan formatlarga mos
Keyingi bosqich
Backup va tiklash tizimini kuchaytirish
Jarayonda
Lokal DB+media snapshot, retention va real restore-test yakunlandi. Qolgan yagona qism — tashqi S3 endpoint, bucket, access key va alohida shifrlash paroli berilgach AES-256 offsite nusxani faollashtirish.
DB va media bitta atomik backup sikliga kiritildi
Kunlik/haftalik/oylik retention ishlamoqda
Test tiklash production ma’lumotlarini buzmasdan bajarildi
Tashqi storage credentiallari serverda hozircha mavjud emas
Server xavfsizligi
Portlar, security-header va production konfiguratsiyasini qat’iylashtirish
Jarayonda
Loopback portlar, qat’iy production env-validatsiya va public media chegarasi production’da ishlamoqda. Nginx CSP va qo‘shimcha header konfiguratsiyasi tayyor, lekin `/etc/nginx`ga qo‘llash uchun root ruxsati talab qilinadi.
Port va firewall holati qayta tekshirildi
API, CRM va sayt loopback’ka ko‘chirildi va smoke-testdan o‘tdi
Nginx konfiguratsiyasi Git rollback bilan tayyorlandi
Qolgan ish: root orqali o‘rnatish, nginx -t, reload va header smoke-test
Texnik qarz
Framework va kutubxonalarni nazoratli yangilash
Bajarildi
Next.js, NestJS, Express, Multer va transitive paketlar xavfsiz liniyalarga yangilandi; Prisma 6.19.3 migratsiyasi ham schema-diff bilan yakunlandi. Auditda zaiflik qolmadi. Prisma 7 esa ESM va driver-adapter arxitektura o‘zgarishi sabab xavfsiz alohida siklga ajratildi.
29 ta audit yozuvi 0 tagacha kamaytirildi
Next.js va NestJS migratsiyasi test/build bilan yakunlandi
Prisma 6.19.3 migratsiyasi 15 ta dolzarb migration va nol schema-diff bilan yakunlandi
Prisma 7 uchun xavfsiz arxitektura migratsiya chegarasi hujjatlashtirildi
Asosiy sayt
Restoria.uz saytini to‘ldirish, boyitish va qulaylashtirish
Jarayonda
Saytning kontent, UX, SEO va CMS bazasi yakunlandi. Galereya hamda video uchun xavfsiz texnik oqim tayyor; qolgan kontent bosqichi — mijoz roziligi olingan haqiqiy “oldin/keyin” foto va jarayon videolarini CRM orqali yuklash.
Xizmatlar, narx, muddat, parvarish, Telegram/telefon CTA va kuzatish yo‘li boyitildi
CRM orqali RU/UZ kontent, WebP galereya, video poster va jarayon videosini boshqarish tayyor
SEO structured data, lazy-loading va asosiy accessibility talablari tekshirildi
Qolgan ish: egasi tasdiqlagan real media fayllarini tavsif va kategoriya bilan yuklash
Integratsiyalar
Real to‘lov providerlari va PBX’ni shartnoma asosida ulash
Jarayonda
Production fail-closed himoyasi yakunlandi: ulanmagan Payme, Click, Uzum, Yandex Delivery va PBX soxta natija bermaydi. Qolgan tashqi bosqich — tanlangan providerlar bilan shartnoma, rasmiy credential, sandbox va imzo/idempotency contract-testlari.
Ulanmagan providerlar CRM’da ko‘rinadi, lekin tanlab bo‘lmaydi
Payment, delivery va PBX production mock/fallback oqimlari yopildi
Qolgan ish: rasmiy provider credentiallari va sandbox contract-testlari
Ma’lumotlarni himoyalash
Realtime kanal va public API chegaralari himoyalandi
Bajarildi
CRM WebSocket ulanishi JWT, faol hisob va individual ruxsatlar bo‘yicha tekshiriladi. Hodisalar faqat tegishli permission-room’larga yuboriladi. Public matn endpointi esa faqat saytga zarur org maydonlarini qaytaradi.
Tokensiz WebSocket ulanish hodisalarni qabul qilmaydi
Qo‘ng‘iroq hodisasi faqat mijozlarni ko‘rish huquqiga ega rollarga boradi
AI va kanal sozlamalari public texts javobidan chiqarildi
Demo sharhlar va ichki review maydonlari public javobdan chiqarildi
Telegram xavfsizligi
Bot identifikatsiyasi va media oqimi himoyalandi
Bajarildi
Mijoz va xodim botlari endi faqat foydalanuvchining o‘z Telegram kontakti orqali bog‘lanadi. Begona profilga bog‘langan hisob yashirincha almashtirilmaydi. Suratlar Telegram tokenli URL sifatida saqlanmaydi — avval tekshirilib Restoria storage’iga ko‘chiriladi.
Kontakt egasi Telegram user ID bo‘yicha tekshiriladi
Xodim daromadi endpointiga servis kaliti tekshiruvi qo‘shildi
Vazifa va kuryer nuqtalari aynan biriktirilgan ijrochiga tegishliligi tekshiriladi
Ko‘p bosqichli ishni majburiy fotosiz bot orqali yopish bloklandi
Rasm turi fayl nomi emas, haqiqiy byte-signature orqali aniqlanadi
To‘lov xavfsizligi
Production’dagi test onlayn to‘lovlar yopildi
Bajarildi
Mock havola va imzosi tekshirilmagan provider webhook’lari endi production bazasida to‘lovni tasdiqlay olmaydi. Real Payme/Click adapterlari to‘liq imzo va tranzaksiya testlaridan o‘tmaguncha tizim fail-closed holatda qoladi.
Production PAYMENT_PROVIDER disabled holatiga o‘tkazildi
Mock rejim faqat non-production muhitida ishlaydi
CRM’da providerlar “ulanmagan” deb ko‘rinadi va tanlash bloklangan; Telegram bot havola bermaydi
Saytdagi Payme/Click haqidagi nomuvofiq va’dalar olib tashlandi
Kirish xavfsizligi
Ochiq demo-administrator kirishi yopildi
Bajarildi
CRM login sahifasidan tayyor telefon va parol olib tashlandi. Ommaga ma’lum bo‘lgan eski hisob bloklandi, uning eski sessiyalari yaroqsiz qilindi va paroli qayta ishlatib bo‘lmaydigan qiymatga almashtirildi.
Bloklashdan oldin boshqa faol SUPERADMIN mavjudligi tekshirildi
Eski demo login API darajasida 401 javob qaytarmoqda
Seed va test skriptlaridan production credentiallari olib tashlandi
Amal server audit-log’iga yozildi
Shaffoflik
Doimiy rivojlantirish hisoboti yaratildi
Bajarildi
Sayt, CRM va integratsiyalarda bajarilgan xavfsiz o‘zgarishlar qadam-baqadam saqlanadigan ikki tilli ochiq jurnal joriy qilindi.
Hisobot manbasi Git tarixida saqlanadi
Sahifa RU va UZ tillarida ishlaydi
Sirlar va ekspluatatsiya tafsilotlari publik qilinmaydi
Xavfsiz boshlanish
Nazoratli o‘zgartirish jarayoni boshlandi
Bajarildi
Tekshirilmagan kodni avtomatik yuboruvchi jarayon to‘xtatildi. O‘zgarishlardan oldin ma’lumotlar bazasi va lokal media snapshotlari olindi, alohida ish branch’i yaratildi.
Production servislar ishlashda davom etdi
DB backup muvaffaqiyatli yaratildi
Media snapshot checksum bilan tekshirildi
Audit
Sayt va CRM tizimi to‘liq read-only tekshirildi
Bajarildi
Arxitektura, API, buyurtma konveyeri, botlar, to‘lovlar, marshrutlar, backup, SEO va server konfiguratsiyasi tekshirildi. Tuzatishlar xavf darajasi bo‘yicha rejalashtirildi.