feat(platform): harden access scoping and delivery baseline
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
-- Additive persistence split for planning demand vs assignment
|
||||
-- Run: psql $DATABASE_URL -f packages/db/prisma/migrations/20260313_demand_assignment_additive.sql
|
||||
|
||||
CREATE TABLE IF NOT EXISTS demand_requirements (
|
||||
id text PRIMARY KEY,
|
||||
"legacyAllocationId" text UNIQUE,
|
||||
"projectId" text NOT NULL REFERENCES projects(id),
|
||||
"startDate" date NOT NULL,
|
||||
"endDate" date NOT NULL,
|
||||
"hoursPerDay" double precision NOT NULL,
|
||||
percentage double precision NOT NULL,
|
||||
role text,
|
||||
"roleId" text REFERENCES roles(id),
|
||||
headcount integer NOT NULL DEFAULT 1,
|
||||
status "AllocationStatus" NOT NULL DEFAULT 'PROPOSED',
|
||||
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
"createdAt" timestamptz NOT NULL DEFAULT now(),
|
||||
"updatedAt" timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS assignments (
|
||||
id text PRIMARY KEY,
|
||||
"legacyAllocationId" text UNIQUE,
|
||||
"demandRequirementId" text REFERENCES demand_requirements(id),
|
||||
"resourceId" text NOT NULL REFERENCES resources(id),
|
||||
"projectId" text NOT NULL REFERENCES projects(id),
|
||||
"startDate" date NOT NULL,
|
||||
"endDate" date NOT NULL,
|
||||
"hoursPerDay" double precision NOT NULL,
|
||||
percentage double precision NOT NULL,
|
||||
role text,
|
||||
"roleId" text REFERENCES roles(id),
|
||||
"dailyCostCents" integer NOT NULL,
|
||||
status "AllocationStatus" NOT NULL DEFAULT 'PROPOSED',
|
||||
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
"createdAt" timestamptz NOT NULL DEFAULT now(),
|
||||
"updatedAt" timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS unique_assignment
|
||||
ON assignments ("resourceId", "projectId", "startDate", "endDate");
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_demand_requirements_legacy_allocation_id
|
||||
ON demand_requirements ("legacyAllocationId");
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_demand_requirements_project_id
|
||||
ON demand_requirements ("projectId");
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_demand_requirements_start_end
|
||||
ON demand_requirements ("startDate", "endDate");
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_demand_requirements_status
|
||||
ON demand_requirements (status);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_assignments_legacy_allocation_id
|
||||
ON assignments ("legacyAllocationId");
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_assignments_demand_requirement_id
|
||||
ON assignments ("demandRequirementId");
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_assignments_resource_id
|
||||
ON assignments ("resourceId");
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_assignments_project_id
|
||||
ON assignments ("projectId");
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_assignments_start_end
|
||||
ON assignments ("startDate", "endDate");
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_assignments_status
|
||||
ON assignments (status);
|
||||
Reference in New Issue
Block a user