К основному содержанию
правило

prisma — правило для Cursor: как установить и что делает

Правило для Cursor, которое задаёт агенту порядок работы с Prisma ORM: один клиент на приложение, выборки без лишних полей, аккуратные миграции.

Установить в Cursor · Вручную: положить файлы Все способы и платформы ↓
.cursor/rules/prisma.mdc
Открыть на GitHub

Что делает prisma

Файл .cursor/rules/prisma.mdc подключается к проекту и начинает действовать, когда Cursor открывает файлы **/*.prisma. Внутри — набор требований к схемам и запросам: конфигурация через prisma.config.ts, единственный экземпляр PrismaClient, имена моделей в PascalCase, поля в camelCase, поля createdAt, updatedAt и deletedAt для аудита и мягкого удаления.

Отдельный блок про производительность. Агент будет тянуть только нужные поля через select и include вместо выборки всей таблицы, использовать createMany() и updateMany() для больших наборов и обходить проблему N+1. Для миграций правило требует описательных имён вроде npx prisma migrate dev --name add-user-profile-fields и запрещает править уже применённые миграции — иначе схема разъедется между окружениями.

Правило рассчитано на TypeScript и Prisma ORM v7+, о чём говорит пример конфигурации с defineConfig. В конце исходника упоминается официальное расширение Prisma для VS Code, но текст там обрывается. Если проект на другой версии Prisma или без TypeScript, часть примеров придётся переписать под себя.

Какие задачи решает

  • завести один PrismaClient вместо создания нового в каждом запросе
  • убрать выборку всех полей и связей там, где нужны две колонки
  • переписать вставку пачки записей в цикле на createMany()
  • дать миграциям понятные имена вместо init и migration
  • добавить в модели поля аудита и мягкого удаления

Примеры запросов агенту

  • посмотри правило prisma и приведи lib/prisma.ts к одному экземпляру клиента
  • перепиши этот запрос так, чтобы выбирались только id и email
  • проверь схему prisma/schema.prisma на соответствие правилу prisma

Как установить prisma

Вручную: положить файлы

.cursor/rules/prisma.mdc

Во frontmatter: description, globs, alwaysApply

По шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules

Из того же набора69

react-native Правило задаёт обязательные практики для React Native: feature-first структуру, функциональные компоненты, хуки и типизацию. Пригодится, когда проект растёт и файлы расползаются. ★ 3 579звёзд репо qwik Правило Cursor, которое подсказывает агенту, как писать Qwik-приложения: component$, useStore, QRL с суффиксом $ и загрузка данных через loader$. ★ 3 579звёзд репо pyramid Правило для Cursor с набором практик по Python-фреймворку Pyramid: структура проекта, конфигурация, транзакции и предикаты представлений. ★ 3 579звёзд репо pygame Правило для Cursor задаёт каркас Pygame-проекта: один UIManager, фиксированный шаг времени, вёрстка на якорях и темы в JSON. ★ 3 579звёзд репо playwright Правило задаёт Cursor стандарты написания end-to-end тестов на Playwright: официальный раннер, устойчивые локаторы, отказ от ручных задержек. ★ 3 579звёзд репо phoenix Правило для Cursor задаёт, как писать Phoenix-приложения на Elixir: контексты, форматирование, тесты. Пригодится, если агент уже правит ваш код. ★ 3 579звёзд репо pandas Правило для Cursor задаёт стиль работы с pandas: векторизация вместо циклов, явные .loc и .iloc, экономные типы данных. Пригодится, если агент часто пишет медленный код. ★ 3 579звёзд репо notion-api Правило для Cursor задаёт, как писать код интеграций с Notion API: модули, токены в переменных окружения, официальные SDK и пагинация. ★ 3 579звёзд репо

Похожие

prisma-cli prisma Справочник по командам Prisma ORM 7 для ИИ-агентов. Помогает запускать миграции, генерировать клиент и безопасно работать с базой данных без случайного сброса данных. CX Codex +1 388 700установок prisma-development Mindrally Задаёт агенту правила работы с Prisma ORM и TypeScript: схема, миграции, транзакции, обработка ошибок. Пригодится, когда в проекте есть Prisma. CX Codex +1 698установок prisma-client-api prisma Справочник по Prisma Client API для написания запросов к БД, CRUD-операций и фильтрации. Срабатывает на упоминания findMany, create, update, delete и транзакций. CX Codex +1 391 400установок prisma-patterns affaan-m Набор правил и архитектурных шаблонов для работы с Prisma ORM в TypeScript. Помогает писать безопасные схемы, запросы и транзакции без утечек соединений. CX Codex +1 4 500установок prisma-expert sickn33 Скилл помогает разбирать схемы Prisma, миграции и запросы. Пригодится, когда нужно найти причину ошибки или проверить изменения перед деплоем. CX Codex +1 4 200установок database-schema-designer Alireza Rezvani Скилл проектирует реляционные схемы по требованиям и готовит ERD, миграции и типы. Пригодится для новой функции или пересмотра существующей структуры базы. 692установок

Рядом в теме «Данные и базы»

Всё по теме «Данные и базы» →

Вопросы о prisma

Как установить prisma в Cursor?

Положите файл правила по пути .cursor/rules/prisma.mdc в корне проекта. Cursor подхватит его и применит к файлам, подходящим под **/*.prisma.

Что делает правило prisma?

Задаёт агенту требования к работе с Prisma ORM: единственный экземпляр клиента, точечные выборки, массовые операции, осмысленные имена миграций. Так запросы и схема остаются предсказуемыми.

С какой версией Prisma это работает?

Примеры конфигурации рассчитаны на Prisma ORM v7+ и TypeScript. На более старых версиях конфигурацию через prisma.config.ts использовать не получится.

Исходный текст

prisma.mdc · CC0-1.0
---
description: Enforce best practices for Prisma ORM, ensuring type-safe, performant, and maintainable database interactions in modern TypeScript applications.
globs: **/*.prisma
---
# prisma Best Practices

Prisma is the definitive Type-first ORM for modern TypeScript applications. Adhere to these guidelines for optimal performance, maintainability, and type safety, leveraging the latest TypeScript/WASM engine for a superior developer experience.

## 1. Code Organization & Client Management

Always use `prisma.config.ts` for configuration and ensure a single, globally accessible `PrismaClient` instance.

### ✅ GOOD: Type-Safe Configuration (`prisma.config.ts`)

Configure Prisma CLI with full type safety using `defineConfig` or `satisfies PrismaConfig`. This is the standard for Prisma ORM v7+.

```typescript
// prisma.config.ts
import 'dotenv/config';
import { defineConfig, env } from 'prisma/config'; // v7+ config import

export default defineConfig({
  schema: 'prisma/schema.prisma',
  migrations: {
    path: 'prisma/migrations',
    seed: 'tsx prisma/seed.ts', // Use tsx for TypeScript seed scripts
  },
  datasource: {
    url: env('DATABASE_URL'), // Always use environment variables for sensitive data
  },
});
```

### ✅ GOOD: Singleton PrismaClient Instance

Prevent connection pool exhaustion and memory leaks, especially in hot-reloading development environments like Next.js.

```typescript
// lib/prisma.ts
import { PrismaClient } from '@prisma/client'; // Import generated client

const globalForPrisma = global as unknown as { prisma: PrismaClient };

export const prisma =
  globalForPrisma.prisma ||
  new PrismaClient({
    log: ['query', 'info', 'warn', 'error'], // Essential for observability and debugging
  });

if (process.env.NODE_ENV !== 'production') {
  globalForPrisma.prisma = prisma; // Persist client across hot reloads in dev
}
```

❌ **BAD**: Instantiating `new PrismaClient()` in every request or module.

```typescript
// ❌ BAD: Creates multiple PrismaClient instances
async function getPosts() {
  const prisma = new PrismaClient(); // This will exhaust your connection pool
  await prisma.post.findMany();
}
```

## 2. Data Modeling & Schema Design

Design your `schema.prisma` for clarity, consistency, and database efficiency.

### ✅ GOOD: Naming Conventions & Essential Fields

Use singular, PascalCase for models and camelCase for fields. Leverage enums for fixed domains. Include `createdAt`, `updatedAt`, and `deletedAt` for robust auditing and soft deletes.

```prisma
// prisma/schema.prisma
model User {
  id        String   @id @default(uuid()) // Prefer UUIDs for distributed systems
  email     String   @unique
  name      String?
  role      Role     @default(USER)     // Use enums for constrained values
  posts     Post[]
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  deletedAt DateTime? // Crucial for soft deletes and data integrity
}

model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String?
  published Boolean  @default(false)
  author    User     @relation(fields: [authorId], references: [id])
  authorId  String
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

enum Role {
  USER
  ADMIN
  EDITOR
}
```

### ✅ GOOD: Composite Keys & Indexes

Define composite unique constraints and indexes for efficient lookups on multiple fields.

```prisma
model OrderItem {
  orderId   String
  productId String
  quantity  Int

  @@id([orderId, productId]) // Composite primary key
  @@index([productId])       // Index for efficient lookups by product
}
```

## 3. Query Optimization & Performance

Avoid over-fetching, use bulk operations, and leverage Prisma's built-in optimizations.

### ✅ GOOD: Selective Data Fetching (`select`/`include`)

Only fetch the data you explicitly need. This drastically reduces network overhead and memory usage.

```typescript
// ✅ GOOD: Fetch only ID and email
const users = await prisma.user.findMany({
  select: {
    id: true,
    email: true,
  },
});

// ✅ GOOD: Include related posts only when necessary
const userWithPosts = await prisma.user.findUnique({
  where: { id: 'some-uuid' },
  include: {
    posts: {
      select: {
        id: true,
        title: true,
      },
    },
  },
});
```

❌ **BAD**: Over-fetching all fields and relations.

```typescript
// ❌ BAD: Fetches ALL user fields and ALL post fields, even if not used
const users = await prisma.user.findMany({
  include: { posts: true },
});
```

### ✅ GOOD: Bulk Operations

For large data sets, prefer `createMany()`/`createManyAndReturn()` and `updateMany()` over individual operations. Batch thousands of records for optimal performance.

```typescript
// ✅ GOOD: Bulk create multiple users
const newUsers = await prisma.user.createMany({
  data: [
    { email: '[email protected]', name: 'Alice' },
    { email: '[email protected]', name: 'Bob' },
  ],
  skipDuplicates: true, // Prevents errors on existing records
});

// ✅ GOOD: Batch writes for very large datasets (e.g., 1000 records per batch)
async function bulkInsert(data: UserCreateInput[]) {
  const batchSize = 1000;
  for (let i = 0; i < data.length; i += batchSize) {
    const batch = data.slice(i, i + batchSize);
    await prisma.user.createMany({ data: batch });
  }
}
```

❌ **BAD**: Individual inserts in a loop for many records.

```typescript
// ❌ BAD: N separate database queries for N records
for (const user of manyUsers) {
  await prisma.user.create({ data: user });
}
```

### ✅ GOOD: Solve N+1 with `include` or Fluent API

Leverage Prisma's dataloader for `findUnique` (which batches queries) or use `include` for related data to avoid the N+1 problem.

```typescript
// ✅ GOOD: Using include to fetch related data in a single query
const usersWithPosts = await prisma.user.findMany({
  include: {
    posts: true,
  },
});

// ✅ GOOD: Fluent API for specific related data (batches findUnique calls)
const userPosts = await prisma.user.findUnique({
  where: { id: 'some-uuid' },
})?.posts({
  where: { published: true },
});
```

## 4. Migration Patterns

Maintain a clean, consistent, and reliable migration history.

### ✅ GOOD: Descriptive Migration Names

Use `npx prisma migrate dev --name <descriptive-name>` for clear, self-documenting migration history.

```bash
npx prisma migrate dev --name add-user-profile-fields
```

❌ **BAD**: Generic names like `init` or `migration` provide no context.

### ✅ GOOD: Never Edit Applied Migrations

Once a migration is applied to *any* environment (dev, staging, production), *never* modify its SQL. This prevents schema drift, data corruption, and deployment issues. If changes are needed, create a new migration.

## 5. Editor Tooling

Maximize productivity and maintain code quality with the official Prisma VS Code extension and Prettier.

### ✅ GOOD: Prisma VS Code Extension & Prettier

Install the official [Prisma VS Code extension](https://marketplace.visualstudio.com/items?itemName=Prisma.prisma) and `prettier-plugin-prisma`. Configure your `settings.json` for automatic formatting on save.

```json
// .vscode/settings.json
{
  "editor.formatOnSave": true,
  "[prisma]": {
    "editor.defaultFormatter": "Prisma.prisma"
  }
}
```

This ensures consistent schema formatting, linting, and provides features like go-to-definition and quick-fixes.

© sanjeed5 · CC0-1.0 · sanjeed5/awesome-cursor-rules-mdc

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой