Построй бэкенд для доступа к базе данных авиаперелеты с использование nodejs фреймворка nestjs и prisma, создай схему данных и подключи APi к таблицам базы данных

Создание бэкенда для базы данных авиаперелетов с использованием 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 для подключения к базе данных.

  1. Создайте файл 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 {}

  1. Создайте файл 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: Создание модуля для работы с авиаперелетами

  1. Создайте модуль Flight:

bash

nest generate module flight
nest generate service flight
nest generate controller flight

  1. Настройте сервис 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 } });
  }
}

  1. Настройте контроллер 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.