(userId: string | null)
| 28 | * user is unauthenticated or has no persisted settings row. |
| 29 | */ |
| 30 | export async function getUserSettings(userId: string | null): Promise<UserSettingsApi> { |
| 31 | if (!userId) { |
| 32 | return defaultUserSettings |
| 33 | } |
| 34 | |
| 35 | const result = await db |
| 36 | .select({ |
| 37 | theme: settings.theme, |
| 38 | autoConnect: settings.autoConnect, |
| 39 | telemetryEnabled: settings.telemetryEnabled, |
| 40 | emailPreferences: settings.emailPreferences, |
| 41 | billingUsageNotificationsEnabled: settings.billingUsageNotificationsEnabled, |
| 42 | showTrainingControls: settings.showTrainingControls, |
| 43 | superUserModeEnabled: settings.superUserModeEnabled, |
| 44 | mothershipEnvironment: settings.mothershipEnvironment, |
| 45 | errorNotificationsEnabled: settings.errorNotificationsEnabled, |
| 46 | snapToGridSize: settings.snapToGridSize, |
| 47 | showActionBar: settings.showActionBar, |
| 48 | timezone: settings.timezone, |
| 49 | lastActiveWorkspaceId: settings.lastActiveWorkspaceId, |
| 50 | }) |
| 51 | .from(settings) |
| 52 | .where(eq(settings.userId, userId)) |
| 53 | .limit(1) |
| 54 | |
| 55 | if (!result.length) { |
| 56 | return defaultUserSettings |
| 57 | } |
| 58 | |
| 59 | const userSettings = result[0] |
| 60 | |
| 61 | return { |
| 62 | theme: userSettings.theme as UserSettingsApi['theme'], |
| 63 | autoConnect: userSettings.autoConnect, |
| 64 | telemetryEnabled: userSettings.telemetryEnabled, |
| 65 | emailPreferences: userSettings.emailPreferences ?? {}, |
| 66 | billingUsageNotificationsEnabled: userSettings.billingUsageNotificationsEnabled ?? true, |
| 67 | showTrainingControls: userSettings.showTrainingControls ?? false, |
| 68 | superUserModeEnabled: userSettings.superUserModeEnabled ?? false, |
| 69 | mothershipEnvironment: |
| 70 | (userSettings.mothershipEnvironment as UserSettingsApi['mothershipEnvironment']) ?? 'default', |
| 71 | errorNotificationsEnabled: userSettings.errorNotificationsEnabled ?? true, |
| 72 | snapToGridSize: userSettings.snapToGridSize ?? 0, |
| 73 | showActionBar: userSettings.showActionBar ?? true, |
| 74 | timezone: userSettings.timezone ?? null, |
| 75 | lastActiveWorkspaceId: userSettings.lastActiveWorkspaceId ?? null, |
| 76 | } |
| 77 | } |
| 78 | |
| 79 | /** |
| 80 | * Loads a user's public profile fields, or `null` when no matching user exists. |
no test coverage detected