+70
-41
@@ -18,54 +18,83 @@ let PrismaUserRepository = class PrismaUserRepository {
|
||||
constructor(prisma) {
|
||||
this.prisma = prisma;
|
||||
}
|
||||
async findById(id) {
|
||||
const user = await this.prisma.user.findUnique({
|
||||
where: { id },
|
||||
});
|
||||
return prisma_user_mapper_1.PrismaUserMapper.toDomain(user);
|
||||
}
|
||||
async findByEmail(email) {
|
||||
const user = await this.prisma.user.findUnique({
|
||||
where: { email },
|
||||
});
|
||||
return prisma_user_mapper_1.PrismaUserMapper.toDomain(user);
|
||||
}
|
||||
async findAll() {
|
||||
const users = await this.prisma.user.findMany({
|
||||
where: { deleted_at: null },
|
||||
orderBy: { created_at: 'desc' },
|
||||
});
|
||||
return users.map(u => prisma_user_mapper_1.PrismaUserMapper.toDomain(u));
|
||||
}
|
||||
async create(user) {
|
||||
const created = await this.prisma.user.create({
|
||||
data: prisma_user_mapper_1.PrismaUserMapper.toPersistence(user),
|
||||
});
|
||||
const created = await this.prisma.user.create({ data: prisma_user_mapper_1.PrismaUserMapper.toPersistence(user) });
|
||||
return prisma_user_mapper_1.PrismaUserMapper.toDomain(created);
|
||||
}
|
||||
async existsById(userId) {
|
||||
const cnt = await this.prisma.user.count({ where: { id: userId } });
|
||||
return cnt > 0;
|
||||
}
|
||||
async existByEmail(userEmail) {
|
||||
const u = await this.prisma.user.findFirst({ where: { email: userEmail } });
|
||||
return !!u;
|
||||
}
|
||||
async getById(userId) {
|
||||
const row = await this.prisma.user.findUnique({ where: { id: userId }, include: { userRoles: { include: { role: { include: { permissions: { include: { permission: true } } } } } }, userPermissions: { include: { permission: true } } } });
|
||||
if (!row)
|
||||
throw new common_1.NotFoundException('User not found.');
|
||||
return prisma_user_mapper_1.PrismaUserMapper.toDomain(row);
|
||||
}
|
||||
async getByEmail(userEmail) {
|
||||
const row = await this.prisma.user.findUnique({ where: { email: userEmail }, include: { userRoles: { include: { role: { include: { permissions: { include: { permission: true } } } } } }, userPermissions: { include: { permission: true } } } });
|
||||
if (!row)
|
||||
throw new common_1.NotFoundException('User not found.');
|
||||
return prisma_user_mapper_1.PrismaUserMapper.toDomain(row);
|
||||
}
|
||||
async findByAuthentikId(authentikId) {
|
||||
const row = await this.prisma.user.findFirst({ where: { OR: [{ authentikId }, { authentikUserId: authentikId }] }, include: { userRoles: { include: { role: { include: { permissions: { include: { permission: true } } } } } }, userPermissions: { include: { permission: true } } } });
|
||||
if (!row)
|
||||
return null;
|
||||
return prisma_user_mapper_1.PrismaUserMapper.toDomain(row);
|
||||
}
|
||||
async update(user) {
|
||||
const updated = await this.prisma.user.update({
|
||||
where: {
|
||||
id: user.id,
|
||||
},
|
||||
data: prisma_user_mapper_1.PrismaUserMapper.toPersistence(user),
|
||||
});
|
||||
const updated = await this.prisma.user.update({ where: { id: user.id }, data: prisma_user_mapper_1.PrismaUserMapper.toPersistence(user), include: { userRoles: { include: { role: { include: { permissions: { include: { permission: true } } } } } }, userPermissions: { include: { permission: true } } } });
|
||||
return prisma_user_mapper_1.PrismaUserMapper.toDomain(updated);
|
||||
}
|
||||
async delete(id) {
|
||||
const user = await this.prisma.user.update({
|
||||
where: { id },
|
||||
data: { deleted_at: new Date() },
|
||||
});
|
||||
return prisma_user_mapper_1.PrismaUserMapper.toDomain(user);
|
||||
}
|
||||
async existsByEmail(email, excludeId) {
|
||||
const where = { email };
|
||||
if (excludeId) {
|
||||
where.id = { not: excludeId };
|
||||
async find(params) {
|
||||
const page = params.page && params.page > 0 ? params.page : 1;
|
||||
const limit = params.limit && params.limit > 0 ? params.limit : 25;
|
||||
const where = {};
|
||||
if (params.search) {
|
||||
where.OR = [
|
||||
{ username: { contains: params.search, mode: 'insensitive' } },
|
||||
{ name: { contains: params.search, mode: 'insensitive' } },
|
||||
{ email: { contains: params.search, mode: 'insensitive' } },
|
||||
];
|
||||
}
|
||||
const user = await this.prisma.user.findFirst({ where });
|
||||
return !!user;
|
||||
if (params.isActive !== undefined && params.isActive !== null) {
|
||||
where.isActive = params.isActive;
|
||||
}
|
||||
if (params.deleted !== undefined && params.deleted !== null) {
|
||||
if (params.deleted)
|
||||
where.deletedAt = { not: null };
|
||||
else
|
||||
where.deletedAt = null;
|
||||
}
|
||||
if (params.roleId) {
|
||||
where.userRoles = { some: { roleId: params.roleId } };
|
||||
}
|
||||
const [total, items] = await Promise.all([
|
||||
this.prisma.user.count({ where }),
|
||||
this.prisma.user.findMany({ where, skip: (page - 1) * limit, take: limit, orderBy: { createdAt: 'desc' }, include: { userRoles: { include: { role: { include: { permissions: { include: { permission: true } } } } } }, userPermissions: { include: { permission: true } } } }),
|
||||
]);
|
||||
return { data: items.map(i => prisma_user_mapper_1.PrismaUserMapper.toDomain(i)), total };
|
||||
}
|
||||
async softDelete(userId) {
|
||||
await this.prisma.user.update({ where: { id: userId }, data: { deletedAt: new Date() } });
|
||||
}
|
||||
async restore(userId) {
|
||||
const updated = await this.prisma.user.update({ where: { id: userId }, data: { deletedAt: null }, include: { userRoles: { include: { role: { include: { permissions: { include: { permission: true } } } } } }, userPermissions: { include: { permission: true } } } });
|
||||
return prisma_user_mapper_1.PrismaUserMapper.toDomain(updated);
|
||||
}
|
||||
async enable(userId) {
|
||||
const updated = await this.prisma.user.update({ where: { id: userId }, data: { isActive: true }, include: { userRoles: { include: { role: { include: { permissions: { include: { permission: true } } } } } }, userPermissions: { include: { permission: true } } } });
|
||||
return prisma_user_mapper_1.PrismaUserMapper.toDomain(updated);
|
||||
}
|
||||
async disable(userId) {
|
||||
const updated = await this.prisma.user.update({ where: { id: userId }, data: { isActive: false }, include: { userRoles: { include: { role: { include: { permissions: { include: { permission: true } } } } } }, userPermissions: { include: { permission: true } } } });
|
||||
return prisma_user_mapper_1.PrismaUserMapper.toDomain(updated);
|
||||
}
|
||||
};
|
||||
exports.PrismaUserRepository = PrismaUserRepository;
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user