76 lines
1.4 KiB
TypeScript
76 lines
1.4 KiB
TypeScript
import { drizzle } from 'drizzle-orm/d1';
|
|
import { eq } from 'drizzle-orm';
|
|
import { users, type User, type NewUser } from './schema';
|
|
|
|
export type { User, NewUser };
|
|
|
|
export function getDb(d1: D1Database) {
|
|
return drizzle(d1);
|
|
}
|
|
|
|
export async function createUser(
|
|
db: D1Database,
|
|
email: string,
|
|
passwordHash: string,
|
|
nickname: string
|
|
): Promise<User | null> {
|
|
try {
|
|
const drizzleDb = getDb(db);
|
|
|
|
const newUser: NewUser = {
|
|
email,
|
|
passwordHash,
|
|
nickname
|
|
};
|
|
|
|
await drizzleDb.insert(users).values(newUser);
|
|
|
|
// Get the created user
|
|
const [user] = await drizzleDb
|
|
.select()
|
|
.from(users)
|
|
.where(eq(users.email, email))
|
|
.limit(1);
|
|
|
|
return user || null;
|
|
} catch (error) {
|
|
console.error('Error creating user:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export async function getUserByEmail(db: D1Database, email: string): Promise<User | null> {
|
|
try {
|
|
const drizzleDb = getDb(db);
|
|
|
|
const [user] = await drizzleDb
|
|
.select()
|
|
.from(users)
|
|
.where(eq(users.email, email))
|
|
.limit(1);
|
|
|
|
return user || null;
|
|
} catch (error) {
|
|
console.error('Error fetching user:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export async function getUserById(db: D1Database, id: number): Promise<User | null> {
|
|
try {
|
|
const drizzleDb = getDb(db);
|
|
|
|
const [user] = await drizzleDb
|
|
.select()
|
|
.from(users)
|
|
.where(eq(users.id, id))
|
|
.limit(1);
|
|
|
|
return user || null;
|
|
} catch (error) {
|
|
console.error('Error fetching user:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|