[INIT] Initial Project Structure
Some checks failed
Deploy Edge / deploy-edge (push) Failing after 2s
S3 Repo Backup / s3-repo-backup (push) Failing after 2s

This commit is contained in:
Dunemask 2024-08-24 12:41:04 -06:00
commit 0fc5f05b6a
105 changed files with 10448 additions and 0 deletions

View 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;

View 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
View 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
}