120 lines
4.0 KiB
JavaScript
120 lines
4.0 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.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
|