Multi-environment and multi-user construction
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE IF NOT EXISTS "Membership" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"organizationId" TEXT NOT NULL,
|
||||
"role" "UserRole" NOT NULL DEFAULT 'sales',
|
||||
"orgRoleId" TEXT,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"commissionPercent" DECIMAL(8,2) NOT NULL DEFAULT 0,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "Membership_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "Membership_userId_organizationId_key" ON "Membership"("userId", "organizationId");
|
||||
CREATE INDEX IF NOT EXISTS "Membership_organizationId_role_idx" ON "Membership"("organizationId", "role");
|
||||
CREATE INDEX IF NOT EXISTS "Membership_userId_idx" ON "Membership"("userId");
|
||||
CREATE INDEX IF NOT EXISTS "Membership_orgRoleId_idx" ON "Membership"("orgRoleId");
|
||||
|
||||
ALTER TABLE "Membership" DROP CONSTRAINT IF EXISTS "Membership_userId_fkey";
|
||||
ALTER TABLE "Membership" ADD CONSTRAINT "Membership_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "Membership" DROP CONSTRAINT IF EXISTS "Membership_organizationId_fkey";
|
||||
ALTER TABLE "Membership" ADD CONSTRAINT "Membership_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "Membership" DROP CONSTRAINT IF EXISTS "Membership_orgRoleId_fkey";
|
||||
ALTER TABLE "Membership" ADD CONSTRAINT "Membership_orgRoleId_fkey" FOREIGN KEY ("orgRoleId") REFERENCES "OrgRole"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
INSERT INTO "Membership" (
|
||||
"id",
|
||||
"userId",
|
||||
"organizationId",
|
||||
"role",
|
||||
"orgRoleId",
|
||||
"isActive",
|
||||
"commissionPercent",
|
||||
"createdAt",
|
||||
"updatedAt"
|
||||
)
|
||||
SELECT
|
||||
md5(random()::text || clock_timestamp()::text || u."id")::text,
|
||||
u."id",
|
||||
u."organizationId",
|
||||
u."role",
|
||||
u."orgRoleId",
|
||||
COALESCE(u."isActive", true),
|
||||
COALESCE(u."commissionPercent", 0),
|
||||
u."createdAt",
|
||||
CURRENT_TIMESTAMP
|
||||
FROM "User" u
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM "Membership" m
|
||||
WHERE m."userId" = u."id" AND m."organizationId" = u."organizationId"
|
||||
);
|
||||
Reference in New Issue
Block a user