86 lines
1.7 KiB
JavaScript
86 lines
1.7 KiB
JavaScript
const bcrypt = require("bcryptjs");
|
||
const generateToken = require("../utils/generateToken");
|
||
const authDb = require("../db/auth.db");
|
||
|
||
async function login({ email, password }) {
|
||
const user = await authDb.findUserByEmail(email);
|
||
|
||
if (!user) {
|
||
const err = new Error("Kullanıcı bulunamadı.");
|
||
err.statusCode = 400;
|
||
throw err;
|
||
}
|
||
|
||
const isMatch = await bcrypt.compare(password, user.passwordHash);
|
||
if (!isMatch) {
|
||
const err = new Error("Şifre hatalı.");
|
||
err.statusCode = 401;
|
||
throw err;
|
||
}
|
||
|
||
const token = generateToken(user.id);
|
||
|
||
return {
|
||
token,
|
||
user: {
|
||
id: user.id,
|
||
username: user.username,
|
||
email: user.email,
|
||
avatarUrl: user.avatarUrl,
|
||
},
|
||
};
|
||
}
|
||
|
||
async function register({ username, email, password }) {
|
||
const existingUser = await authDb.findUserByEmail(email);
|
||
if (existingUser) {
|
||
const err = new Error("Bu e-posta zaten kayıtlı.");
|
||
err.statusCode = 400;
|
||
throw err;
|
||
}
|
||
|
||
const passwordHash = await bcrypt.hash(password, 10);
|
||
|
||
const user = await authDb.createUser({
|
||
username,
|
||
email,
|
||
passwordHash,
|
||
});
|
||
|
||
const token = generateToken(user.id);
|
||
|
||
return {
|
||
token,
|
||
user: {
|
||
id: user.id,
|
||
username: user.username,
|
||
email: user.email,
|
||
avatarUrl: user.avatarUrl ?? null,
|
||
},
|
||
};
|
||
}
|
||
|
||
async function getMe(userId) {
|
||
const user = await authDb.findUserById(userId, {
|
||
select: {
|
||
id: true,
|
||
username: true,
|
||
email: true,
|
||
avatarUrl: true,
|
||
},
|
||
});
|
||
|
||
if (!user) {
|
||
const err = new Error("Kullanıcı bulunamadı");
|
||
err.statusCode = 404;
|
||
throw err;
|
||
}
|
||
|
||
return user;
|
||
}
|
||
module.exports = {
|
||
login,
|
||
register,
|
||
getMe,
|
||
};
|