"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.usersService = void 0; const bcryptjs_1 = __importDefault(require("bcryptjs")); const database_1 = require("../../config/database"); const error_handler_1 = require("../../middleware/error-handler"); const userSelect = { id: true, email: true, name: true, phone: true, role: true, status: true, permissions: true, createdVia: true, expiresAt: true, expireDays: true, lastLoginAt: true, emailVerified: true, createdAt: true, updatedAt: true, }; exports.usersService = { async findAll(filters) { const { page, limit, search, role, status } = filters; const skip = (page - 1) * limit; const where = {}; if (search) { where.OR = [ { email: { contains: search, mode: 'insensitive' } }, { name: { contains: search, mode: 'insensitive' } }, ]; } if (role) where.role = role; if (status) where.status = status; const [users, total] = await Promise.all([ database_1.prisma.user.findMany({ where, select: userSelect, skip, take: limit, orderBy: { createdAt: 'desc' }, }), database_1.prisma.user.count({ where }), ]); return { users, pagination: { page, limit, total, totalPages: Math.ceil(total / limit), }, }; }, async findById(id) { const user = await database_1.prisma.user.findUnique({ where: { id }, select: userSelect, }); if (!user) { throw new error_handler_1.AppError(404, 'User not found', 'USER_NOT_FOUND'); } return user; }, async create(data) { const existing = await database_1.prisma.user.findUnique({ where: { email: data.email } }); if (existing) { throw new error_handler_1.AppError(409, 'Email already registered', 'EMAIL_EXISTS'); } const hashedPassword = await bcryptjs_1.default.hash(data.password, 12); const user = await database_1.prisma.user.create({ data: { ...data, password: hashedPassword, expiresAt: data.expiresAt ? new Date(data.expiresAt) : undefined, }, select: userSelect, }); return user; }, async update(id, data) { const existing = await database_1.prisma.user.findUnique({ where: { id } }); if (!existing) { throw new error_handler_1.AppError(404, 'User not found', 'USER_NOT_FOUND'); } if (data.email && data.email !== existing.email) { const emailTaken = await database_1.prisma.user.findUnique({ where: { email: data.email } }); if (emailTaken) { throw new error_handler_1.AppError(409, 'Email already in use', 'EMAIL_EXISTS'); } } const updateData = { ...data }; if (data.password) { updateData.password = await bcryptjs_1.default.hash(data.password, 12); } if (data.expiresAt !== undefined) { updateData.expiresAt = data.expiresAt ? new Date(data.expiresAt) : null; } const user = await database_1.prisma.user.update({ where: { id }, data: updateData, select: userSelect, }); return user; }, async delete(id) { const existing = await database_1.prisma.user.findUnique({ where: { id } }); if (!existing) { throw new error_handler_1.AppError(404, 'User not found', 'USER_NOT_FOUND'); } await database_1.prisma.user.delete({ where: { id } }); }, }; //# sourceMappingURL=users.service.js.map