75 lines
2.5 KiB
JavaScript
75 lines
2.5 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.UserService = void 0;
|
|
const database_js_1 = require("../config/database.js");
|
|
const bcryptjs_1 = __importDefault(require("bcryptjs"));
|
|
class UserService {
|
|
static async updateProfile(userId, data) {
|
|
try {
|
|
if (data.username) {
|
|
const existingUser = await database_js_1.prisma.user.findFirst({
|
|
where: {
|
|
username: data.username,
|
|
id: { not: userId },
|
|
},
|
|
});
|
|
if (existingUser) {
|
|
return {
|
|
success: false,
|
|
error: "Username already taken",
|
|
};
|
|
}
|
|
}
|
|
if (data.email) {
|
|
const existingUser = await database_js_1.prisma.user.findFirst({
|
|
where: {
|
|
email: data.email,
|
|
id: { not: userId },
|
|
},
|
|
});
|
|
if (existingUser) {
|
|
return {
|
|
success: false,
|
|
error: "Email already taken",
|
|
};
|
|
}
|
|
}
|
|
const updateData = {};
|
|
if (data.username)
|
|
updateData.username = data.username;
|
|
if (data.email)
|
|
updateData.email = data.email;
|
|
if (data.avatar !== undefined)
|
|
updateData.avatar = data.avatar;
|
|
if (data.password) {
|
|
updateData.password = await bcryptjs_1.default.hash(data.password, 12);
|
|
}
|
|
const updatedUser = await database_js_1.prisma.user.update({
|
|
where: { id: userId },
|
|
data: updateData,
|
|
select: {
|
|
id: true,
|
|
username: true,
|
|
email: true,
|
|
avatar: true,
|
|
},
|
|
});
|
|
return {
|
|
success: true,
|
|
data: updatedUser,
|
|
};
|
|
}
|
|
catch (error) {
|
|
console.error("Update profile error:", error);
|
|
return {
|
|
success: false,
|
|
error: "Failed to update profile",
|
|
};
|
|
}
|
|
}
|
|
}
|
|
exports.UserService = UserService;
|