Skip to content

Commit 414371a

Browse files
refactor: user specific canvas state (#1936)
* feat: add user_canvases table and related functionality - Created a new table "user_canvases" to store user-specific canvas data including scale, x, and y coordinates. - Implemented row-level security and foreign key constraints for user and canvas references. - Added migration to copy existing canvas data to the new user_canvases table. - Updated project and canvas routers to handle user canvas retrieval and updates. - Introduced utility functions for creating default user canvas entries. - Adjusted relevant components to utilize user canvas data instead of general canvas data. * feat: enhance user canvas retrieval in project router - Added userCanvases filter in project router to restrict canvas access based on user ID. - Refactored user canvas query in user-canvas router for improved readability and efficiency. - Updated logic to return null if no user canvas is found, ensuring better error handling.
1 parent bd370cf commit 414371a

File tree

18 files changed

+881
-88
lines changed

18 files changed

+881
-88
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
CREATE TABLE "user_canvases" (
2+
"user_id" uuid NOT NULL,
3+
"canvas_id" uuid NOT NULL,
4+
"scale" numeric NOT NULL,
5+
"x" numeric NOT NULL,
6+
"y" numeric NOT NULL,
7+
CONSTRAINT "user_canvases_user_id_canvas_id_pk" PRIMARY KEY("user_id","canvas_id")
8+
);
9+
--> statement-breakpoint
10+
ALTER TABLE "user_canvases" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
11+
ALTER TABLE "user_canvases" ADD CONSTRAINT "user_canvases_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint
12+
ALTER TABLE "user_canvases" ADD CONSTRAINT "user_canvases_canvas_id_canvas_id_fk" FOREIGN KEY ("canvas_id") REFERENCES "public"."canvas"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint
13+
14+
-- Copy over the scale, x, and y values from the canvas table to the user_canvases table
15+
INSERT INTO "user_canvases" ("user_id", "canvas_id", "scale", "x", "y")
16+
SELECT
17+
up.user_id,
18+
c.id as canvas_id,
19+
c.scale,
20+
c.x,
21+
c.y
22+
FROM "canvas" c
23+
INNER JOIN "user_projects" up ON c.project_id = up.project_id
24+
ON CONFLICT (user_id, canvas_id) DO NOTHING;
25+
26+
ALTER TABLE "canvas" DROP COLUMN "scale";--> statement-breakpoint
27+
ALTER TABLE "canvas" DROP COLUMN "x";--> statement-breakpoint
28+
ALTER TABLE "canvas" DROP COLUMN "y";

0 commit comments

Comments
 (0)