mirror of
https://github.com/siop-spelev/siop2.git
synced 2026-08-08 12:41:54 +00:00
- packages/shared : rôles/catégories, schémas Zod, contrat d'API ; pnpm contract → docs/openapi.json committée (règle d'or ADR-001) - apps/api : NestJS 11 + Prisma 6, migration r0_identity (Role/Permission/User) ; guard JWT global + @Public() ; PermissionsGuard (@RequirePermission, matrice relue en base, cache 60 s) ; FileStorage (seul import MinIO) ; /health - démo-login ADR-002 : module conditionnel DEMO_MODE (404 sinon, testé e2e), double verrou production, refus des comptes isDemo=false - seed idempotent : 7 rôles, matrice complète (70 lignes), 7 comptes démo - 19 tests Jest (unit + e2e) ; smoke test sur build de prod Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
55 lines
1.6 KiB
SQL
55 lines
1.6 KiB
SQL
-- CreateTable
|
|
CREATE TABLE "Role" (
|
|
"id" UUID NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "Role_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Permission" (
|
|
"id" UUID NOT NULL,
|
|
"roleId" UUID NOT NULL,
|
|
"objectCategory" TEXT NOT NULL,
|
|
"canView" BOOLEAN NOT NULL DEFAULT false,
|
|
"canViewOther" BOOLEAN NOT NULL DEFAULT false,
|
|
"canCreate" BOOLEAN NOT NULL DEFAULT false,
|
|
"canEdit" BOOLEAN NOT NULL DEFAULT false,
|
|
"canDelete" BOOLEAN NOT NULL DEFAULT false,
|
|
|
|
CONSTRAINT "Permission_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" UUID NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"displayName" TEXT NOT NULL,
|
|
"passwordHash" TEXT,
|
|
"roleId" UUID NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"isDemo" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Role_name_key" ON "Role"("name");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Permission_roleId_objectCategory_key" ON "Permission"("roleId", "objectCategory");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "User_roleId_idx" ON "User"("roleId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Permission" ADD CONSTRAINT "Permission_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "Role"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "User" ADD CONSTRAINT "User_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "Role"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|