Commit d5e46ac9 authored by Omar Luna Hernández's avatar Omar Luna Hernández
Browse files

Se crea la lógica para crear y obtener puntos de interés a través de llamadas a la API

parent 7d3b4b0e
Loading
Loading
Loading
Loading
+59 −0
Original line number Diff line number Diff line
import axios from "axios";
import { PoiDatasourceInf } from "../../../infraestructure/datasources/poi_repository";
import { PointOfInterest } from "../../../infraestructure/entities/poi";
import { APIUrl } from "../../../constants/api_url";
import { API_ROUTE_PLACE, API_ROUTE_POINT } from "../../../constants/api_routes";
import { POIModel, POIModelToEntity } from "../../models/prod/POIModel";

export class POIDatasourceProd implements PoiDatasourceInf{
  async registerPoint(form: PointOfInterest): Promise<void> {
    const formToSend = new FormData();
    formToSend.append('idPlace', String(form.idPlace));
    formToSend.append('name', form.name);
    formToSend.append('image', form.image);
    formToSend.append('contentEN', form.contentEN);
    formToSend.append('contentES', form.contentES);
    formToSend.append('directionsEN', form.directionsEN);
    formToSend.append('directionsES', form.directionsES);

    const headers = {
      'Content-Type': 'multipart/form-data'
    };

    await axios.post(APIUrl + API_ROUTE_POINT, formToSend,{headers});
  }

  async getPOIsByPlace(idPlace: number): Promise<PointOfInterest[]> {
    const {data: dataES} = await axios.get<POIModel[]>(APIUrl + API_ROUTE_PLACE + `/${idPlace}` + API_ROUTE_POINT, {
      params: {
        lang: 'ES'
      }
    });
    
    const poiList = dataES.map((dataESModel) => {
      return POIModelToEntity(dataESModel);
    })
    
    return poiList;
  }

  async getPOIById(idPoint: number): Promise<PointOfInterest> {
    const {data: dataES} = await axios.get<POIModel>(APIUrl + API_ROUTE_POINT + `/${idPoint}`, {
      params: {
        lang: 'ES'
      }
    });

    const {data: dataEN} = await axios.get<POIModel>(APIUrl + API_ROUTE_POINT + `/${idPoint}`, {
      params: {
        lang: 'EN'
      }
    });

    const poi: PointOfInterest = POIModelToEntity(dataES);
    poi.contentEN = dataEN.content;
    poi.directionsEN = dataEN.directions;

    return poi;
  }
}
 No newline at end of file
+21 −0
Original line number Diff line number Diff line
import { PoiDatasourceInf } from "../../../infraestructure/datasources/poi_repository";
import { PointOfInterest } from "../../../infraestructure/entities/poi";
import { PoiRepositoryInf } from "../../../infraestructure/repositories/poi_repository";

export class POIRepositoryProd implements PoiRepositoryInf{
  constructor(
    private datasouce: PoiDatasourceInf
  ){}
 
  async registerPoint(form: PointOfInterest): Promise<void> {
    return this.datasouce.registerPoint(form);
  }

  async getPOIById(idPoint: number): Promise<PointOfInterest> {
    return this.datasouce.getPOIById(idPoint);
  }

  async getPOIsByPlace(idPlace: number): Promise<PointOfInterest[]> {
    return this.datasouce.getPOIsByPlace(idPlace);
  }
}
 No newline at end of file
+7 −0
Original line number Diff line number Diff line
import { PointOfInterest } from "../entities/poi";

export interface PoiDatasourceInf {
  registerPoint(form: PointOfInterest): Promise<void>;
  getPOIsByPlace(idPlace: number): Promise<PointOfInterest[]>;
  getPOIById(idPoint: number): Promise<PointOfInterest>;
}
 No newline at end of file
+7 −0
Original line number Diff line number Diff line
import { PointOfInterest } from "../entities/poi";

export interface PoiRepositoryInf {
  registerPoint(form: PointOfInterest): Promise<void>;
  getPOIsByPlace(idPlace: number): Promise<PointOfInterest[]>;
  getPOIById(idPoint: number): Promise<PointOfInterest>;
}
 No newline at end of file