feat: complete user management workflow

This commit is contained in:
2026-07-02 01:18:52 -07:00
parent e3e7b0d8e0
commit 99bcfb1038
12 changed files with 663 additions and 46 deletions

View File

@@ -251,7 +251,7 @@ export async function createRegistration(input: {
email: string;
password: string;
organizationId?: string;
}): Promise<{ account: PublicAccount; session: Session }> {
}): Promise<{ account: PublicAccount; session?: Session }> {
const database = getDatabase();
const password = hashPassword(input.password);
const expiresAt = new Date(Date.now() + SESSION_MAX_AGE_SECONDS * 1000);
@@ -278,18 +278,16 @@ export async function createRegistration(input: {
throw new Error("账号创建失败");
}
const sessionRows = await transaction
.insert(sessions)
.values({
accountId: account.id,
activeOrganizationId: input.organizationId,
expiresAt,
})
.returning();
const sessionRows = input.organizationId
? []
: await transaction
.insert(sessions)
.values({
accountId: account.id,
expiresAt,
})
.returning();
const session = sessionRows[0];
if (!session) {
throw new Error("会话创建失败");
}
if (input.organizationId) {
await transaction.insert(joinRequests).values({
@@ -308,7 +306,7 @@ export async function createRegistration(input: {
}
const publicAccount = toPublicAccount(created.account);
const session = toSession(created.session);
const session = created.session ? toSession(created.session) : undefined;
await recordAuditLog({
actor: publicAccount,
organizationId: input.organizationId,
@@ -334,7 +332,7 @@ export async function loginWithPassword(input: {
.limit(1);
const account = accountRows[0];
if (!account || account.status === "disabled" || !verifyPassword(input.password, account)) {
if (!account || account.status !== "active" || !verifyPassword(input.password, account)) {
throw new Error("邮箱或密码错误");
}