Создание бэкенда для базы данных авиаперелетов с использованием NestJS и Prisma
Шаг 1: Установка зависимостей
Для начала создадим проект и установим необходимые зависимости:
bash
# Создаем новый проект NestJS
nest new flight-api
# Переходим в папку проекта
cd flight-api
# Устанавливаем Prisma и клиент базы данных (например, PostgreSQL)
npm install prisma @prisma/client
# Устанавливаем NestJS модуль для работы с Prisma
npm install @nestjs/prisma
# Инициализируем Prisma
npx prisma init
Шаг 2: Настройка базы данных
В файле prisma/schema.prisma
опишем схему данных для авиаперелетов:
prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL") // Убедитесь, что переменная окружения DATABASE_URL настроена
}
model Flight {
id Int @id @default(autoincrement())
flightNumber String @unique
departure String
destination String
departureTime DateTime
arrivalTime DateTime
price Float
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
После этого применим миграции для создания таблицы в базе данных:
bash
npx prisma migrate dev --name init
Шаг 3: Настройка Prisma в проекте NestJS
Создадим модуль Prisma для подключения к базе данных.
- Создайте файл
src/prisma/prisma.module.ts
:
typescript
import { Global, Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';
@Global()
@Module({
providers: [PrismaService],
exports: [PrismaService],
})
export class PrismaModule {}
- Создайте файл
src/prisma/prisma.service.ts
:
typescript
import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
async onModuleInit() {
await this.$connect();
}
async onModuleDestroy() {
await this.$disconnect();
}
}
Шаг 4: Создание модуля для работы с авиаперелетами
- Создайте модуль
Flight
:
bash
nest generate module flight
nest generate service flight
nest generate controller flight
- Настройте сервис
src/flight/flight.service.ts
:
typescript
import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';
import { Flight } from '@prisma/client';
@Injectable()
export class FlightService {
constructor(private prisma: PrismaService) {}
async getAllFlights(): Promise<Flight[]> {
return this.prisma.flight.findMany();
}
async getFlightById(id: number): Promise<Flight | null> {
return this.prisma.flight.findUnique({ where: { id } });
}
async createFlight(data: Omit<Flight, 'id' | 'createdAt' | 'updatedAt'>): Promise<Flight> {
return this.prisma.flight.create({ data });
}
async updateFlight(id: number, data: Partial<Flight>): Promise<Flight> {
return this.prisma.flight.update({ where: { id }, data });
}
async deleteFlight(id: number): Promise<Flight> {
return this.prisma.flight.delete({ where: { id } });
}
}
- Настройте контроллер
src/flight/flight.controller.ts
:
typescript
import { Controller, Get, Post, Put, Delete, Param, Body } from '@nestjs/common';
import { FlightService } from './flight.service';
import { Flight } from '@prisma/client';
@Controller('flights')
export class FlightController {
constructor(private flightService: FlightService) {}
@Get()
async getAllFlights(): Promise<Flight[]> {
return this.flightService.getAllFlights();
}
@Get(':id')
async getFlightById(@Param('id') id: string): Promise<Flight | null> {
return this.flightService.getFlightById(Number(id));
}
@Post()
async createFlight(@Body() data: Omit<Flight, 'id' | 'createdAt' | 'updatedAt'>): Promise<Flight> {
return this.flightService.createFlight(data);
}
@Put(':id')
async updateFlight(@Param('id') id: string, @Body() data: Partial<Flight>): Promise<Flight> {
return this.flightService.updateFlight(Number(id), data);
}
@Delete(':id')
async deleteFlight(@Param('id') id: string): Promise<Flight> {
return this.flightService.deleteFlight(Number(id));
}
}
Шаг 5: Подключение модуля в приложении
В файле src/app.module.ts
подключите модули:
typescript
import { Module } from '@nestjs/common';
import { PrismaModule } from './prisma/prisma.module';
import { FlightModule } from './flight/flight.module';
@Module({
imports: [PrismaModule, FlightModule],
})
export class AppModule {}
Шаг 6: Тестирование API
Запустите сервер:
bash
npm run start:dev
Теперь вы можете тестировать API через Postman или другой инструмент. Примеры запросов:
GET /flights
— получить список всех перелетов.GET /flights/:id
— получить информацию о конкретном перелете.POST /flights
— создать новый перелет.PUT /flights/:id
— обновить данные перелета.DELETE /flights/:id
— удалить перелет.
Поздравляю! Вы создали бэкенд для управления авиаперелетами с использованием NestJS и Prisma.