gammanexus/server/db.ts

47 lines
1.6 KiB
TypeScript

import { drizzle } from "drizzle-orm/better-sqlite3";
import { eq } from "drizzle-orm";
import { users, User, NewUser } from "../shared/schema";
import * as path from "node:path";
// eslint-disable-next-line @typescript-eslint/no-var-requires
const Database = require("better-sqlite3");
const dbPath = path.resolve(process.cwd(), "data.db");
const sqlite = new Database(dbPath);
export const db = drizzle(sqlite);
// Initialize users table if it doesn't exist
sqlite.exec(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
)
`);
export async function createUser(data: NewUser): Promise<User> {
const [user] = await db.insert(users).values(data).returning();
return user;
}
export async function getUserByEmail(email: string): Promise<User | undefined> {
const result = await db.select().from(users).where(eq(users.email, email.toLowerCase()));
return result[0];
}
export async function getUserById(id: number): Promise<User | undefined> {
const result = await db.select().from(users).where(eq(users.id, id));
return result[0];
}
export async function updateUser(id: number, data: Partial<Pick<User, "name" | "email">>): Promise<User> {
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<User> {
const result = await db.update(users).set({ passwordHash }).where(eq(users.id, id)).returning();
return result[0];
}