dock config to postgres, auto-add /email on google oauth, improved email empty state
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
export {
|
||||
initAuthStore,
|
||||
getUsers,
|
||||
getUserById,
|
||||
getUserByEmail,
|
||||
@@ -7,8 +6,8 @@ export {
|
||||
createUser,
|
||||
updateUser,
|
||||
deleteUser,
|
||||
getPasskeysByEmail,
|
||||
getPasskeysByEmailAndOrigin,
|
||||
getPasskeysByUserId,
|
||||
getPasskeysByUserIdAndOrigin,
|
||||
getPasskeyByCredentialId,
|
||||
createPasskey,
|
||||
updatePasskey,
|
||||
@@ -17,4 +16,22 @@ export {
|
||||
blacklistToken,
|
||||
isTokenBlacklisted,
|
||||
cleanupExpiredTokens,
|
||||
} from './store';
|
||||
} from './queries/auth';
|
||||
|
||||
export { readServerSettings, writeServerSettings } from './queries/server-config';
|
||||
|
||||
export { getUserSettings, setUserSettings, getUserState, patchUserState, getDockPaths, setDockPaths } from './queries/user-data';
|
||||
|
||||
export {
|
||||
getServerIntegrations,
|
||||
getServerIntegration,
|
||||
upsertServerIntegration,
|
||||
deleteServerIntegration,
|
||||
getUserIntegrations,
|
||||
getUserIntegration,
|
||||
upsertUserIntegration,
|
||||
deleteUserIntegration,
|
||||
} from './queries/integrations';
|
||||
|
||||
export { db } from './db';
|
||||
export * as schema from './schema';
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
import { eq } from 'drizzle-orm';
|
||||
import { db } from '../db';
|
||||
import { dockConfigs, userSettings, userState } from '../schema';
|
||||
|
||||
// ── User Settings ──
|
||||
|
||||
export async function getUserSettings(userId: number): Promise<Record<string, unknown>> {
|
||||
const [row] = await db.select().from(userSettings).where(eq(userSettings.userId, userId));
|
||||
return (row?.settings as Record<string, unknown>) ?? {};
|
||||
}
|
||||
|
||||
export async function setUserSettings(userId: number, settings: Record<string, unknown>): Promise<void> {
|
||||
await db
|
||||
.insert(userSettings)
|
||||
.values({ userId, settings, updatedAt: new Date() })
|
||||
.onConflictDoUpdate({
|
||||
target: userSettings.userId,
|
||||
set: { settings, updatedAt: new Date() },
|
||||
});
|
||||
}
|
||||
|
||||
// ── User State ──
|
||||
|
||||
export async function getUserState(userId: number): Promise<Record<string, unknown>> {
|
||||
const [row] = await db.select().from(userState).where(eq(userState.userId, userId));
|
||||
return (row?.state as Record<string, unknown>) ?? {};
|
||||
}
|
||||
|
||||
export async function patchUserState(userId: number, patch: Record<string, unknown>): Promise<Record<string, unknown>> {
|
||||
const current = await getUserState(userId);
|
||||
const merged = { ...current, ...patch };
|
||||
await db
|
||||
.insert(userState)
|
||||
.values({ userId, state: merged, updatedAt: new Date() })
|
||||
.onConflictDoUpdate({
|
||||
target: userState.userId,
|
||||
set: { state: merged, updatedAt: new Date() },
|
||||
});
|
||||
return merged;
|
||||
}
|
||||
|
||||
// ── Dock Config ──
|
||||
|
||||
export async function getDockPaths(userId: number): Promise<string[] | null> {
|
||||
const [row] = await db.select().from(dockConfigs).where(eq(dockConfigs.userId, userId));
|
||||
return (row?.paths as string[]) ?? null;
|
||||
}
|
||||
|
||||
export async function setDockPaths(userId: number, paths: string[]): Promise<void> {
|
||||
await db
|
||||
.insert(dockConfigs)
|
||||
.values({ userId, paths, updatedAt: new Date() })
|
||||
.onConflictDoUpdate({
|
||||
target: dockConfigs.userId,
|
||||
set: { paths, updatedAt: new Date() },
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user