Advertisement
Guest User

restraurant-parser.ts

a guest
Apr 26th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { Injectable } from '@angular/core';
  2. import { StorageProvider } from '../storage/storage';
  3.  
  4. import {
  5.   TYPE_OF_RESTAURANT_BA,
  6.   TYPE_OF_RESTAURANT_CA,
  7.   TYPE_OF_RESTAURANT_PU,
  8.   TYPE_OF_RESTAURANT_RE,
  9.   TYPE_OF_RESTAURANT_CL,
  10.   TYPE_OF_RESTAURANT_BA_STRING,
  11.   TYPE_OF_RESTAURANT_CA_STRING,
  12.   TYPE_OF_RESTAURANT_RE_STRING,
  13.   TYPE_OF_RESTAURANT_PU_STRING,
  14.   TYPE_OF_RESTAURANT_CL_STRING
  15. } from '../../config/constants';
  16.  
  17. @Injectable()
  18. export class RestaurantParserProvider {
  19.   restaurantList: Restaurant[];
  20.  
  21.   constructor(private storageProv: StorageProvider) {
  22.     this.restaurantList = new Array<Restaurant>();
  23.   }
  24.  
  25.   parseMultipleRestaurants(json): Restaurant[] {
  26.     return json.reduce((acc: Restaurant[], currentRestaurant) => {
  27.       acc.push(this.parseRestaurant(currentRestaurant));
  28.       return acc;
  29.     }, new Array<Restaurant>()).sort(
  30.       (a,b) => (a.restaurantName > b.restaurantName) ? 1 : (
  31.         (b.restaurantName > a.restaurantName) ? -1 : 0
  32.       )
  33.     );
  34.   }
  35.  
  36.   private parseRestaurant(json): Restaurant {
  37.     console.log(json);
  38.     let currentRestaurant: Restaurant = {
  39.       restaurantId: json.id,
  40.       restaurantName: json.name,
  41.       restaurantSlug: json.slug,
  42.       commentary: json.commentary,
  43.       typeOfVenue: this.parseTypeOfVenue(json.type_of_venue),
  44.       country: json.country,
  45.       zipCode: json.zip_code,
  46.       state: json.state,
  47.       city: json.city,
  48.       streetname: json.streetname,
  49.       streetnumber: json.streetnumber,
  50.       openingHours: this.parseMultipleOpeningHours(json.openinghours_data),
  51.       matchedHours: this.matchOpeningHours(
  52.         this.parseMultipleOpeningHours(json.openinghours_data)
  53.       ),
  54.       restaurantLongitude: json.long,
  55.       restaurantLatitude: json.lat
  56.     }
  57.     return currentRestaurant;
  58.   }
  59.  
  60.   parseMultipleOpeningHours(json): OpeningHours[]{
  61.     return json.reduce((acc: OpeningHours[], currentOpeningHours) => {
  62.       acc.push(this.parseOpeningHours(currentOpeningHours));
  63.       return acc;
  64.     }, new Array<OpeningHours>());
  65.   }
  66.  
  67.   private parseOpeningHours(json): OpeningHours {
  68.     let currentOpeningHours: OpeningHours = {
  69.       weekday: json.weekday_name,
  70.       fromTime: json.from_hour,
  71.       toTime: json.to_hour
  72.     }
  73.     return currentOpeningHours;
  74.   }
  75.  
  76.   private parseTypeOfVenue(json): string {
  77.     switch(json){
  78.       case TYPE_OF_RESTAURANT_BA:
  79.         return TYPE_OF_RESTAURANT_BA_STRING;
  80.       case TYPE_OF_RESTAURANT_CA:
  81.         return TYPE_OF_RESTAURANT_CA_STRING
  82.       case TYPE_OF_RESTAURANT_RE:
  83.         return TYPE_OF_RESTAURANT_RE_STRING;
  84.       case TYPE_OF_RESTAURANT_PU:
  85.         return TYPE_OF_RESTAURANT_PU_STRING;
  86.       case TYPE_OF_RESTAURANT_CL:
  87.         return TYPE_OF_RESTAURANT_CL_STRING;
  88.     }
  89.   }
  90.  
  91.   private matchOpeningHours(openingHoursList: OpeningHours[]) {
  92.     return openingHoursList.reduce((acc, openingHours) => {
  93.       let timeinterval: string = openingHours.fromTime.slice(0,-3) + '-' + openingHours.toTime.slice(0,-3);
  94.       if(!(timeinterval in acc)){
  95.         acc[timeinterval] = (openingHours.weekday.slice(0,2));
  96.       } else {
  97.         acc[timeinterval] += (', ' + (openingHours.weekday.slice(0,2)));
  98.       }
  99.       return acc;
  100.     },{});
  101.   }
  102.  
  103.   saveRestaurants(): Promise<any> {
  104.     return this.storageProv.saveRestaurantData(this.restaurantList);
  105.   }
  106.  
  107. }
  108.  
  109. export interface Restaurant {
  110.   restaurantId:     number;
  111.   restaurantName:   string;
  112.   restaurantSlug:   string;
  113.   commentary:       string;
  114.   typeOfVenue:      string;
  115.   country:          string;
  116.   zipCode:          number;
  117.   state:            string;
  118.   city:             string;
  119.   streetname:       string;
  120.   streetnumber:     number;
  121.   openingHours:     OpeningHours[];
  122.   matchedHours:     {};
  123.   restaurantLongitude: number;
  124.   restaurantLatitude: number;
  125. }
  126.  
  127. export interface OpeningHours {
  128.   weekday:  string;
  129.   fromTime: string;
  130.   toTime:   string;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement