Bu NBT ilovasi uchun backend xizmati. Loyiha NestJS frameworki asosida qurilgan bo'lib, ma'lumotlar bazasi uchun PostgreSQL bilan TypeORM, kesh va navbatlar (queues) uchun Redis, hamda autentifikatsiya uchun JWT (JSON Web Tokens) texnologiyalaridan foydalanadi.
Loyihani ishga tushirish uchun quyidagi vositalar o'rnatilgan bo'lishi kerak:
v22.x yoki undan yuqoriv10.x yoki undan yuqoriv14.x yoki undan yuqoriv7.x yoki undan yuqoriLoyiha repozitoriysini kompyuteringizga yuklab oling:
Example :git clone <your-repository-url>
cd nbt-backendKerakli kutubxonalarni npm yordamida o'rnating:
npm installO'zgarishlarni avtomatik kuzatib boruvchi rejimda ishga tushirish uchun:
Example :npm run start:devIlova standart 3000-portda ishga tushadi.
Production uchun optimallashtirilgan holda ishga tushirish uchun:
Example :# 1. Loyihani build qilish
npm run build
# 2. Ishga tushirish
npm run start:prodLoyiha NestJS'ning modulli arxitekturasiga asoslangan. Har bir funksional qism alohida modulda joylashgan.
UsersModule, AuthModule) guruhlaydi. Har bir modul o'zining Controller, Service va boshqa komponentlariga ega.class-validator yordamida ularni avtomatik validatsiyadan o'tkazadi.TypeORM yordamida ma'lumotlar bazasi bilan ishlash uchun ishlatiladi. Har bir Entity uchun alohida Repository yaratilgan.Loyiha standart CRUD amallarini Service va Controller orqali amalga oshiradi. Misol uchun, Users moduli:
POST /users: CreateUserDto orqali yangi foydalanuvchi yaratadi.GET /users: Barcha foydalanuvchilar ro'yxatini qaytaradi.GET /users/:id: ID orqali bitta foydalanuvchini topadi.PATCH /users/:id: UpdateUserDto orqali foydalanuvchi ma'lumotlarini yangilaydi.DELETE /users/:id: Foydalanuvchini o'chiradi.passport-jwt strategiyasi yordamida amalga oshiriladi. Foydalanuvchi login qilganda, unga access_token beriladi.Guards (himoyachilar) yordamida amalga oshiriladi. Masalan, @UseGuards(JwtAuthGuard) dekoratori orqali faqat autentifikatsiyadan o'tgan foydalanuvchilarga ruxsat beriladi.Swagger orqali to'liq API hujjatlari mavjud. Ilovani ishga tushirgandan so'ng, quyidagi manzilga o'ting:
http://localhost:3000/api
| Method | URL | Tavsif | Body (namuna) |
|---|---|---|---|
POST |
/users |
Yangi foydalanuvchi yaratish | { "name": "John", "email": "a@b.com" } |
GET |
/users |
Barcha foydalanuvchilar ro'yxati | - |
GET |
/users/{id} |
ID orqali bitta foydalanuvchini olish | - |
PATCH |
/users/{id} |
Foydalanuvchi ma'lumotlarini yangilash | { "name": "John Doe" } |
DELETE |
/users/{id} |
Foydalanuvchini o'chirish | - |
.env konfiguratsiyaLoyiha sozlamalari .env fayli orqali boshqariladi. Ishni boshlashdan oldin .env.example faylidan nusxa oling va o'zingizning sozlamalaringizni kiriting.
cp .env.example .envAsosiy o'zgaruvchilar:
Example :# Ilova sozlamalari
NODE_ENV=development
PORT=3000
# Ma'lumotlar bazasi (PostgreSQL)
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=your_password
DB_DATABASE=nbt_db
# JWT (JSON Web Token)
JWT_SECRET=your_super_secret_key
JWT_EXPIRES_IN=3600s
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
# Firebase (agar ishlatilsa)
FIREBASE_PROJECT_ID=...
FIREBASE_PRIVATE_KEY=...
FIREBASE_CLIENT_EMAIL=...Ilovada xavfsizlikni ta'minlash uchun bir necha mexanizmlar qo'llanilgan:
ValidationPipe: Barcha kiruvchi so'rovlarning body qismini DTO'larga asosan avtomatik validatsiyadan o'tkazadi. Agar ma'lumotlar noto'g'ri bo'lsa, 400 Bad Request xatoligini qaytaradi.Guards: Endpointlarga kirishni nazorat qiladi. Masalan, JwtAuthGuard faqat tokeni bor foydalanuvchilarga ruxsat beradi. RolesGuard esa ma'lum bir rolga ega bo'lganlarga ruxsat beradi.Interceptors: So'rovlar va javoblarni o'zgartirish yoki log qilish uchun ishlatiladi. Masalan, javoblarni standart formatga keltirish uchun.Exception Filters: Ilovada yuzaga kelgan xatoliklarni ushlab, ularni chiroyli va tushunarli formatda foydalanuvchiga qaytaradi.Loyiha testlari Jest yordamida yozilgan.
Example :# Barcha unit testlarni ishga tushirish
npm run test
# Testlarni watch rejimida ishga tushirish
npm run test:watch
# Test qamrovini (coverage) hisoblash
npm run test:cov
# End-to-end (E2E) testlarni ishga tushirish
npm run test:e2eMa'lumotlar bazasi sxemasini boshqarish uchun migratsiyalardan foydalaniladi.
Example :# Entity o'zgarishlaridan yangi migratsiya yaratish
npm run migration:generate -- -n <MigrationName>
# Barcha bajarilmagan migratsiyalarni ishga tushirish
npm run migration:run
# Oxirgi migratsiyani bekor qilish
npm run migration:revertMa'lumotlar bazasini boshlang'ich ma'lumotlar bilan to'ldirish uchun:
Example :npm run seed-user
npm run seed-error
npm run seed-ppeLoyihani production serverga joylashtirish uchun ikki xil usul tavsiya etiladi:
Loyiha ildiz papkasida Dockerfile va docker-compose.yml fayllarini yarating.
Dockerfile misoli:
# Stage 1: Build the application
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Stage 2: Create the production image
FROM node:22-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./
EXPOSE 3000
CMD ["node", "dist/main"]docker-compose.yml misoli:
version: '3.8'
services:
nbt-backend:
build: .
ports:
- '3000:3000'
env_file:
- .env
depends_on:
- postgres
- redis
postgres:
image: postgres:14
environment:
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_DATABASE}
ports:
- '5432:5432'
redis:
image: redis:7-alpine
ports:
- '6379:6379'Ishga tushirish:
Example :docker-compose up --buildPM2 - bu Node.js ilovalarini boshqarish uchun mo'ljallangan production process manager.
Example :# 1. PM2'ni global o'rnatish
npm install pm2 -g
# 2. Loyihani build qilish
npm run build
# 3. Ilovani PM2 orqali ishga tushirish
pm2 start dist/main.js --name nbt-backend