Files
portabase/src/db/services/user.ts
T

50 lines
1.2 KiB
TypeScript
Raw Normal View History

2026-06-22 16:56:17 +02:00
"use server";
2025-12-30 13:38:01 +01:00
2026-06-22 16:56:17 +02:00
import { SignUpUser } from "@/types/auth";
import { hashPassword } from "better-auth/crypto";
import { db } from "@/db";
import * as drizzleDb from "@/db";
import { User, UserThemeEnum } from "@/db/schema/02_user";
import { assertValidPassword } from "@/utils/password";
2025-12-30 13:38:01 +01:00
2026-06-22 10:52:42 +02:00
export async function hasUsers(): Promise<boolean> {
2026-06-22 16:56:17 +02:00
const result = await db.select().from(drizzleDb.schemas.user).limit(1);
return result.length > 0;
2026-06-22 10:52:42 +02:00
}
2025-12-30 13:38:01 +01:00
export async function createUserDb(data: SignUpUser): Promise<User> {
2026-06-22 16:56:17 +02:00
assertValidPassword(data.password);
2026-06-22 16:56:17 +02:00
const now = new Date();
const userId = crypto.randomUUID();
2025-12-30 13:38:01 +01:00
2026-06-22 16:56:17 +02:00
const [newUser] = await db
.insert(drizzleDb.schemas.user)
.values({
...data,
id: userId,
name: data.name,
email: data.email,
emailVerified: true,
role: data.role,
createdAt: now,
updatedAt: now,
theme: data.theme as UserThemeEnum,
})
.returning();
2025-12-30 13:38:01 +01:00
2026-06-22 16:56:17 +02:00
if (data.password) {
const hashedPassword = await hashPassword(data.password);
await db.insert(drizzleDb.schemas.account).values({
providerId: "credential",
accountId: userId,
userId: userId,
password: hashedPassword,
createdAt: now,
updatedAt: now,
});
}
2025-12-30 13:38:01 +01:00
2026-06-22 16:56:17 +02:00
return newUser;
2025-12-30 13:38:01 +01:00
}