56 lines
2.1 KiB
SQL
56 lines
2.1 KiB
SQL
-- 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"
|
||
|
|
);
|