UNPKG

recoder-code

Version:

🚀 AI-powered development platform - Chat with 32+ models, build projects, automate workflows. Free models included!

161 lines • 5.68 kB
"use strict"; /** * User Service for managing user operations */ 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 User_1 = require("../entities/User"); const database_1 = require("../database"); const bcryptjs_1 = __importDefault(require("bcryptjs")); class UserService { constructor() { this.userRepository = database_1.AppDataSource.getRepository(User_1.User); } async findById(id) { return this.userRepository.findOne({ where: { id } }); } async findByUsername(username) { return this.userRepository.findOne({ where: { username } }); } async findByEmail(email) { return this.userRepository.findOne({ where: { email } }); } async create(userData) { const user = this.userRepository.create(userData); return this.userRepository.save(user); } async update(id, updates) { await this.userRepository.update(id, updates); return this.findById(id); } async validatePassword(user, password) { return bcryptjs_1.default.compare(password, user.password_hash); } async hashPassword(password) { return bcryptjs_1.default.hash(password, 10); } async authenticate(email, password) { const user = await this.findByEmail(email); if (!user) { return { success: false }; } const isValid = await this.validatePassword(user, password); if (!isValid) { return { success: false }; } return { success: true, user }; } async updateUser(id, updates) { try { const user = await this.update(id, updates); if (!user) { return { success: false, error: 'User not found' }; } return { success: true, user }; } catch (error) { return { success: false, error: 'Failed to update user' }; } } async verifyEmail(token) { try { const user = await this.userRepository.findOne({ where: { verification_token: token } }); if (!user) { return { success: false, error: 'Invalid verification token' }; } if (user.verification_expires && user.verification_expires < new Date()) { return { success: false, error: 'Verification token expired' }; } user.verifyEmail(); await this.userRepository.save(user); return { success: true, user }; } catch (error) { return { success: false, error: 'Failed to verify email' }; } } async requestPasswordReset(email) { try { const user = await this.findByEmail(email); if (!user) { // Don't reveal if email exists or not return { success: true }; } const token = user.generateResetToken(); await this.userRepository.save(user); // In a real implementation, you would send an email here // await emailService.sendPasswordResetEmail(user.email, token); return { success: true }; } catch (error) { return { success: false, error: 'Failed to process password reset request' }; } } async resetPassword(token, newPassword) { try { const user = await this.userRepository.findOne({ where: { reset_token: token } }); if (!user) { return { success: false, error: 'Invalid reset token' }; } if (user.reset_expires && user.reset_expires < new Date()) { return { success: false, error: 'Reset token expired' }; } const hashedPassword = await this.hashPassword(newPassword); user.password_hash = hashedPassword; user.clearResetToken(); await this.userRepository.save(user); return { success: true, user }; } catch (error) { return { success: false, error: 'Failed to reset password' }; } } async getUserPackages(userId) { try { const user = await this.userRepository.findOne({ where: { id: userId }, relations: ['packages'] }); return user?.packages || []; } catch (error) { return []; } } async getUserStats(userId) { try { const user = await this.findById(userId); if (!user) { return null; } return { packagesPublished: user.stats?.packages_published || 0, totalDownloads: user.stats?.total_downloads || 0, followers: user.stats?.followers || 0, following: user.stats?.following || 0, packagesMaintained: user.stats?.packages_maintained || 0 }; } catch (error) { return null; } } async deleteUser(userId) { try { const user = await this.findById(userId); if (!user) { return { success: false, error: 'User not found' }; } await this.userRepository.remove(user); return { success: true }; } catch (error) { return { success: false, error: 'Failed to delete user' }; } } } exports.UserService = UserService; //# sourceMappingURL=UserService.js.map