diff --git a/supabase/migrations/20260210000000_add_recommend_count.sql b/supabase/migrations/20260210000000_add_recommend_count.sql new file mode 100644 index 00000000..f0dd1160 --- /dev/null +++ b/supabase/migrations/20260210000000_add_recommend_count.sql @@ -0,0 +1,23 @@ +ALTER TABLE documents ADD COLUMN recommend_count integer NOT NULL DEFAULT 0; + +UPDATE documents d +SET recommend_count = ( + SELECT COUNT(*) FROM recommends_on_documents r WHERE r.document = d.uri +); + +CREATE OR REPLACE FUNCTION update_recommend_count() RETURNS trigger AS $$ +BEGIN + IF TG_OP = 'INSERT' THEN + UPDATE documents SET recommend_count = recommend_count + 1 + WHERE uri = NEW.document; + ELSIF TG_OP = 'DELETE' THEN + UPDATE documents SET recommend_count = recommend_count - 1 + WHERE uri = OLD.document; + END IF; + RETURN NULL; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER trg_recommend_count +AFTER INSERT OR DELETE ON recommends_on_documents +FOR EACH ROW EXECUTE FUNCTION update_recommend_count();