47 lines
1.6 KiB
TypeScript
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];
|
|
}
|