chat-app/backend/dist/services/authService.js
Gal Podlipnik 99cbd6e310 backend
2025-06-12 01:23:08 +02:00

101 lines
3.3 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AuthService = void 0;
const database_js_1 = require("../config/database.js");
const env_js_1 = require("../config/env.js");
const bcryptjs_1 = __importDefault(require("bcryptjs"));
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
class AuthService {
static async register(data) {
try {
const existingUser = await database_js_1.prisma.user.findFirst({
where: {
OR: [{ email: data.email }, { username: data.username }],
},
});
if (existingUser) {
return {
success: false,
error: existingUser.email === data.email ? "Email already exists" : "Username already exists",
};
}
const hashedPassword = await bcryptjs_1.default.hash(data.password, 12);
const user = await database_js_1.prisma.user.create({
data: {
username: data.username,
email: data.email,
password: hashedPassword,
},
});
const token = this.generateToken({
userId: user.id,
username: user.username,
email: user.email,
});
return {
success: true,
data: {
token,
user: {
id: user.id,
username: user.username,
email: user.email,
},
},
};
}
catch (error) {
console.error("Registration error:", error);
return {
success: false,
error: "Registration failed",
};
}
}
static async login(data) {
try {
const user = await database_js_1.prisma.user.findUnique({
where: {
email: data.email,
},
});
if (!user || !(await bcryptjs_1.default.compare(data.password, user.password))) {
return {
success: false,
error: "Invalid email or password",
};
}
const token = this.generateToken({
userId: user.id,
username: user.username,
email: user.email,
});
return {
success: true,
data: {
token,
user: {
id: user.id,
username: user.username,
email: user.email,
},
},
};
}
catch (error) {
console.error("Login error:", error);
return {
success: false,
error: "Login failed",
};
}
}
static generateToken(payload) {
return jsonwebtoken_1.default.sign(payload, env_js_1.env.JWT_SECRET, { expiresIn: "7d" });
}
}
exports.AuthService = AuthService;