Commit 5f4e87b1 authored by Diego Iván's avatar Diego Iván
Browse files

agregando la ruta recomendada a la bd

parent 25fcc954
Loading
Loading
Loading
Loading
+13 −35
Original line number Diff line number Diff line
import { Injectable } from '@nestjs/common';
import { CreateRouteDto } from './dto/create-route.dto';
import { UpdateRouteDto } from './dto/update-route.dto';
import { InjectDataSource, InjectRepository } from '@nestjs/typeorm';
import { Route } from './entities/route.entity';
import { DataSource, In, Repository } from 'typeorm';
import { DataSource, Repository } from 'typeorm';
import { User } from 'src/user/entities/user.entity';
import { Town } from 'src/town/entities/town.entity';
import { TravelPlaceService } from 'src/travel-place/travel-place.service';
import { TravelPlace } from 'src/travel-place/entities/travel-place.entity';
import { RecommendationsSystem } from './utils/recommendations';
import { PlaceService } from 'src/place/place.service';
import { LANGUAGES } from 'src/shared/enum/languages.enum';
@@ -27,46 +24,25 @@ export class RouteService {
    private readonly placeService: PlaceService,
    private readonly visitedService: VisitedService,
  ) {}
  private async createRoute(idUser: number, idTown: number) {
    const user: User = await this.userRepository.findOneBy({ userId: idUser });
  private async createRoute(email: string, idTown: number, idPlace: number, startDate: Date, endDate: Date) {
    const user: User = await this.userRepository.findOneBy({ email });
    const town: Town = await this.townRepository.findOneBy({ townId: idTown });
    await this.routeRepository.save({ user, town, startDate: new Date(), endDate: new Date() });
    // const idRoute =  await this.routeRepository.save({ user, town, startDate, endDate });
    const idRoute = (await this.routeRepository.save({ user, town, startDate, endDate })).idRoute;
    await this.travelPlaceService.create({
      idRoute: 1,
      idPlace: 1,
      idRoute,
      idPlace,
      startDate: new Date(),
      endDate: new Date(),
      done: true,
      done: false,
    });
  }

  findAll() {
    return `This action returns all route`;
  }

  async findOne(id: number) {
    const res: any[] = await this.dataSource
      .getRepository(Route)
      .createQueryBuilder('route')
      .leftJoinAndSelect('route.travelPlace', 'travelPlace')
      .getMany();

    return res;
  }

  update(id: number, updateRouteDto: UpdateRouteDto) {
    return `This action updates a #${id} route`;
  }

  remove(id: number) {
    return `This action removes a #${id} route`;
  }

  async recommend(idTown: number, email: string, language: LANGUAGES) {
    // Obtener los visitados y los candidatos
    const places: GetPlaceDto[] = await this.placeService.findAllByTown(idTown, language);
    const placesNotVisited: GetPlaceDto[] = await this.placeService.findPlacesNotVisitedByUser(email, language, idTown);
    const visited: Visited[] = await this.visitedService.getVisitedByUser(email);
    const placesMapped: RecommendPlace[] = places.map((place) => {
    const placesMapped: RecommendPlace[] = placesNotVisited.map((place) => {
      return {
        idPlace: place.idPlace,
        openAt: place.openAt,
@@ -93,6 +69,8 @@ export class RouteService {
      placesChooen.push(await this.placeService.findOneAndTradAndAvailable(index, LANGUAGES.EN));
    }

    return placesChooen;
    for (const place of placesChooen) {
      await this.createRoute(email, idTown, place.idPlace, new Date(), new Date());
    }
  }
}