52 lines
1.4 KiB
TypeScript
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;
|
|
}
|
|
}
|