···118118 created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
119119 PRIMARY KEY (follower_id, target_id, target_type)
120120 )`,
121121+122122+ // Following feed items table (references feed_activities)
123123+ sql`CREATE TABLE IF NOT EXISTS following_feed_items (
124124+ user_id TEXT NOT NULL,
125125+ activity_id UUID NOT NULL REFERENCES feed_activities(id) ON DELETE CASCADE,
126126+ created_at TIMESTAMP NOT NULL,
127127+ PRIMARY KEY (user_id, activity_id)
128128+ )`,
121129 ];
122130123131 // Execute table creation queries in order
···255263 `);
256264 await db.execute(sql`
257265 CREATE INDEX IF NOT EXISTS idx_follows_target ON follows(target_id, target_type);
266266+ `);
267267+268268+ // Following feed items indexes
269269+ await db.execute(sql`
270270+ CREATE INDEX IF NOT EXISTS idx_following_feed_user_time ON following_feed_items(user_id, created_at DESC);
258271 `);
259272}
···11+CREATE TABLE "following_feed_items" (
22+ "user_id" text NOT NULL,
33+ "activity_id" uuid NOT NULL,
44+ "created_at" timestamp NOT NULL,
55+ CONSTRAINT "following_feed_items_user_id_activity_id_pk" PRIMARY KEY("user_id","activity_id")
66+);
77+--> statement-breakpoint
88+CREATE TABLE "follows" (
99+ "follower_id" text NOT NULL,
1010+ "target_id" text NOT NULL,
1111+ "target_type" text NOT NULL,
1212+ "created_at" timestamp DEFAULT now() NOT NULL,
1313+ CONSTRAINT "follows_follower_id_target_id_target_type_pk" PRIMARY KEY("follower_id","target_id","target_type")
1414+);
1515+--> statement-breakpoint
1616+ALTER TABLE "following_feed_items" ADD CONSTRAINT "following_feed_items_activity_id_feed_activities_id_fk" FOREIGN KEY ("activity_id") REFERENCES "public"."feed_activities"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
1717+CREATE INDEX "idx_following_feed_user_time" ON "following_feed_items" USING btree ("user_id","created_at" DESC NULLS LAST);--> statement-breakpoint
1818+CREATE INDEX "idx_follows_follower" ON "follows" USING btree ("follower_id");--> statement-breakpoint
1919+CREATE INDEX "idx_follows_target" ON "follows" USING btree ("target_id","target_type");