import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { User } from '../entity/user'; import * as bcrypt from 'bcrypt'; import { FindOptionsRelations } from 'typeorm/find-options/FindOptionsRelations'; import { DvbookingLoggerService } from '../logger/dvbooking-logger.service'; @Injectable() export class UserService { constructor( @InjectRepository(User) private usersRepository: Repository, private readonly logger: DvbookingLoggerService, ) {} findAll(): Promise { this.logger.log('Finding all users', 'UserService'); return this.usersRepository.find(); } findOne(id: number): Promise { this.logger.log(`Finding user with id: ${id}`, 'UserService'); return this.usersRepository.findOneBy({ id }); } findByUsername( username: string, relations: FindOptionsRelations, ): Promise { this.logger.log(`Finding user with username: ${username}`, 'UserService'); return this.usersRepository.findOne({ where: { username }, relations }); } async create(user: Partial): Promise { this.logger.log('Creating a new user', 'UserService'); if (user.password) { user.password = await bcrypt.hash(user.password, 12); } const newUser = this.usersRepository.create(user); return this.usersRepository.save(newUser); } async update(id: number, user: Partial): Promise { this.logger.log(`Updating user with id: ${id}`, 'UserService'); if (user.password) { user.password = await bcrypt.hash(user.password, 12); } await this.usersRepository.update(id, user); return this.usersRepository.findOneBy({ id }); } async remove(id: number): Promise { this.logger.log(`Removing user with id: ${id}`, 'UserService'); await this.usersRepository.delete(id); } }