From aai-stack-prisma
Provides Prisma schema design patterns for models, field types, ID strategies, and relationships including one-to-one, one-to-many, many-to-many, and self-relations. Useful for modeling database schemas.
npx claudepluginhub bradtaylorsf/alphaagent-teamThis skill uses the workspace's default tool permissions.
Patterns for designing Prisma schemas.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Builds production-ready Apache Airflow DAGs with patterns for operators, sensors, testing, and deployment. For data pipelines, workflow orchestration, and batch jobs.
Share bugs, ideas, or general feedback.
Patterns for designing Prisma schemas.
model User {
id String @id @default(uuid())
email String @unique
name String?
role Role @default(USER)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
posts Post[]
profile Profile?
sessions Session[]
@@index([email])
@@map("users")
}
enum Role {
USER
ADMIN
MODERATOR
}
model Example {
// Scalar types
id String @id @default(uuid())
name String
bio String? // Optional
age Int
price Float
active Boolean @default(true)
count BigInt
// Dates
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
// Database-specific
data Json
content String @db.Text
amount Decimal @db.Decimal(10, 2)
metadata Bytes
}
// UUID (recommended for distributed systems)
model User {
id String @id @default(uuid())
}
// CUID (shorter, URL-safe)
model Post {
id String @id @default(cuid())
}
// Auto-increment
model Legacy {
id Int @id @default(autoincrement())
}
// Composite ID
model OrderItem {
orderId String
productId String
@@id([orderId, productId])
}
model User {
id String @id @default(uuid())
profile Profile?
}
model Profile {
id String @id @default(uuid())
bio String?
userId String @unique
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model User {
id String @id @default(uuid())
posts Post[]
}
model Post {
id String @id @default(uuid())
title String
authorId String
author User @relation(fields: [authorId], references: [id])
@@index([authorId])
}
model Post {
id String @id @default(uuid())
title String
categories Category[]
}
model Category {
id String @id @default(uuid())
name String
posts Post[]
}
model Post {
id String @id @default(uuid())
tags PostTag[]
}
model Tag {
id String @id @default(uuid())
name String @unique
posts PostTag[]
}
model PostTag {
postId String
tagId String
createdAt DateTime @default(now())
post Post @relation(fields: [postId], references: [id], onDelete: Cascade)
tag Tag @relation(fields: [tagId], references: [id], onDelete: Cascade)
@@id([postId, tagId])
}
model Category {
id String @id @default(uuid())
name String
parentId String?
parent Category? @relation("CategoryHierarchy", fields: [parentId], references: [id])
children Category[] @relation("CategoryHierarchy")
}
model User {
id String @id @default(uuid())
followedBy User[] @relation("UserFollows")
following User[] @relation("UserFollows")
}
model User {
id String @id @default(uuid())
email String @unique
// Compound unique
@@unique([organizationId, email])
}
model Post {
id String @id @default(uuid())
authorId String
status String
createdAt DateTime @default(now())
// Single column index
@@index([authorId])
// Compound index
@@index([status, createdAt])
// Named index
@@index([authorId], name: "post_author_idx")
}
model Article {
id String @id @default(uuid())
title String
content String
@@fulltext([title, content])
}
model Post {
id String @id @default(uuid())
authorId String
author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
// Options:
// Cascade - Delete related records
// SetNull - Set FK to null (requires optional field)
// Restrict - Prevent deletion
// NoAction - Database handles it
// SetDefault - Set to default value
}
model Organization {
id String @id @default(uuid())
name String
users User[]
posts Post[]
}
model User {
id String @id @default(uuid())
email String
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
@@unique([organizationId, email])
@@index([organizationId])
}
model Post {
id String @id @default(uuid())
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
@@index([organizationId])
}
model Post {
id String @id @default(uuid())
title String
deletedAt DateTime?
isDeleted Boolean @default(false)
@@index([isDeleted])
}
model Resource {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
createdBy String?
updatedBy String?
}
enum OrderStatus {
PENDING
PROCESSING
SHIPPED
DELIVERED
CANCELLED
}
model Order {
id String @id @default(uuid())
status OrderStatus @default(PENDING)
}
Used by:
database-developer agentfullstack-developer agent