Commit 6abfbd8e authored by Diego Iván's avatar Diego Iván
Browse files

agregando metodo para actualizar preferencias de usuarios

parent b190e8c9
Loading
Loading
Loading
Loading
+41 −2
Original line number Diff line number Diff line
import { Injectable } from '@nestjs/common';
import { BadRequestException, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { Repository } from 'typeorm';
import { CreateUserDto } from './dto/create-user.dto';
import { Category } from 'src/category/entities/category.entity';
import { CategoryService } from 'src/category/category.service';
import { LANGUAGES } from 'src/shared/enum/languages.enum';

@Injectable()
/**
 * Service responsible for handling user-related operations.
 */
export class UserService {
  constructor(@InjectRepository(User) private userRepository: Repository<User>) {}
  constructor(
    @InjectRepository(User) private userRepository: Repository<User>,
    private categoryService: CategoryService,
  ) {}

  async findOne(email: string) {
    return await this.userRepository.findOneBy({ email });
@@ -28,4 +34,37 @@ export class UserService {
  async updatePassword(email: string, password: string) {
    await this.userRepository.update({ email }, { password });
  }

  async updatePreferedCategories(email: string, idCategories: number[]) {
    const user = await this.userRepository.findOneBy({ email });
    const categories: Category[] = [];
    for (const idCategory of idCategories) {
      const categoryEN: Category = await this.categoryService.findOne(idCategory);
      if (!categoryEN) throw new BadRequestException('Category not found');
      categoryEN.language = LANGUAGES.EN;
      const categoryES: Category = {
        ...categoryEN,
        language: LANGUAGES.ES,
      };
      categories.push(categoryEN);
      categories.push(categoryES);
    }
    user.preferedCategories = categories;
    await this.userRepository.save(user);
  }

  async getPreferedCategories(email: string, language: LANGUAGES): Promise<any[]> {
    const user: any = await this.userRepository.findOne({
      relations: {
        preferedCategories: true,
      },
      where: {
        email,
        preferedCategories: {
          language,
        },
      },
    });
    return user?.preferedCategories || [];
  }
}