generator client {
provider = "prisma-client-js"
previewFeatures = ["fullTextSearch", "interactiveTransactions", "orderByNulls"]
binaryTargets = ["native", "linux-musl", "debian-openssl-1.1.x", "debian-openssl-3.0.x"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Organization {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
slug String @unique
owner User @relation("ManyOwnedOrganizationsToOneOwnerUser", fields: [ownerId], references: [id])
ownerId String
kind OrganizationKind @default(PERSONAL)
visibility ResourceVisibility @default(PRIVATE)
avatarUri String?
displayName String?
websiteUrl String?
memberships OrganizationMembership[] @relation("OneOrganizationMembershipToOneOrganization")
repositories Repository[] @relation("ManyRepositoriesToOneOrganization")
}
model OrganizationMembership {
id String @id @default(cuid())
organizationId String
userId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
expiresAt DateTime?
revokedAt DateTime?
role OrganizationRole @default(REVIEWER)
organization Organization @relation("OneOrganizationMembershipToOneOrganization", fields: [organizationId], references: [id])
user User @relation("OneOrganizationMembershipToOneUser", fields: [userId], references: [id])
}
model PullRequest {
id String @id @default(cuid())
uid Int @default(autoincrement())
authorId String
sourceRepositoryId String
targetRepositoryId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
closedAt DateTime?
state PullRequestState @default(OPEN)
sourceBranch String
targetBranch String
summary String
textMd String
author User @relation("OnePullRequestToOneUser", fields: [authorId], references: [id])
comments PullRequestComment[] @relation("OnePullRequestCommentToOnePullRequest")
sourceRepository Repository @relation("OneSourceRepositoryToManyPullRequests", fields: [sourceRepositoryId], references: [id])
targetRepository Repository @relation("OneTargetRepositoryToManyPullRequests", fields: [targetRepositoryId], references: [id])
@@unique([uid, targetRepositoryId])
@@unique([sourceRepositoryId, sourceBranch, targetRepositoryId, targetBranch])
}
model PullRequestComment {
id String @id @default(cuid())
authorId String
pullRequestId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
textMd String
author User @relation("OnePullRequestToOnePRCommenterUser", fields: [authorId], references: [id])
pullRequest PullRequest @relation("OnePullRequestCommentToOnePullRequest", fields: [pullRequestId], references: [id])
}
model Repository {
id String @id @default(cuid())
forkedFromRepoId String?
organizationId String
slug String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
lastPushedAt DateTime?
visibility ResourceVisibility @default(PRIVATE)
isFork Boolean @default(false)
keywords String[]
avatarUri String?
displayName String?
shortDescription String?
websiteUrl String?
organization Organization @relation("ManyRepositoriesToOneOrganization", fields: [organizationId], references: [id])
forkedFromRepo Repository? @relation("OneParentRepositoryToManyForkRepository", fields: [forkedFromRepoId], references: [id])
forks Repository[] @relation("OneParentRepositoryToManyForkRepository")
pullRequestsWhereSource PullRequest[] @relation("OneSourceRepositoryToManyPullRequests")
pullRequestsWhereTarget PullRequest[] @relation("OneTargetRepositoryToManyPullRequests")
pipelines Pipeline[] @relation("RepositoryPipelines")
@@unique([slug, organizationId])
}
model Session {
id String @id @default(cuid())
sessionId String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
expiresAt DateTime?
data Json?
detectedIPAddress String @default("")
detectedUserAgent String @default("")
}
model User {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
role GlobalRole @default(CUSTOMER)
username String @unique
email String @unique
hashedPassword String
displayName String?
avatarUri String?
sshKeys UserSSHKey[] @relation("ManyUserSSHKeyToOneUser")
organizations Organization[] @relation("ManyOwnedOrganizationsToOneOwnerUser")
organizationMemberships OrganizationMembership[] @relation("OneOrganizationMembershipToOneUser")
pullRequestsWhereAuthor PullRequest[] @relation("OnePullRequestToOneUser")
pullRequestCommentsWhereAuthor PullRequestComment[] @relation("OnePullRequestToOnePRCommenterUser")
}
model UserSSHKey {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation("ManyUserSSHKeyToOneUser", fields: [userId], references: [id])
userId String
name String
key String
revoked Boolean @default(false)
}
model Pipeline {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
name String
status PipelineStatus @default(PENDING)
manifest String?
repoId String
repo Repository @relation("RepositoryPipelines",fields: [repoId], references: [id])
stages Stage[] @relation("PipelineStages")
artefacts Artefact[] @relation("PipelineArtefacts")
}
model Stage {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
name String
order Int
status StageStatus @default(PENDING)
logs String?
pipelineId String
pipeline Pipeline @relation("PipelineStages", fields: [pipelineId], references: [id])
}
model Artefact {
id String @id @default(cuid())
createdAt DateTime @default(now())
name String
path String
size Int?
pipelineId String
pipeline Pipeline @relation("PipelineArtefacts", fields: [pipelineId], references: [id])
}
enum GlobalRole {
GUEST
CUSTOMER
ADMIN
SUPER_ADMIN
}
enum OrganizationKind {
PERSONAL
COMPANY
}
enum OrganizationRole {
REVIEWER
COMITTER
ADMIN
OWNER
}
enum PullRequestState {
OPEN
CLOSE_MERGED
CLOSE_DENIED
}
enum ResourceVisibility {
PUBLIC
UNLISTED
PRIVATE
}
enum PipelineStatus {
PENDING
RUNNING
PASSED
FAILED
CANCELED
}
enum StageStatus {
PENDING
RUNNING
PASSED
FAILED
CANCELED
}