diff --git a/src/services/userService.ts b/src/services/userService.ts index 226e71b..e4db43a 100644 --- a/src/services/userService.ts +++ b/src/services/userService.ts @@ -5,6 +5,7 @@ import prisma from '../utilities/prisma' import { User, PasswordResetToken } from '@prisma/client' import config from '../utilities/config' import NodeMailer from 'nodemailer' +import { gameLogger, httpLogger } from '../utilities/logger' /** * User service @@ -18,17 +19,23 @@ class UserService { * @param password */ async login(username: string, password: string): Promise { - const user = await UserRepository.getByUsername(username) - if (!user) { + try { + const user = await UserRepository.getByUsername(username) + if (!user) { + return false + } + + const passwordMatch = await bcrypt.compare(password, user.password) + if (!passwordMatch) { + httpLogger.error(`Failed to login user: ${username}`) + return false + } + + return user + } catch (error: any) { + httpLogger.error(`Error logging in user: ${error instanceof Error ? error.message : String(error)}`) return false } - - const passwordMatch = await bcrypt.compare(password, user.password) - if (!passwordMatch) { - return false - } - - return user } /** @@ -38,24 +45,30 @@ class UserService { * @param password */ async register(username: string, email: string, password: string): Promise { - const user = await UserRepository.getByUsername(username) - if (user) { - return false - } - - const userByEmail = await UserRepository.getByEmail(email) - if (userByEmail) { - return false - } - - const hashedPassword = await bcrypt.hash(password, 10) - return prisma.user.create({ - data: { - username, - email, - password: hashedPassword + try { + const user = await UserRepository.getByUsername(username) + if (user) { + return false } - }) + + const userByEmail = await UserRepository.getByEmail(email) + if (userByEmail) { + httpLogger.error(`User already exists: ${email}`) + return false + } + + const hashedPassword = await bcrypt.hash(password, 10) + return prisma.user.create({ + data: { + username, + email, + password: hashedPassword + } + }) + } catch (error: any) { + httpLogger.error(`Error registering user: ${error instanceof Error ? error.message : String(error)}`) + return false + } } /** @@ -111,6 +124,7 @@ class UserService { return true } catch (error: any) { + httpLogger.error(`Error sending password reset email: ${error instanceof Error ? error.message : String(error)}`) return false } } @@ -121,18 +135,23 @@ class UserService { * @param password */ async newPassword(urlToken: string, password: string): Promise { - const tokenData = await PasswordResetTokenRepository.getByToken(urlToken) - if (!tokenData) { + try { + const tokenData = await PasswordResetTokenRepository.getByToken(urlToken) + if (!tokenData) { + return false + } + + const hashedPassword = await bcrypt.hash(password, 10) + return prisma.user.update({ + where: { id: tokenData.userId }, + data: { + password: hashedPassword + } + }) + } catch (error: any) { + httpLogger.error(`Error setting new password: ${error instanceof Error ? error.message : String(error)}`) return false } - - const hashedPassword = await bcrypt.hash(password, 10) - return prisma.user.update({ - where: { id: tokenData.userId }, - data: { - password: hashedPassword - } - }) } }