Создание API для создания записи с использованием NestJS и Prisma

Создание API для создания записи с использованием NestJS и Prisma

NestJS — это мощный фреймворк для создания серверных приложений, а Prisma — современный ORM для работы с базами данных. Вместе они позволяют быстро и эффективно создавать API. Вот пошаговое руководство для создания API с использованием этих технологий.


1. Установка зависимостей

Сначала создайте новый проект NestJS и установите Prisma:

bash

# Создание нового проекта NestJS
nest new my-nestjs-app

# Установка Prisma и клиента
npm install @prisma/client
npm install prisma --save-dev

Инициализируйте Prisma:

bash

npx prisma init


2. Настройка Prisma Schema

В файле prisma/schema.prisma настройте модель данных. Например, создадим модель Post:

prisma

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite" // Или другой провайдер, например, PostgreSQL
  url      = "file:./dev.db"
}

model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String
  createdAt DateTime @default(now())
}

После этого выполните миграцию для создания таблицы в базе данных:

bash

npx prisma migrate dev --name init


3. Генерация Prisma Client

После настройки схемы выполните команду для генерации Prisma Client:

bash

npx prisma generate


4. Настройка Prisma в NestJS

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

Создание Prisma модуля

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

Создайте файл 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();
  }
}

Добавьте модуль Prisma в AppModule:

typescript

import { Module } from '@nestjs/common';
import { PrismaModule } from './prisma/prisma.module';
import { PostsModule } from './posts/posts.module';

@Module({
  imports: [PrismaModule, PostsModule],
})
export class AppModule {}


5. Создание модуля для работы с записями

Сгенерируйте модуль и контроллер для работы с записями:

bash

nest generate module posts
nest generate controller posts
nest generate service posts

Настройка PostsService

В файле src/posts/posts.service.ts добавьте логику для создания записи:

typescript

import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';

@Injectable()
export class PostsService {
  constructor(private readonly prisma: PrismaService) {}

  async createPost(data: { title: string; content: string }) {
    return this.prisma.post.create({
      data,
    });
  }
}

Настройка PostsController

В файле src/posts/posts.controller.ts настройте маршрут для создания записи:

typescript

import { Body, Controller, Post } from '@nestjs/common';
import { PostsService } from './posts.service';

@Controller('posts')
export class PostsController {
  constructor(private readonly postsService: PostsService) {}

  @Post()
  async createPost(@Body() body: { title: string; content: string }) {
    return this.postsService.createPost(body);
  }
}


6. Тестирование API

Запустите сервер:

bash

npm run start

Отправьте POST-запрос на http://localhost:3000/posts с телом:

json

{
  "title": "Пример записи",
  "content": "Это содержимое записи"
}

Вы получите ответ с созданной записью.


7. Дополнительно

  • Вы можете добавить валидацию данных с помощью class-validator и class-transformer.
  • Для работы с другими базами данных (например, PostgreSQL) измените provider и url в schema.prisma.

Теперь у вас есть API для создания записей с использованием NestJS и Prisma! 🚀