mirror of
https://github.com/R0m1k3/Socialflow.git
synced 2026-10-12 01:36:54 +02:00
72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
import { pool } from "./db";
|
|
|
|
export async function migrate() {
|
|
const client = await pool.connect();
|
|
try {
|
|
console.log("[Migration] Starting safe migration Check...");
|
|
|
|
// 1. Create Enums if not exist
|
|
await client.query(`
|
|
DO $$ BEGIN
|
|
CREATE TYPE "token_status" AS ENUM('valid', 'expiring', 'expired', 'error');
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
`);
|
|
|
|
// 2. Create Tables if not exist
|
|
|
|
// post_analytics
|
|
await client.query(`
|
|
CREATE TABLE IF NOT EXISTS "post_analytics" (
|
|
"id" varchar PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"post_id" varchar NOT NULL REFERENCES "posts"("id") ON DELETE cascade,
|
|
"fetched_at" timestamp DEFAULT now(),
|
|
"impressions" integer DEFAULT 0,
|
|
"reach" integer DEFAULT 0,
|
|
"engagement" integer DEFAULT 0,
|
|
"reactions" integer DEFAULT 0,
|
|
"comments" integer DEFAULT 0,
|
|
"shares" integer DEFAULT 0,
|
|
"clicks" integer DEFAULT 0,
|
|
"raw_data" jsonb
|
|
);
|
|
`);
|
|
|
|
// page_analytics_history
|
|
await client.query(`
|
|
CREATE TABLE IF NOT EXISTS "page_analytics_history" (
|
|
"id" varchar PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"page_id" varchar NOT NULL REFERENCES "social_pages"("id") ON DELETE cascade,
|
|
"date" timestamp NOT NULL,
|
|
"followers_count" integer DEFAULT 0,
|
|
"page_views" integer DEFAULT 0,
|
|
"page_reach" integer DEFAULT 0,
|
|
"created_at" timestamp DEFAULT now()
|
|
);
|
|
`);
|
|
|
|
// 3. Add Columns to existing tables if not exist
|
|
|
|
// social_pages.token_status
|
|
await client.query(`
|
|
ALTER TABLE "social_pages"
|
|
ADD COLUMN IF NOT EXISTS "token_status" "token_status" DEFAULT 'valid';
|
|
`);
|
|
|
|
// social_pages.last_token_check
|
|
await client.query(`
|
|
ALTER TABLE "social_pages"
|
|
ADD COLUMN IF NOT EXISTS "last_token_check" timestamp;
|
|
`);
|
|
|
|
console.log("[Migration] Safe migration completed.");
|
|
} catch (error) {
|
|
console.error("[Migration] Error during migration:", error);
|
|
// Don't kill the process, let the app try to start even if migration failed
|
|
// (It might have failed because tables already existed in a different state)
|
|
} finally {
|
|
client.release();
|
|
}
|
|
}
|