saveinmed/backoffice/src/users/users.service.ts

52 lines
1.4 KiB
TypeScript

import { Injectable } from '@nestjs/common';
import { Prisma } from '@prisma/client';
import { PrismaService } from '../prisma/prisma.service';
import { CreateUserDto } from './dto/create-user.dto';
@Injectable()
export class UsersService {
constructor(private readonly prisma: PrismaService) { }
async createWithCompany(dto: CreateUserDto, hashedPassword: string) {
return this.prisma.$transaction(async (tx: Prisma.TransactionClient) => {
const company = await tx.company.create({
data: {
corporateName: dto.companyName,
cnpj: dto.cnpj || '',
licenseNumber: dto.licenseNumber || '',
},
});
return tx.user.create({
data: {
name: dto.name,
email: dto.email,
passwordHash: hashedPassword,
companyId: company.id,
role: dto.role || 'ADMIN',
},
include: { company: true },
});
});
}
async findByEmail(email: string) {
return this.prisma.user.findUnique({ where: { email } });
}
async findByEmailWithCompany(email: string) {
return this.prisma.user.findUnique({ where: { email }, include: { company: true } });
}
async findById(id: string) {
return this.prisma.user.findUnique({ where: { id }, include: { company: true } });
}
async getSafeUser(id: string) {
const user = await this.findById(id);
if (!user) return null;
const { passwordHash, ...rest } = user;
return rest;
}
}