@@ -19,7 +19,7 @@ $$ LANGUAGE plpgsql;
1919-- =========================================================================
2020-- 1. pipeline_config
2121-- =========================================================================
22- CREATE TABLE pipeline_config (
22+ CREATE TABLE IF NOT EXISTS pipeline_config (
2323 id integer PRIMARY KEY DEFAULT 1 CHECK (id = 1 ),
2424 gemini_model text NOT NULL DEFAULT ' gemini-2.0-flash' ,
2525 elevenlabs_voice_id text NOT NULL DEFAULT ' pNInz6obpgDQGcFmaJgB' ,
@@ -45,16 +45,18 @@ CREATE POLICY "service_role can update pipeline_config"
4545 USING (true)
4646 WITH CHECK (true);
4747
48- INSERT INTO pipeline_config (id) VALUES (1 );
48+ INSERT INTO pipeline_config (id) VALUES (1 ) ON CONFLICT (id) DO NOTHING ;
4949
5050CREATE TRIGGER trg_pipeline_config_updated_at
5151 BEFORE UPDATE ON pipeline_config
5252 FOR EACH ROW EXECUTE FUNCTION update_updated_at();
5353
54+ COMMENT ON TABLE pipeline_config IS ' Core video pipeline settings: Gemini model, voice, YouTube visibility, quality thresholds' ;
55+
5456-- =========================================================================
5557-- 2. remotion_config
5658-- =========================================================================
57- CREATE TABLE remotion_config (
59+ CREATE TABLE IF NOT EXISTS remotion_config (
5860 id integer PRIMARY KEY DEFAULT 1 CHECK (id = 1 ),
5961 aws_region text NOT NULL DEFAULT ' us-east-1' ,
6062 function_name text NOT NULL DEFAULT ' ' ,
@@ -78,16 +80,18 @@ CREATE POLICY "service_role can update remotion_config"
7880 USING (true)
7981 WITH CHECK (true);
8082
81- INSERT INTO remotion_config (id) VALUES (1 );
83+ INSERT INTO remotion_config (id) VALUES (1 ) ON CONFLICT (id) DO NOTHING ;
8284
8385CREATE TRIGGER trg_remotion_config_updated_at
8486 BEFORE UPDATE ON remotion_config
8587 FOR EACH ROW EXECUTE FUNCTION update_updated_at();
8688
89+ COMMENT ON TABLE remotion_config IS ' Remotion Lambda rendering: AWS region, function name, serve URL, resource limits' ;
90+
8791-- =========================================================================
8892-- 3. content_config
8993-- =========================================================================
90- CREATE TABLE content_config (
94+ CREATE TABLE IF NOT EXISTS content_config (
9195 id integer PRIMARY KEY DEFAULT 1 CHECK (id = 1 ),
9296 rss_feeds jsonb NOT NULL DEFAULT ' ["https://hnrss.org/newest?points=100&count=20","https://dev.to/feed/tag/javascript","https://dev.to/feed/tag/webdev","https://css-tricks.com/feed/","https://blog.chromium.org/feeds/posts/default","https://web.dev/feed.xml","https://www.smashingmagazine.com/feed/","https://javascriptweekly.com/rss/"]' ::jsonb,
9397 trend_sources_enabled jsonb NOT NULL DEFAULT ' {"hn":true,"devto":true,"blogs":true,"youtube":true,"github":true}' ::jsonb,
@@ -123,16 +127,18 @@ CREATE POLICY "service_role can update content_config"
123127 USING (true)
124128 WITH CHECK (true);
125129
126- INSERT INTO content_config (id) VALUES (1 );
130+ INSERT INTO content_config (id) VALUES (1 ) ON CONFLICT (id) DO NOTHING ;
127131
128132CREATE TRIGGER trg_content_config_updated_at
129133 BEFORE UPDATE ON content_config
130134 FOR EACH ROW EXECUTE FUNCTION update_updated_at();
131135
136+ COMMENT ON TABLE content_config IS ' Content discovery and generation: RSS feeds, trend sources, system prompt, video duration' ;
137+
132138-- =========================================================================
133139-- 4. sponsor_config
134140-- =========================================================================
135- CREATE TABLE sponsor_config (
141+ CREATE TABLE IF NOT EXISTS sponsor_config (
136142 id integer PRIMARY KEY DEFAULT 1 CHECK (id = 1 ),
137143 cooldown_days integer NOT NULL DEFAULT 14 ,
138144 rate_card_tiers jsonb NOT NULL DEFAULT ' [{"name":"starter","price":500,"impressions":"5k-10k"},{"name":"growth","price":1500,"impressions":"10k-50k"},{"name":"premium","price":3000,"impressions":"50k+"}]' ::jsonb,
@@ -159,16 +165,18 @@ CREATE POLICY "service_role can update sponsor_config"
159165 USING (true)
160166 WITH CHECK (true);
161167
162- INSERT INTO sponsor_config (id) VALUES (1 );
168+ INSERT INTO sponsor_config (id) VALUES (1 ) ON CONFLICT (id) DO NOTHING ;
163169
164170CREATE TRIGGER trg_sponsor_config_updated_at
165171 BEFORE UPDATE ON sponsor_config
166172 FOR EACH ROW EXECUTE FUNCTION update_updated_at();
167173
174+ COMMENT ON TABLE sponsor_config IS ' Sponsor pipeline: cooldown periods, rate card tiers, outreach templates' ;
175+
168176-- =========================================================================
169177-- 5. distribution_config
170178-- =========================================================================
171- CREATE TABLE distribution_config (
179+ CREATE TABLE IF NOT EXISTS distribution_config (
172180 id integer PRIMARY KEY DEFAULT 1 CHECK (id = 1 ),
173181 notification_emails jsonb NOT NULL DEFAULT ' ["alex@codingcat.dev"]' ::jsonb,
174182 youtube_description_template text NOT NULL DEFAULT ' {{title}}
@@ -196,16 +204,18 @@ CREATE POLICY "service_role can update distribution_config"
196204 USING (true)
197205 WITH CHECK (true);
198206
199- INSERT INTO distribution_config (id) VALUES (1 );
207+ INSERT INTO distribution_config (id) VALUES (1 ) ON CONFLICT (id) DO NOTHING ;
200208
201209CREATE TRIGGER trg_distribution_config_updated_at
202210 BEFORE UPDATE ON distribution_config
203211 FOR EACH ROW EXECUTE FUNCTION update_updated_at();
204212
213+ COMMENT ON TABLE distribution_config IS ' Distribution: notification emails, YouTube templates, default tags' ;
214+
205215-- =========================================================================
206216-- 6. gcs_config
207217-- =========================================================================
208- CREATE TABLE gcs_config (
218+ CREATE TABLE IF NOT EXISTS gcs_config (
209219 id integer PRIMARY KEY DEFAULT 1 CHECK (id = 1 ),
210220 bucket_name text NOT NULL DEFAULT ' codingcatdev-content-engine' ,
211221 project_id text NOT NULL DEFAULT ' codingcatdev' ,
@@ -225,8 +235,10 @@ CREATE POLICY "service_role can update gcs_config"
225235 USING (true)
226236 WITH CHECK (true);
227237
228- INSERT INTO gcs_config (id) VALUES (1 );
238+ INSERT INTO gcs_config (id) VALUES (1 ) ON CONFLICT (id) DO NOTHING ;
229239
230240CREATE TRIGGER trg_gcs_config_updated_at
231241 BEFORE UPDATE ON gcs_config
232242 FOR EACH ROW EXECUTE FUNCTION update_updated_at();
243+
244+ COMMENT ON TABLE gcs_config IS ' Google Cloud Storage: bucket name and project ID' ;
0 commit comments