feat: complete house plan maker application
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
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
-- 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");
|
||||
@@ -0,0 +1,3 @@
|
||||
# Please do not edit this file manually
|
||||
# It should be added in your version-control system (e.g., Git)
|
||||
provider = "sqlite"
|
||||
Reference in New Issue
Block a user