Как настроить иерархию категорий с использованием NestJS, Prisma, и PostgreSQL?

Какие шаги были предприняты для создания категории с использованием класса `CreateCategoryDto`, и какие функции были реализованы в контроллере и сервисе для этого процесса? Пожалуйста, опишите подробно каждый шаг.
  • 30 апреля 2024 г. 10:50
Ответы на вопрос 1
Для настройки иерархии категорий с использованием 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, чтобы проверить функциональность.
Похожие вопросы