Prisma Extension
TSDIAPI extends Prisma's capabilities using PrismaQL CLI and its core engine PrismaQL. This powerful combination allows for advanced schema management through a SQL-like DSL.
1. Creating enums
prismaql "ADD ENUM Role ({ADMIN|USER|MODERATOR|GUEST});"
prismaql "ADD ENUM MediaType ({IMAGE|VIDEO|DOCUMENT|AUDIO|ARCHIVE});"
2. Updating generator (changing output path)
prismaql "UPDATE GENERATOR client (output='../generated/prisma-client');"
3. Updating DB connection
prismaql "UPDATE DB (url='postgresql://user:password@localhost:5432/mydb', provider='postgresql');"
4. Creating models
prismaql "ADD MODEL User ({id String @id @default(cuid())|email String @unique|name String?|role Role @default(USER)|createdAt DateTime @default(now())|updatedAt DateTime @updatedAt});"
prismaql "ADD MODEL Profile ({id String @id @default(cuid())|bio String?|avatar String?|userId String});"
prismaql "ADD MODEL Media ({id String @id @default(cuid())|url String|key String|type MediaType|width Int?|height Int?|size Float?|ownerId String});"
prismaql "ADD MODEL Post ({id String @id @default(cuid())|title String|content String|published Boolean @default(false)|authorId String});"
prismaql "ADD MODEL Category ({id String @id @default(cuid())|name String @unique|description String?});"
5. Adding fields to existing models
prismaql "ADD FIELD password TO User ({String @default('')});"
prismaql "ADD FIELD isVerified TO User ({Boolean @default(false)});"
prismaql "ADD FIELD tags TO Post ({String[]});"
6. Creating relations between models
1:1 relation User-Profile
prismaql "ADD RELATION User AND Profile (type=1:1, fkHolder=Profile, relationName=userProfile);"
1:M relation User-Post
prismaql "ADD RELATION User AND Post (type=1:M, fkHolder=Post, relationName=userPosts);"
M:M relation Post-Category via pivot table
prismaql "ADD RELATION Post AND Category (type=M:N, pivotTable=PostsOnCategories);"
1:M relation User-Media
prismaql "ADD RELATION User AND Media (type=1:M, fkHolder=Media, relationName=userMedia);"
7. Updating existing models
prismaql "UPDATE FIELD email IN User ({String @unique @db.VarChar(255)});"
prismaql "UPDATE FIELD role IN User ({Role @default(GUEST)});"
8. Updating enum (adding new values)
prismaql "UPDATE ENUM Role ({ADMIN|USER|MODERATOR|GUEST|SUPER_ADMIN}) (replace=true);"
9. Adding a new generator
prismaql "ADD GENERATOR typegen ({provider='prisma-client-js', output='../generated/prisma-types'});"
10. Deleting a field (example)
prismaql "DELETE FIELD isVerified IN User;"
11. Deleting a relation (example)
prismaql "DELETE RELATION User, Media (relationName=userMedia);"
12. Validating the schema
prismaql "VALIDATE;"
13. Viewing all models (query)
prismaql "GET MODELS;"
14. Viewing a specific model (query)
prismaql "GET MODEL User;"
15. Chaining commands in one call
prismaql "ADD MODEL Temp ({id Int @id @default(autoincrement())|value String}); ADD FIELD tempField TO Temp ({Int}); DELETE MODEL Temp;"