import { drizzle } from "drizzle-orm/node-postgres"; import { eq } from "drizzle-orm"; import { users, User, NewUser } from "../shared/schema"; import { Pool } from "pg"; // Production PostgreSQL connection const pool = new Pool({ host: process.env.DB_HOST || "10.136.95.120", port: parseInt(process.env.DB_PORT || "5432"), user: process.env.DB_USER || "gn_admin", password: process.env.DB_PASSWORD || "", database: process.env.DB_NAME || "gammanexus", ssl: process.env.NODE_ENV === "production" ? { rejectUnauthorized: false } : undefined, max: 20, idleTimeoutMillis: 30000, connectionTimeoutMillis: 5000, }); export const db = drizzle(pool); // Initialize users table if it doesn't exist (called at startup) export async function initDb(): Promise { await db.execute(` CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, email TEXT NOT NULL UNIQUE, password_hash TEXT NOT NULL, created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() ) `); } export async function createUser(data: NewUser): Promise { const [user] = await db.insert(users).values(data).returning(); return user; } export async function getUserByEmail(email: string): Promise { const result = await db.select().from(users).where(eq(users.email, email.toLowerCase())); return result[0]; } export async function getUserById(id: number): Promise { const result = await db.select().from(users).where(eq(users.id, id)); return result[0]; } export async function updateUser(id: number, data: Partial>): Promise { const result = await db.update(users).set(data).where(eq(users.id, id)).returning(); return result[0]; } export async function updateUserPassword(id: number, passwordHash: string): Promise { const result = await db.update(users).set({ passwordHash }).where(eq(users.id, id)).returning(); return result[0]; }