Для настройки иерархии категорий с использованием NestJS, Prisma и PostgreSQL, следует выполнить следующие шаги:
1. Установить NestJS и необходимые зависимости:
```bash
npm i @nestjs/core @nestjs/common @nestjs/platform-express @nestjs/config @nestjs/typeorm @nestjs/typeorm @nestjs/swagger class-transformer class-validator prisma @prisma/client
```
2. Создать сущность `Category` в Prisma. Для этого нужно создать файл `category.model.ts` со следующим содержимым:
```typescript
import { Prisma } from '@prisma/client';
export class Category implements Prisma.CategoryUncheckedCreateInput {
name: string;
parentCategoryId?: number;
}
```
3. Создать DTO `CreateCategoryDto`. Этот класс будет использоваться для валидации данных при создании категории. Создайте файл `create-category.dto.ts` и определите его как показано ниже:
```typescript
import { IsNotEmpty, IsOptional, IsPositive, IsString } from 'class-validator';
export class CreateCategoryDto {
@IsNotEmpty()
@IsString()
name: string;
@IsOptional()
@IsPositive()
parentCategoryId?: number;
}
```
4. Создать контроллер `CategoryController`, который будет обрабатывать запросы для категорий. Создайте файл `category.controller.ts`:
```typescript
import { Body, Controller, Post } from '@nestjs/common';
import { CategoryService } from './category.service';
import { CreateCategoryDto } from './create-category.dto';
@Controller('categories')
export class CategoryController {
constructor(private readonly categoryService: CategoryService) {}
@Post()
async createCategory(@Body() createCategoryDto: CreateCategoryDto) {
return await this.categoryService.createCategory(createCategoryDto);
}
}
```
5. Реализовать сервис `CategoryService`, который будет взаимодействовать с базой данных и генерировать запросы. Создайте файл `category.service.ts`:
```typescript
import { Injectable } from '@nestjs/common';
import { PrismaService } from 'src/prisma.service';
import { CreateCategoryDto } from './create-category.dto';
@Injectable()
export class CategoryService {
constructor(private prisma: PrismaService) {}
async createCategory(createCategoryDto: CreateCategoryDto) {
const { name, parentCategoryId } = createCategoryDto;
return await this.prisma.category.create({
data: {
name,
parentCategoryId
}
});
}
}
```
6. Настройте маршруты в `app.module.ts`:
```typescript
import { Module } from '@nestjs/common';
import { CategoryController } from './category.controller';
import { CategoryService } from './category.service';
import { PrismaService } from './prisma.service';
@Module({
imports: [],
controllers: [CategoryController],
providers: [CategoryService, PrismaService],
})
export class AppModule {}
```
После выполнения этих шагов, вы сможете создавать категории посредством отправки POST запроса на `/categories` с данными в формате `CreateCategoryDto`. Убедитесь, что ваш сервер запущен и присоединен к базе данных PostgreSQL, чтобы проверить функциональность.