Создание сайта на NestJS с использованием Docker, Prisma и API для работы с таблицами

Давайте создадим проект на основе вашего SQL-кода. Мы будем использовать NestJS для создания API, Prisma для работы с базой данных и Docker для контейнеризации приложения.


Шаг 1: Инициализация проекта NestJS

  1. Установите NestJS CLI:bashnpm i -g @nestjs/cli
  2. Создайте новый проект:bashnest new tovar-api
  3. Перейдите в папку проекта:bashcd tovar-api

Шаг 2: Установка Prisma

  1. Установите Prisma и необходимые зависимости:bashnpm install prisma @prisma/client
  2. Инициализируйте Prisma:bashnpx prisma init Это создаст папку prisma с файлом schema.prisma.

Шаг 3: Настройка базы данных

  1. В файле prisma/schema.prisma настройте подключение к MySQL:prismadatasource db { provider = "mysql" url = env("DATABASE_URL") } generator client { provider = "prisma-client-js" } model Tovar { IdTovar Int @id @default(autoincrement()) Tovar String @db.VarChar(50) Edizm String @db.VarChar(10) Zena Int } model Postav { IdPostav Int @id @default(autoincrement()) Postav String @db.VarChar(50) Gorod String @db.VarChar(20) Ulica String @db.VarChar(20) Telef String @db.VarChar(15) } model Prihod { IdPrihod Int @id @default(autoincrement()) IdTovar Int DatPrih DateTime Kolvo Int IdPostav Int }
  2. Создайте файл .env в корне проекта и добавьте строку подключения к базе данных:javascriptDATABASE_URL="mysql://user:password@localhost:3306/tovar_db"
  3. Выполните миграцию для создания таблиц:bashnpx prisma migrate dev --name init

Шаг 4: Создание модулей и сервисов в NestJS

  1. Создайте модуль tovar:bashnest generate module tovar nest generate service tovar nest generate controller tovar
  2. В сервисе tovar.service.ts добавьте методы для работы с таблицей Tovar:typescriptimport { Injectable } from '@nestjs/common'; import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); @Injectable() export class TovarService { async getAllTovars() { return prisma.tovar.findMany(); } async createTovar(data: { Tovar: string; Edizm: string; Zena: number }) { return prisma.tovar.create({ data }); } }
  3. В контроллере tovar.controller.ts настройте маршруты:typescriptimport { Controller, Get, Post, Body } from '@nestjs/common'; import { TovarService } from './tovar.service'; @Controller('tovar') export class TovarController { constructor(private readonly tovarService: TovarService) {} @Get() async getAllTovars() { return this.tovarService.getAllTovars(); } @Post() async createTovar(@Body() body: { Tovar: string; Edizm: string; Zena: number }) { return this.tovarService.createTovar(body); } }

Шаг 5: Настройка Docker

  1. Создайте файл Dockerfile:dockerfileFROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build CMD ["npm", "run", "start:prod"]
  2. Создайте файл docker-compose.yml:yamlversion: '3.8' services: app: build: . ports: - "3000:3000" environment: DATABASE_URL: "mysql://user:password@db:3306/tovar_db" depends_on: - db db: image: mysql:8 restart: always environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: tovar_db ports: - "3306:3306"
  3. Запустите Docker:bashdocker-compose up --build

Шаг 6: Тестирование API

  • GET /tovar: Получить список всех товаров.
  • POST /tovar: Добавить новый товар. Пример тела запроса:json{ "Tovar": "Молоко", "Edizm": "л", "Zena": 50 }

Теперь у вас есть готовый проект на NestJS с использованием Docker и Prisma для работы с таблицами!