101 lines
3.3 KiB
JavaScript
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;
|