Falaq — audio va elektron kitoblar
Backend, veb-sayt va admin panel · mobil ilova boshqa jamoa a’zosida
Kitobni bir marta sotib olib, uni onlayn tinglash va o‘qish, hamda internetsiz ishlatish mumkin bo‘lgan platforma. Asosiy muhandislik vazifasi — kontentni himoyalash: fayllar shifrlangan, kalit qurilmaga bog‘langan.
- NestJS 11
- TypeORM
- PostgreSQL
- Redis · BullMQ
- Cloudflare R2
- Next.js
- React
Muammo
Nashriyot audio va elektron kitoblarni sotmoqchi, lekin bitta shart bilan: sotib olingan kitob internetsiz ham ishlashi kerak, va shu bilan birga fayl ko‘chirib tarqatilmasligi kerak. Bu ikki talab bir-biriga zid: fayl qurilmada bo‘lishi kerak, lekin undan foydalanib bo‘lmasligi kerak.
Mening rolim
Backend (NestJS, modulli monolit), mijozlar uchun veb-sayt va admin panelni qildim. Mobil ilova (Flutter) boshqa jamoa a’zosi tomonidan qilingan — men unga API va integratsiya hujjatlarini tayyorladim.
Imkoniyatlar
Kontent va himoya
- Har bir fayl uchun alohida tasodifiy kalit (DEK), fayl AES-256-CTR bilan shifrlanadi — audio’ni surish va HTTP Range uchun
- Kalitlar master kalit (KEK) bilan AES-256-GCM da o‘raladi; bazada faqat o‘ralgan kalit turadi
- Omborda (R2) hech qachon ochiq fayl turmaydi — hatto bepul namuna ham shifrlangan
- Katta fayllar brauzerdan to‘g‘ridan-to‘g‘ri R2 ga yuklanadi (presigned PUT), shifrlash navbatda
Kirish va litsenziya
- Bir martalik xarid: bitta xarid kitobning audio va elektron variantini ochadi
- Oflayn litsenziya 30 kun amal qiladi, keyin internetga ulanib yangilanadi
- Qurilmalar ro‘yxati va nazorati
- Telefon OTP (Eskiz SMS) + Google / Apple OAuth, JWT rotatsiyasi bilan
Platforma
- Katalog, kutubxona, sharh va reyting, bildirishnomalar, obunalar
- 4 tilli API: o‘zbek (lotin va kirill), rus, ingliz
- Admin panel: kitoblar, nashrlar, fayllar yuklash, foydalanuvchilar
Arxitektura
Muhim muhandislik qarorlari
Envelope encryption
Har fayl o‘z kaliti bilan shifrlanadi, kalitlar esa master kalit bilan o‘raladi. Master kalitni almashtirish kerak bo‘lsa, 500 MB li fayllarni qayta shifrlash shart emas — faqat kichik kalitlar qayta o‘raladi. Har faylning alohida kaliti tufayli bepul namuna kaliti pullik kontentni ochmaydi.
CTR rejimi — audio uchun
Kontent AES-CTR bilan shifrlangan: bu faylning istalgan joyidan o‘qish imkonini beradi. Foydalanuvchi audio’ni o‘rtasiga sursa, butun faylni ochish shart emas.
Fayllar API dan o‘tmaydi
Yuklash ham, yuklab olish ham presigned URL orqali to‘g‘ridan-to‘g‘ri R2 bilan. Server faqat kalitlar va ruxsatlar bilan ishlaydi — katta fayllar uning xotirasini band qilmaydi. R2 tanlovi ham shu bilan bog‘liq: chiqish trafigi bepul.
Muddatli oflayn litsenziya
Oflayn kalit 30 kunlik. Obuna yoki huquq tugasa, qurilma keyingi ulanishda kalitni yangilay olmaydi — fayl o‘chirilmasa ham foydasiz bo‘ladi.