[INIT] Initial Project Structure
This commit is contained in:
commit
0fc5f05b6a
105 changed files with 10448 additions and 0 deletions
75
prisma/migrations/20240824171333_schema_init/migration.sql
Normal file
75
prisma/migrations/20240824171333_schema_init/migration.sql
Normal file
|
@ -0,0 +1,75 @@
|
|||
-- CreateEnum
|
||||
CREATE TYPE "AuthorityType" AS ENUM ('Root', 'User', 'RolePolicy');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "KeyPairType" AS ENUM ('UserToken', 'Custom');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Project" (
|
||||
"id" TEXT NOT NULL,
|
||||
"slug" TEXT NOT NULL,
|
||||
"parentProject" TEXT NOT NULL,
|
||||
"name" TEXT,
|
||||
|
||||
CONSTRAINT "Project_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "User" (
|
||||
"id" TEXT NOT NULL,
|
||||
"username" TEXT NOT NULL,
|
||||
"email" TEXT,
|
||||
"hash" TEXT NOT NULL,
|
||||
"rolePolicyId" TEXT NOT NULL,
|
||||
"projectId" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "RolePolicy" (
|
||||
"id" TEXT NOT NULL,
|
||||
"projectId" TEXT NOT NULL,
|
||||
"authority" TEXT NOT NULL,
|
||||
"authorityType" "AuthorityType" NOT NULL DEFAULT 'RolePolicy',
|
||||
"name" TEXT NOT NULL,
|
||||
"policies" TEXT[],
|
||||
|
||||
CONSTRAINT "RolePolicy_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "KeyPair" (
|
||||
"id" TEXT NOT NULL,
|
||||
"projectId" TEXT NOT NULL,
|
||||
"usage" "KeyPairType" NOT NULL,
|
||||
"name" TEXT,
|
||||
"encryptedPrivateKey" TEXT NOT NULL,
|
||||
"encryptedPublicKey" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "KeyPair_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Project_slug_key" ON "Project"("slug");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "User_id_key" ON "User"("id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "User_projectId_username_key" ON "User"("projectId", "username");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "User_projectId_email_key" ON "User"("projectId", "email");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "User" ADD CONSTRAINT "User_rolePolicyId_fkey" FOREIGN KEY ("rolePolicyId") REFERENCES "RolePolicy"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "User" ADD CONSTRAINT "User_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "RolePolicy" ADD CONSTRAINT "RolePolicy_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "KeyPair" ADD CONSTRAINT "KeyPair_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
3
prisma/migrations/migration_lock.toml
Normal file
3
prisma/migrations/migration_lock.toml
Normal file
|
@ -0,0 +1,3 @@
|
|||
# Please do not edit this file manually
|
||||
# It should be added in your version-control system (i.e. Git)
|
||||
provider = "postgresql"
|
73
prisma/schema.prisma
Normal file
73
prisma/schema.prisma
Normal file
|
@ -0,0 +1,73 @@
|
|||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("CAIRO_POSTGRES_URI")
|
||||
}
|
||||
|
||||
// Models
|
||||
model Project {
|
||||
id String @id @default(cuid())
|
||||
slug String @unique
|
||||
parentProject String
|
||||
name String?
|
||||
users User[]
|
||||
rolePolicies RolePolicy[]
|
||||
keyPairs KeyPair[]
|
||||
}
|
||||
|
||||
// User
|
||||
model User {
|
||||
id String @id @unique @default(cuid())
|
||||
username String
|
||||
email String?
|
||||
hash String
|
||||
rolePolicyId String
|
||||
projectId String
|
||||
|
||||
// Relations
|
||||
rolePolicy RolePolicy @relation(fields: [rolePolicyId], references: [id])
|
||||
project Project @relation(fields: [projectId], references: [id])
|
||||
|
||||
// Unique constraints
|
||||
@@unique([projectId, username])
|
||||
@@unique([projectId, email])
|
||||
}
|
||||
|
||||
model RolePolicy {
|
||||
id String @id @default(cuid())
|
||||
projectId String
|
||||
authority String
|
||||
authorityType AuthorityType @default(RolePolicy)
|
||||
name String
|
||||
policies String[]
|
||||
|
||||
// Relations
|
||||
users User[]
|
||||
project Project @relation(fields: [projectId], references: [id])
|
||||
}
|
||||
|
||||
model KeyPair {
|
||||
id String @id @default(cuid())
|
||||
projectId String
|
||||
usage KeyPairType // Application Level Uniqueness for non-custom usages. For example, there can only be 1 UserToken Keypair
|
||||
name String?
|
||||
encryptedPrivateKey String
|
||||
encryptedPublicKey String
|
||||
project Project @relation(fields: [projectId], references: [id])
|
||||
|
||||
// Application Level Uniqueness for non-custom usages. For example, there can only be 1 UserToken Keypair
|
||||
}
|
||||
|
||||
enum AuthorityType {
|
||||
Root
|
||||
User
|
||||
RolePolicy
|
||||
}
|
||||
|
||||
enum KeyPairType {
|
||||
UserToken
|
||||
Custom
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue