원클릭으로
database-schema-generation
Generates database schemas (Prisma, SQLAlchemy, Drizzle) from TypeScript contracts and requirements
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Generates database schemas (Prisma, SQLAlchemy, Drizzle) from TypeScript contracts and requirements
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Design REST/WebSocket API contracts with TypeScript types
Generate REST APIs from TypeScript contracts with CRUD operations
Implements authentication (JWT, OAuth2) and authorization (RBAC) from requirements
Review quality of generated code. Checks for empty files, broken imports, missing modules, duplicate code, TypeScript errors, and rates overall quality. Identifies files that need regeneration.
Quick health check of all Coding Engine infrastructure. Checks containers, DB connectivity, API endpoints, Discord bot, sandbox preview, LLM API keys, and generation process. Takes 15 seconds.
Diagnoses pipeline problems and outputs actionable fix commands. Combines insights from status-report, code-quality, task-audit, and health-check into concrete recommendations with copy-paste-ready commands. Answers "what should I do next?" and "why is generation stuck?"
| name | database-schema-generation |
| description | Generates database schemas (Prisma, SQLAlchemy, Drizzle) from TypeScript contracts and requirements |
| trigger_events | ["CONTRACTS_GENERATED","SCHEMA_UPDATE_NEEDED","DATABASE_MIGRATION_NEEDED"] |
Generate complete, production-ready database schemas from TypeScript interfaces and requirements. This skill transforms contracts into Prisma/SQLAlchemy/Drizzle schemas with proper relationships, indexes, and constraints.
| ORM | Language | Primary Use Case |
|---|---|---|
| Prisma | TypeScript/Node.js | React, Next.js, Node backends |
| SQLAlchemy | Python | FastAPI, Flask, Django |
| Drizzle | TypeScript | Lightweight, SQL-first |
| TypeORM | TypeScript | Enterprise Node.js |
| Event | Action |
|---|---|
CONTRACTS_GENERATED | Generate initial schema from contracts |
SCHEMA_UPDATE_NEEDED | Update schema when models change |
DATABASE_MIGRATION_NEEDED | Generate and apply migration |
interface with id field becomes a model| TypeScript | Prisma | SQLAlchemy |
|---|---|---|
string | String | String |
number | Int or Float | Integer or Float |
boolean | Boolean | Boolean |
Date | DateTime | DateTime |
string? | String? | String, nullable=True |
enum | enum | Enum |
// 1:1 - User has one Profile
interface User {
profile: Profile;
}
// 1:n - User has many Posts
interface User {
posts: Post[];
}
// n:m - Post has many Tags, Tag has many Posts
interface Post {
tags: Tag[];
}
interface Tag {
posts: Post[];
}
interface User {
id: string;
email: string;
name: string;
role: UserRole;
posts: Post[];
profile?: Profile;
createdAt: Date;
updatedAt: Date;
}
enum UserRole {
ADMIN = "admin",
USER = "user",
GUEST = "guest"
}
interface Post {
id: string;
title: string;
content: string;
published: boolean;
authorId: string;
author: User;
tags: Tag[];
}
interface Tag {
id: string;
name: string;
posts: Post[];
}
interface Profile {
id: string;
bio?: string;
avatar?: string;
userId: string;
user: User;
}
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
enum UserRole {
ADMIN
USER
GUEST
}
model User {
id String @id @default(uuid())
email String @unique
name String
role UserRole @default(USER)
posts Post[]
profile Profile?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([email])
@@index([role])
}
model Post {
id String @id @default(uuid())
title String
content String @db.Text
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
authorId String
tags Tag[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([authorId])
@@index([published])
}
model Tag {
id String @id @default(uuid())
name String @unique
posts Post[]
}
model Profile {
id String @id @default(uuid())
bio String? @db.Text
avatar String?
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
userId String @unique
}
npx prisma migrate dev --name init
Schema Change Detected
↓
Generate Migration SQL
↓
Review for Data Loss
↓
Apply Migration
↓
DATABASE_MIGRATION_COMPLETE Event
Generate seed data from requirements or sample data:
// prisma/seed.ts
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
// Create admin user
const admin = await prisma.user.upsert({
where: { email: 'admin@example.com' },
update: {},
create: {
email: 'admin@example.com',
name: 'Admin User',
role: 'ADMIN',
profile: {
create: {
bio: 'System administrator',
},
},
},
});
console.log({ admin });
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});
// src/lib/prisma.ts
// CRITICAL: Load env vars BEFORE PrismaClient initialization (ESM hoisting fix)
import 'dotenv/config';
import { PrismaClient } from '@prisma/client';
const globalForPrisma = globalThis as unknown as {
prisma: PrismaClient | undefined;
};
export const prisma = globalForPrisma.prisma ?? new PrismaClient({
log: process.env.NODE_ENV === 'development'
? ['query', 'error', 'warn']
: ['error'],
});
if (process.env.NODE_ENV !== 'production') {
globalForPrisma.prisma = prisma;
}
output/
├── prisma/
│ ├── schema.prisma # Database schema
│ ├── migrations/ # Auto-generated migrations
│ └── seed.ts # Seed data script
├── src/
│ ├── lib/
│ │ └── prisma.ts # Prisma client singleton
│ └── db/
│ └── queries.ts # Common query helpers
└── package.json # prisma, @prisma/client deps
# .env.local
DATABASE_URL="postgresql://user:password@localhost:5432/mydb?schema=public"
# docker-compose.yml
services:
db:
image: postgres:15-alpine
environment:
POSTGRES_USER: ${POSTGRES_USER:-dev}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-dev}
POSTGRES_DB: ${POSTGRES_DB:-app}
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-dev}"]
interval: 5s
timeout: 5s
retries: 5
volumes:
postgres_data: