feat(platform): harden access scoping and delivery baseline

This commit is contained in:
2026-03-30 00:27:31 +02:00
parent 00b936fa1f
commit 819345acfa
109 changed files with 26142 additions and 8081 deletions
@@ -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);