af8b9fe00f
Full-featured house/apartment floor plan editor with: - Turborepo monorepo (React/Vite client, Fastify/Prisma server, shared Zod schemas) - 2D room editor with walls, doors, windows, furniture, electrical elements - 3D room preview with Three.js (auto-hide nearest walls, bird's eye default) - Wall projection views with interactive drag (elevation, position) - Apartment floor plan view with room positioning - Copy/paste, alignment tools, measurement tool, annotations - Item-attached annotations with leader lines (visible on projections) - Door open direction (LEFT/RIGHT/INWARD/OUTWARD) with swing arc - Floor type textures (wood, tile, concrete, laminate, herringbone) - Wall color picker for 3D view - Furniture: bed, desk, wardrobe, sofa, table, chair, shelf, nightstand, dresser, bookcase, TV (with stand toggle), AC unit - Furniture elevation support (wall-mounted items) - Auto-save with dirty state tracking, batch save API - Rotation-aware collision detection (SAT/OBB) with 3D elevation check - Rotation-aware hit testing - i18n (English/Russian) with locale-aware number formatting - Dark mode with system preference detection - Undo/redo, keyboard shortcuts, scale bar - PDF/PNG/JSON export and JSON import - Focus trap modal, toast notifications, tooltips - Responsive layout with overlay palettes
103 lines
3.2 KiB
SQL
103 lines
3.2 KiB
SQL
-- CreateTable
|
|
CREATE TABLE "Apartment" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"address" TEXT,
|
|
"totalArea" REAL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Room" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"apartmentId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"shape" TEXT NOT NULL DEFAULT '[]',
|
|
"width" REAL,
|
|
"height" REAL,
|
|
"wallHeight" REAL NOT NULL DEFAULT 2.7,
|
|
"plinthHeight" REAL NOT NULL DEFAULT 0.06,
|
|
"plinthThickness" REAL NOT NULL DEFAULT 0.01,
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
"posX" REAL NOT NULL DEFAULT 0,
|
|
"posY" REAL NOT NULL DEFAULT 0,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "Room_apartmentId_fkey" FOREIGN KEY ("apartmentId") REFERENCES "Apartment" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Wall" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"roomId" TEXT NOT NULL,
|
|
"startX" REAL NOT NULL,
|
|
"startY" REAL NOT NULL,
|
|
"endX" REAL NOT NULL,
|
|
"endY" REAL NOT NULL,
|
|
"thickness" REAL NOT NULL DEFAULT 0.1,
|
|
"direction" TEXT NOT NULL DEFAULT 'OTHER',
|
|
CONSTRAINT "Wall_roomId_fkey" FOREIGN KEY ("roomId") REFERENCES "Room" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "WallOpening" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"roomId" TEXT NOT NULL,
|
|
"wallId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"positionAlongWall" REAL NOT NULL,
|
|
"width" REAL NOT NULL,
|
|
"height" REAL NOT NULL,
|
|
"elevationFromFloor" REAL NOT NULL DEFAULT 0,
|
|
CONSTRAINT "WallOpening_roomId_fkey" FOREIGN KEY ("roomId") REFERENCES "Room" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "WallOpening_wallId_fkey" FOREIGN KEY ("wallId") REFERENCES "Wall" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ElectricalItem" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"roomId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"x" REAL NOT NULL,
|
|
"y" REAL NOT NULL,
|
|
"wallId" TEXT,
|
|
"elevationFromFloor" REAL,
|
|
"rotation" REAL NOT NULL DEFAULT 0,
|
|
"metadata" TEXT,
|
|
CONSTRAINT "ElectricalItem_roomId_fkey" FOREIGN KEY ("roomId") REFERENCES "Room" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "FurnitureItem" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"roomId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"x" REAL NOT NULL,
|
|
"y" REAL NOT NULL,
|
|
"width" REAL NOT NULL,
|
|
"depth" REAL NOT NULL,
|
|
"height" REAL NOT NULL,
|
|
"rotation" REAL NOT NULL DEFAULT 0,
|
|
"label" TEXT,
|
|
CONSTRAINT "FurnitureItem_roomId_fkey" FOREIGN KEY ("roomId") REFERENCES "Room" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Room_apartmentId_idx" ON "Room"("apartmentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Wall_roomId_idx" ON "Wall"("roomId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "WallOpening_roomId_idx" ON "WallOpening"("roomId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "WallOpening_wallId_idx" ON "WallOpening"("wallId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ElectricalItem_roomId_idx" ON "ElectricalItem"("roomId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "FurnitureItem_roomId_idx" ON "FurnitureItem"("roomId");
|