crud-query-class
v2.0.2
Published
Importa los módulos necesarios en tu `AppModule`:
Readme
Como usar el módulo
Configuración básica
Importa los módulos necesarios en tu AppModule:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthModule, CrudModule } from 'crud-query-class';Configuración de TypeORM Ejemplo
TypeOrmModule.forRoot({
type: 'sqlite',
database: 'test.sqlite',
synchronize: true, // No usar en producción
autoLoadEntities: true,
logging: true,
});Registrar features CRUD
Para cada entidad, usa CrudModule.forFeature():
...features.map(feature =>
CrudModule.forFeature(feature.entity, {
route: feature.route,
roles: feature.roles,
})
)Configurar autenticación
AuthModule.forRoot({
expiresIn: '1d',
secret: process.env.SECRET_KEY,
route: 'auth',
imports: [TypeOrmModule.forFeature([User])],
providers: [
MyAuthValidator,
{
provide: 'AUTH_VALIDATOR',
useExisting: MyAuthValidator,
},
],
});Crea un archivo validador con conectividad a la base de datos my-auth.validator.ts:
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import * as bcrypt from 'bcrypt';
import { User } from './entity';
import { AuthValidator } from 'crud-query-class';
@Injectable()
export class MyAuthValidator implements AuthValidator {
constructor(
@InjectRepository(User)
private readonly userRepository: Repository<User>,
) {}
async validate(body: any): Promise<any> {
const user = await this.userRepository.findOne({
where: { email: body.email },
});
if (!user) return null;
const isValid = await bcrypt.compare(body.password, user.password);
if (!isValid) return null;
return {
id: user.id,
role: user.role,
};
}
async update(id: number, data: Partial<User>) {
const existing = await this.userRepository.findOne({
where: { email: data.email },
});
if (!existing) {
throw new Error('No existe el usuario');
}
const hashedPassword = await bcrypt.hash(`${data?.password}`, 10);
await this.userRepository.update(id, {
...data,
password: hashedPassword,
});
const user = await this.userRepository.findBy({ id });
return user;
}
async create(data: Partial<User>) {
const existing = await this.userRepository.findOne({
where: { email: data.email },
});
if (existing) {
throw new Error('Email already exists');
}
const hashedPassword = await bcrypt.hash(`${data?.password}`, 10);
const user = this.userRepository.create({
...data,
password: hashedPassword,
});
return this.userRepository.save(user);
}
}Configuración de .env
SECRET_KEY = 'esta es la llave secreta';