nbt-backend

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.

Talablar

Loyihani ishga tushirish uchun quyidagi vositalar o'rnatilgan bo'lishi kerak:

  • Node.js: v22.x yoki undan yuqori
  • NPM: v10.x yoki undan yuqori
  • PostgreSQL: v14.x yoki undan yuqori
  • Redis: v7.x yoki undan yuqori
  • Docker (ixtiyoriy, deployment uchun)

O'rnatish

  1. Loyiha repozitoriysini kompyuteringizga yuklab oling:

    Example :
    git clone <your-repository-url>
    cd nbt-backend
  2. Kerakli kutubxonalarni npm yordamida o'rnating:

    Example :
    npm install

Loyihani ishga tushirish

Development (ishlab chiqish) rejimi

O'zgarishlarni avtomatik kuzatib boruvchi rejimda ishga tushirish uchun:

Example :
npm run start:dev

Ilova standart 3000-portda ishga tushadi.

Production (ishlab chiqarish) rejimi

Production uchun optimallashtirilgan holda ishga tushirish uchun:

Example :
# 1. Loyihani build qilish
npm run build

# 2. Ishga tushirish
npm run start:prod

Loyihaning arxitekturasi

Loyiha NestJS'ning modulli arxitekturasiga asoslangan. Har bir funksional qism alohida modulda joylashgan.

  • Module: Ilovaning ma'lum bir qismini (masalan, UsersModule, AuthModule) guruhlaydi. Har bir modul o'zining Controller, Service va boshqa komponentlariga ega.
  • Controller: Kiruvchi HTTP so'rovlarni qabul qiladi, ularni qayta ishlaydi va javob qaytaradi. Biznes logika bu yerda bo'lmasligi kerak.
  • Service: Asosiy biznes logika joylashgan qism. Ma'lumotlar bazasi bilan ishlash, murakkab hisob-kitoblar va boshqa amallar shu yerda bajariladi.
  • DTO (Data Transfer Object): Kiruvchi ma'lumotlar strukturasini belgilaydi va class-validator yordamida ularni avtomatik validatsiyadan o'tkazadi.
  • Repository Pattern: TypeORM yordamida ma'lumotlar bazasi bilan ishlash uchun ishlatiladi. Har bir Entity uchun alohida Repository yaratilgan.

Muhim funksiyalar izohi

CRUD (Create, Read, Update, Delete) amallari

Loyiha standart CRUD amallarini Service va Controller orqali amalga oshiradi. Misol uchun, Users moduli:

  1. POST /users: CreateUserDto orqali yangi foydalanuvchi yaratadi.
  2. GET /users: Barcha foydalanuvchilar ro'yxatini qaytaradi.
  3. GET /users/:id: ID orqali bitta foydalanuvchini topadi.
  4. PATCH /users/:id: UpdateUserDto orqali foydalanuvchi ma'lumotlarini yangilaydi.
  5. DELETE /users/:id: Foydalanuvchini o'chiradi.

Autentifikatsiya va Avtorizatsiya

  • Autentifikatsiya: passport-jwt strategiyasi yordamida amalga oshiriladi. Foydalanuvchi login qilganda, unga access_token beriladi.
  • Avtorizatsiya: Guards (himoyachilar) yordamida amalga oshiriladi. Masalan, @UseGuards(JwtAuthGuard) dekoratori orqali faqat autentifikatsiyadan o'tgan foydalanuvchilarga ruxsat beriladi.

API endpointlar

Swagger orqali to'liq API hujjatlari mavjud. Ilovani ishga tushirgandan so'ng, quyidagi manzilga o'ting:

http://localhost:3000/api

Foydalanuvchilar (Users) uchun namunaviy endpointlar:

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 konfiguratsiya

Loyiha sozlamalari .env fayli orqali boshqariladi. Ishni boshlashdan oldin .env.example faylidan nusxa oling va o'zingizning sozlamalaringizni kiriting.

Example :
cp .env.example .env

Asosiy 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=...

Xavfsizlik

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.

Foydalanilgan texnologiyalar

  • Framework: NestJS
  • Til: TypeScript
  • Ma'lumotlar bazasi: PostgreSQL
  • ORM: TypeORM
  • Kesh/Navbat: Redis, BullMQ
  • Autentifikatsiya: Passport.js (JWT)
  • Validatsiya: class-validator, class-transformer
  • API Hujjatlari: Swagger
  • Logging: Winston
  • Boshqalar: Firebase Admin, ExcelJS, Puppeteer

Testlash

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:e2e

Ma'lumotlar bazasi (TypeORM)

Migratsiyalar

Ma'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:revert

Ma'lumotlar ekish (Seeding)

Ma'lumotlar bazasini boshlang'ich ma'lumotlar bilan to'ldirish uchun:

Example :
npm run seed-user
npm run seed-error
npm run seed-ppe

Deployment

Loyihani production serverga joylashtirish uchun ikki xil usul tavsiya etiladi:

1. Docker orqali

Loyiha ildiz papkasida Dockerfile va docker-compose.yml fayllarini yarating.

Dockerfile misoli:

Example :
# 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:

Example :
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 --build

2. PM2 orqali

PM2 - 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

results matching ""

    No results matching ""