PRIX / src /db.ts
yamxxx1's picture
Upload 3 files
60b2b16 verified
Raw
History Blame
3.66 kB
import postgres from 'postgres'
const sql = postgres(process.env.DATABASE_URL!, {
max: 10,
idle_timeout: 20,
connect_timeout: 10,
transform: {
undefined: null,
},
})
export { sql }
export async function initializeDatabase() {
try {
await sql`
CREATE TABLE IF NOT EXISTS users (
id VARCHAR(50) PRIMARY KEY,
github_id INTEGER UNIQUE NOT NULL,
username VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE,
avatar_url TEXT,
plan VARCHAR(20) DEFAULT 'free',
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
)
`
await sql`
CREATE TABLE IF NOT EXISTS user_events (
id SERIAL PRIMARY KEY,
event_type VARCHAR(50) NOT NULL,
user_id VARCHAR(100),
session_id VARCHAR(100) NOT NULL,
page_url TEXT,
referrer TEXT,
user_agent TEXT,
ip_hash VARCHAR(64),
metadata JSONB,
created_at TIMESTAMP DEFAULT NOW()
)
`
await sql`
CREATE TABLE IF NOT EXISTS revenue_events (
id SERIAL PRIMARY KEY,
event_type VARCHAR(50) NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
currency VARCHAR(3) DEFAULT 'USD',
customer_id VARCHAR(100),
github_id INTEGER,
subscription_tier VARCHAR(20),
metadata JSONB,
created_at TIMESTAMP DEFAULT NOW()
)
`
await sql`
CREATE TABLE IF NOT EXISTS affiliate_users (
id VARCHAR(100) PRIMARY KEY,
github_id INTEGER UNIQUE NOT NULL,
username VARCHAR(100) NOT NULL,
affiliate_code VARCHAR(50) UNIQUE NOT NULL,
referral_count INTEGER DEFAULT 0,
paid_referral_count INTEGER DEFAULT 0,
tier VARCHAR(20) DEFAULT 'free',
created_at TIMESTAMP DEFAULT NOW()
)
`
await sql`
CREATE TABLE IF NOT EXISTS referrals (
id VARCHAR(100) PRIMARY KEY,
affiliate_id VARCHAR(100) NOT NULL REFERENCES affiliate_users(id),
referred_github_id INTEGER UNIQUE NOT NULL,
referred_username VARCHAR(100) NOT NULL,
referred_ip_hash VARCHAR(64) NOT NULL,
has_purchased BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT NOW()
)
`
await sql`
CREATE TABLE IF NOT EXISTS affiliate_events (
id SERIAL PRIMARY KEY,
event_type VARCHAR(50) NOT NULL,
affiliate_id VARCHAR(100) NOT NULL,
affiliate_code VARCHAR(50),
referrer_id VARCHAR(100),
commission_amount DECIMAL(10, 2) DEFAULT 0,
conversion_status VARCHAR(20) DEFAULT 'pending',
metadata JSONB,
created_at TIMESTAMP DEFAULT NOW()
)
`
await sql`
CREATE TABLE IF NOT EXISTS dashboard_metrics (
id SERIAL PRIMARY KEY,
metric_type VARCHAR(50) NOT NULL,
metric_name VARCHAR(100) NOT NULL,
metric_value DECIMAL(15, 2) NOT NULL,
metadata JSONB,
recorded_at TIMESTAMP DEFAULT NOW(),
UNIQUE(metric_type, metric_name, recorded_at)
)
`
await sql`
CREATE TABLE IF NOT EXISTS daily_aggregates (
id SERIAL PRIMARY KEY,
date DATE NOT NULL,
metric_category VARCHAR(50) NOT NULL,
metric_name VARCHAR(100) NOT NULL,
total_value DECIMAL(15, 2) NOT NULL,
count INTEGER DEFAULT 1,
metadata JSONB,
created_at TIMESTAMP DEFAULT NOW(),
UNIQUE(date, metric_category, metric_name)
)
`
console.log('Backend database initialized successfully')
} catch (error) {
console.error('Failed to initialize backend database:', error)
}
}