Давайте создадим проект на основе вашего SQL-кода. Мы будем использовать NestJS для создания API, Prisma для работы с базой данных и Docker для контейнеризации приложения.
Шаг 1: Инициализация проекта NestJS
- Установите NestJS CLI:bash
npm i -g @nestjs/cli
- Создайте новый проект:bash
nest new tovar-api
- Перейдите в папку проекта:bash
cd tovar-api
Шаг 2: Установка Prisma
- Установите Prisma и необходимые зависимости:bash
npm install prisma @prisma/client
- Инициализируйте Prisma:bash
npx prisma init
Это создаст папкуprisma
с файломschema.prisma
.
Шаг 3: Настройка базы данных
- В файле
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 }
- Создайте файл
.env
в корне проекта и добавьте строку подключения к базе данных:javascriptDATABASE_URL="mysql://user:password@localhost:3306/tovar_db"
- Выполните миграцию для создания таблиц:bash
npx prisma migrate dev --name init
Шаг 4: Создание модулей и сервисов в NestJS
- Создайте модуль
tovar
:bashnest generate module tovar nest generate service tovar nest generate controller tovar
- В сервисе
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 }); } }
- В контроллере
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
- Создайте файл
Dockerfile
:dockerfileFROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build CMD ["npm", "run", "start:prod"]
- Создайте файл
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"
- Запустите Docker:bash
docker-compose up --build
Шаг 6: Тестирование API
- GET /tovar: Получить список всех товаров.
- POST /tovar: Добавить новый товар. Пример тела запроса:json
{ "Tovar": "Молоко", "Edizm": "л", "Zena": 50 }
Теперь у вас есть готовый проект на NestJS с использованием Docker и Prisma для работы с таблицами!