Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions backend/drizzle/20261110140402_book_reviews/migration.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
CREATE TABLE "book_reviews" (
"id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "book_reviews_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1),
"user_id" text NOT NULL,
"book_id" integer NOT NULL,
"rating" smallint NOT NULL,
"comment" text,
"created_at" timestamp DEFAULT now() NOT NULL,
"updated_at" timestamp DEFAULT now() NOT NULL,
CONSTRAINT "book_reviews_user_id_book_id_unique" UNIQUE("user_id","book_id"),
CONSTRAINT "book_reviews_rating_check" CHECK ("rating" between 1 and 5)
);
--> statement-breakpoint
ALTER TABLE "books" ADD COLUMN "initial_rating" real;--> statement-breakpoint
ALTER TABLE "books" ADD COLUMN "initial_num_ratings" integer;--> statement-breakpoint
CREATE INDEX "book_reviews_book_id_created_at_idx" ON "book_reviews" ("book_id","created_at");--> statement-breakpoint
CREATE INDEX "book_reviews_user_id_created_at_idx" ON "book_reviews" ("user_id","created_at");--> statement-breakpoint
ALTER TABLE "book_reviews" ADD CONSTRAINT "book_reviews_user_id_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "user"("id") ON DELETE CASCADE;--> statement-breakpoint
ALTER TABLE "book_reviews" ADD CONSTRAINT "book_reviews_book_id_books_id_fkey" FOREIGN KEY ("book_id") REFERENCES "books"("id") ON DELETE CASCADE;--> statement-breakpoint

-- Custom SQL: the existing rating columns hold the dataset values, so copy them to the new initial columns.
-- There are no user reviews yet, so rating and num_ratings already hold the correct values.
UPDATE "books" SET "initial_rating" = "rating", "initial_num_ratings" = "num_ratings";
Loading