Создание бэкенда для базы данных авиаперелетов с использованием NestJS и Prisma
Шаг 1: Установка зависимостей
Для начала создадим проект и установим необходимые зависимости:
bash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # Создаем новый проект 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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
1 | npx prisma migrate dev --name init |
Шаг 3: Настройка Prisma в проекте NestJS
Создадим модуль Prisma для подключения к базе данных.
- Создайте файл
src/prisma/prisma.module.ts
:
typescript
1 2 3 4 5 6 7 8 9 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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
1 2 3 | nest generate module flight nest generate service flight nest generate controller flight |
- Настройте сервис
src/flight/flight.service.ts
:
typescript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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
1 2 3 4 5 6 7 8 | 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
1 | npm run start:dev |
Теперь вы можете тестировать API через Postman или другой инструмент. Примеры запросов:
GET /flights
— получить список всех перелетов.GET /flights/:id
— получить информацию о конкретном перелете.POST /flights
— создать новый перелет.PUT /flights/:id
— обновить данные перелета.DELETE /flights/:id
— удалить перелет.
Поздравляю! Вы создали бэкенд для управления авиаперелетами с использованием NestJS и Prisma.