( email: string, preferences: EmailPreferences )
| 90 | * Update user's email preferences |
| 91 | */ |
| 92 | export async function updateEmailPreferences( |
| 93 | email: string, |
| 94 | preferences: EmailPreferences |
| 95 | ): Promise<boolean> { |
| 96 | try { |
| 97 | const userResult = await db |
| 98 | .select({ id: user.id }) |
| 99 | .from(user) |
| 100 | .where(eq(user.email, email)) |
| 101 | .limit(1) |
| 102 | |
| 103 | if (!userResult[0]) { |
| 104 | logger.warn(`User not found for email: ${email}`) |
| 105 | return false |
| 106 | } |
| 107 | |
| 108 | const userId = userResult[0].id |
| 109 | |
| 110 | const existingSettings = await db |
| 111 | .select({ emailPreferences: settings.emailPreferences }) |
| 112 | .from(settings) |
| 113 | .where(eq(settings.userId, userId)) |
| 114 | .limit(1) |
| 115 | |
| 116 | let currentEmailPreferences = {} |
| 117 | if (existingSettings[0]) { |
| 118 | currentEmailPreferences = (existingSettings[0].emailPreferences as EmailPreferences) || {} |
| 119 | } |
| 120 | |
| 121 | const updatedEmailPreferences = { |
| 122 | ...currentEmailPreferences, |
| 123 | ...preferences, |
| 124 | } |
| 125 | |
| 126 | await db |
| 127 | .insert(settings) |
| 128 | .values({ |
| 129 | id: userId, |
| 130 | userId, |
| 131 | emailPreferences: updatedEmailPreferences, |
| 132 | }) |
| 133 | .onConflictDoUpdate({ |
| 134 | target: settings.userId, |
| 135 | set: { |
| 136 | emailPreferences: updatedEmailPreferences, |
| 137 | updatedAt: new Date(), |
| 138 | }, |
| 139 | }) |
| 140 | |
| 141 | logger.info(`Updated email preferences for user: ${email}`) |
| 142 | return true |
| 143 | } catch (error) { |
| 144 | logger.error('Error updating email preferences:', error) |
| 145 | return false |
| 146 | } |
| 147 | } |
| 148 | |
| 149 | /** |
no test coverage detected