oom issue

This commit is contained in:
2025-12-22 13:22:21 -08:00
parent 22513a967b
commit 5b8f309ad8
5 changed files with 170 additions and 190 deletions

View File

@@ -52,7 +52,10 @@ export class UserRepository {
);
return res.rows[0];
} catch (error) {
logger.error({ err: error, email }, 'Database error in findUserByEmail');
logger.error(
{ err: error instanceof Error ? error.message : error, email },
'Database error in findUserByEmail',
);
throw new Error('Failed to retrieve user from database.');
}
}
@@ -127,7 +130,10 @@ export class UserRepository {
throw new UniqueConstraintError('A user with this email address already exists.');
}
// The withTransaction helper logs the rollback, so we just log the context here.
logger.error({ err: error, email }, 'Error during createUser transaction');
logger.error(
{ err: error instanceof Error ? error.message : error, email },
'Error during createUser transaction',
);
throw new Error('Failed to create user in database.');
});
}
@@ -182,7 +188,10 @@ export class UserRepository {
return authableProfile;
} catch (error) {
logger.error({ err: error, email }, 'Database error in findUserWithProfileByEmail');
logger.error(
{ err: error instanceof Error ? error.message : error, email },
'Database error in findUserWithProfileByEmail',
);
throw new Error('Failed to retrieve user with profile from database.');
}
}
@@ -205,7 +214,10 @@ export class UserRepository {
return res.rows[0];
} catch (error) {
if (error instanceof NotFoundError) throw error;
logger.error({ err: error, userId }, 'Database error in findUserById');
logger.error(
{ err: error instanceof Error ? error.message : error, userId },
'Database error in findUserById',
);
throw new Error('Failed to retrieve user by ID from database.');
}
}
@@ -229,7 +241,10 @@ export class UserRepository {
return res.rows[0];
} catch (error) {
if (error instanceof NotFoundError) throw error;
logger.error({ err: error, userId }, 'Database error in findUserWithPasswordHashById');
logger.error(
{ err: error instanceof Error ? error.message : error, userId },
'Database error in findUserWithPasswordHashById',
);
throw new Error('Failed to retrieve user with sensitive data by ID from database.');
}
}
@@ -275,7 +290,10 @@ export class UserRepository {
if (error instanceof NotFoundError) {
throw error;
}
logger.error({ err: error, userId }, 'Database error in findUserProfileById');
logger.error(
{ err: error instanceof Error ? error.message : error, userId },
'Database error in findUserProfileById',
);
throw new Error('Failed to retrieve user profile from database.');
}
}
@@ -321,7 +339,10 @@ export class UserRepository {
if (error instanceof NotFoundError) {
throw error;
}
logger.error({ err: error, userId, profileData }, 'Database error in updateUserProfile');
logger.error(
{ err: error instanceof Error ? error.message : error, userId, profileData },
'Database error in updateUserProfile',
);
throw new Error('Failed to update user profile in database.');
}
}
@@ -350,7 +371,10 @@ export class UserRepository {
if (error instanceof NotFoundError) {
throw error;
}
logger.error({ err: error, userId, preferences }, 'Database error in updateUserPreferences');
logger.error(
{ err: error instanceof Error ? error.message : error, userId, preferences },
'Database error in updateUserPreferences',
);
throw new Error('Failed to update user preferences in database.');
}
}
@@ -368,7 +392,10 @@ export class UserRepository {
[passwordHash, userId]
);
} catch (error) {
logger.error({ err: error, userId }, 'Database error in updateUserPassword');
logger.error(
{ err: error instanceof Error ? error.message : error, userId },
'Database error in updateUserPassword',
);
throw new Error('Failed to update user password in database.');
}
}
@@ -382,7 +409,10 @@ export class UserRepository {
try {
await this.db.query('DELETE FROM public.users WHERE user_id = $1', [userId]);
} catch (error) {
logger.error({ err: error, userId }, 'Database error in deleteUserById');
logger.error(
{ err: error instanceof Error ? error.message : error, userId },
'Database error in deleteUserById',
);
throw new Error('Failed to delete user from database.');
}
}
@@ -400,7 +430,10 @@ export class UserRepository {
[refreshToken, userId]
);
} catch (error) {
logger.error({ err: error, userId }, 'Database error in saveRefreshToken');
logger.error(
{ err: error instanceof Error ? error.message : error, userId },
'Database error in saveRefreshToken',
);
throw new Error('Failed to save refresh token.');
}
}
@@ -423,7 +456,10 @@ export class UserRepository {
return res.rows[0];
} catch (error) {
if (error instanceof NotFoundError) throw error;
logger.error({ err: error }, 'Database error in findUserByRefreshToken');
logger.error(
{ err: error instanceof Error ? error.message : error },
'Database error in findUserByRefreshToken',
);
throw new Error('Failed to find user by refresh token.'); // Generic error for other failures
}
}
@@ -438,7 +474,10 @@ export class UserRepository {
refreshToken,
]);
} catch (error) {
logger.error({ err: error }, 'Database error in deleteRefreshToken');
logger.error(
{ err: error instanceof Error ? error.message : error },
'Database error in deleteRefreshToken',
);
}
}
@@ -461,7 +500,10 @@ export class UserRepository {
if (error instanceof Error && 'code' in error && error.code === '23503') {
throw new ForeignKeyConstraintError('The specified user does not exist.');
}
logger.error({ err: error, userId }, 'Database error in createPasswordResetToken');
logger.error(
{ err: error instanceof Error ? error.message : error, userId },
'Database error in createPasswordResetToken',
);
throw new Error('Failed to create password reset token.');
}
}
@@ -478,7 +520,10 @@ export class UserRepository {
);
return res.rows;
} catch (error) {
logger.error({ err: error }, 'Database error in getValidResetTokens');
logger.error(
{ err: error instanceof Error ? error.message : error },
'Database error in getValidResetTokens',
);
throw new Error('Failed to retrieve valid reset tokens.');
}
}
@@ -492,7 +537,10 @@ export class UserRepository {
try {
await this.db.query('DELETE FROM public.password_reset_tokens WHERE token_hash = $1', [tokenHash]);
} catch (error) {
logger.error({ err: error, tokenHash }, 'Database error in deleteResetToken');
logger.error(
{ err: error instanceof Error ? error.message : error, tokenHash },
'Database error in deleteResetToken',
);
}
}
@@ -511,7 +559,10 @@ export class UserRepository {
);
return res.rowCount ?? 0;
} catch (error) {
logger.error({ err: error }, 'Database error in deleteExpiredResetTokens');
logger.error(
{ err: error instanceof Error ? error.message : error },
'Database error in deleteExpiredResetTokens',
);
throw new Error('Failed to delete expired password reset tokens.');
}
}
@@ -530,7 +581,10 @@ export class UserRepository {
if (error instanceof Error && 'code' in error && error.code === '23503') {
throw new ForeignKeyConstraintError('One or both users do not exist.');
}
logger.error({ err: error, followerId, followingId }, 'Database error in followUser');
logger.error(
{ err: error instanceof Error ? error.message : error, followerId, followingId },
'Database error in followUser',
);
throw new Error('Failed to follow user.');
}
}
@@ -547,7 +601,10 @@ export class UserRepository {
[followerId, followingId],
);
} catch (error) {
logger.error({ err: error, followerId, followingId }, 'Database error in unfollowUser');
logger.error(
{ err: error instanceof Error ? error.message : error, followerId, followingId },
'Database error in unfollowUser',
);
throw new Error('Failed to unfollow user.');
}
}
@@ -578,7 +635,10 @@ export class UserRepository {
const res = await this.db.query<ActivityLogItem>(query, [userId, limit, offset]);
return res.rows;
} catch (error) {
logger.error({ err: error, userId, limit, offset }, 'Database error in getUserFeed');
logger.error(
{ err: error instanceof Error ? error.message : error, userId, limit, offset },
'Database error in getUserFeed',
);
throw new Error('Failed to retrieve user feed.');
}
}
@@ -600,7 +660,10 @@ export class UserRepository {
);
return res.rows[0];
} catch (error) {
logger.error({ err: error, queryData }, 'Database error in logSearchQuery');
logger.error(
{ err: error instanceof Error ? error.message : error, queryData },
'Database error in logSearchQuery',
);
throw new Error('Failed to log search query.');
}
}
@@ -634,7 +697,10 @@ export async function exportUserData(userId: string, logger: Logger): Promise<{
return { profile, watchedItems, shoppingLists };
});
} catch (error) {
logger.error({ err: error, userId }, 'Database error in exportUserData');
logger.error(
{ err: error instanceof Error ? error.message : error, userId },
'Database error in exportUserData',
);
throw new Error('Failed to export user data.');
}
}