import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:flutter/foundation.dart'; class MenuiServices { final String backendURL = 'https://menui.azurewebsites.net/'; Future> fetchAutocomplete(String text) async { final response = await http.get('${backendURL}search/autocomplete?string=$text'); if (response.statusCode == 200 || response.statusCode == 304) { final List citiesDynamic = jsonDecode(response.body)['cities']; final List restaurantsDynamic = jsonDecode(response.body)['restaurants']; final List cities = citiesDynamic.cast().toList(); final List restaurants = restaurantsDynamic.cast().toList(); final List result = [...cities, ...restaurants]; return result; } else { print("coś tu nie zagrało podczas pobierania sugestii"); return []; } } Future fetchDish(String id) async { final response = await http.get('${backendURL}dish?dishId=$id'); if (response.statusCode == 200 || response.statusCode == 304) { final decoded = jsonDecode(response.body); final result = new Dish( id: decoded['_id'], restaurantId: decoded['restaurantId'], name: decoded['name'], category: decoded['category']); return result; } else { throw "Nie udało się pobrać"; } } Future fetchRestaurant(String id) async { final response = await http.get('${backendURL}restaurant?restaurantId=$id'); if (response.statusCode == 200 || response.statusCode == 304) { final decoded = jsonDecode(response.body); final workingHours = decoded['workingHours']; final tags = decoded['tags']; final links = decoded['links']; final List responseLunchMenu = decoded['lunchMenu']; List lunchMenu = []; if (responseLunchMenu != null) { for (var lunchSet in responseLunchMenu) { final MenuiLunchMenuSet thisSet = new MenuiLunchMenuSet( lunchSet['lunchSetName'], lunchSet['lunchSetPrice'], lunchSet['lunchSetDishes']); lunchMenu.add(thisSet); } } final result = new Restaurant( id: decoded['_id'], name: decoded['name'], city: decoded['city'], adress: decoded['adress'], type: decoded['type'], coordinates: decoded['coordinates'], phone: decoded['phone'], imgUrl: decoded['imgUrl'], placesId: decoded['placesId'], workingHours: new MenuiWorkingHours( workingHours['pn'], workingHours['wt'], workingHours['sr'], workingHours['cz'], workingHours['pt'], workingHours['sb'], workingHours['nd']), description: decoded['description'], links: new MenuiLinks( links['facebook'], links['instagram'], links['www']), categories: decoded['categories'], tags: new MenuiTags( tags['cardPayments'], tags['petFriendly'], tags['glutenFree'], tags['vegan'], tags['vegetarian'], tags['alcohol'], tags['delivery']), lunchHours: decoded['lunchHours'], lunchMenu: lunchMenu, dishes: decoded['dishes']); return result; } } Future> fetchSearchByString(String text) async { final response = await http.get('${backendURL}search?string=$text'); if (response.statusCode == 200 || response.statusCode == 304) { final List decoded = jsonDecode(response.body); List results = []; for (var restaurant in decoded) { final workingHours = restaurant['workingHours']; final tags = restaurant['tags']; final List responseLunchMenu = restaurant['lunchMenu']; List lunchMenu = []; if (responseLunchMenu != null) { for (var lunchSet in responseLunchMenu) { final MenuiLunchMenuSet thisSet = new MenuiLunchMenuSet( lunchSet['lunchSetName'], lunchSet['lunchSetPrice'], lunchSet['lunchSetDishes']); lunchMenu.add(thisSet); } } final result = new Restaurant( id: restaurant['_id'], name: restaurant['name'], city: restaurant['city'], adress: restaurant['adress'], type: restaurant['type'], coordinates: restaurant['coordinates'], imgUrl: restaurant['imgUrl'], placesId: restaurant['placesId'], workingHours: new MenuiWorkingHours( workingHours['pn'], workingHours['wt'], workingHours['sr'], workingHours['cz'], workingHours['pt'], workingHours['sb'], workingHours['nd']), description: restaurant['description'], tags: new MenuiTags( tags['cardPayments'], tags['petFriendly'], tags['glutenFree'], tags['vegan'], tags['vegetarian'], tags['alcohol'], tags['delivery']), lunchHours: restaurant['lunchHours'], lunchMenu: lunchMenu, dishes: restaurant['dishes']); results.add(result); } return results; } else { return []; } } String getTodayHours(MenuiWorkingHours workingHours) { final DateTime now = DateTime.now(); String todayHours; switch (now.weekday) { case 1: todayHours = formatTodayHours(workingHours.pn); break; case 2: todayHours = formatTodayHours(workingHours.wt); break; case 3: todayHours = formatTodayHours(workingHours.sr); break; case 4: todayHours = formatTodayHours(workingHours.cz); break; case 5: todayHours = formatTodayHours(workingHours.pt); break; case 6: todayHours = formatTodayHours(workingHours.sb); break; case 7: todayHours = formatTodayHours(workingHours.nd); break; } return todayHours; } String formatTodayHours(String hours) { if (hours == "") { return 'nieczynne'; } else { return hours; } } } // DATA TYPES class Restaurant { String id; String name; String city; String adress; String type; List coordinates; String placesId; String imgUrl; MenuiWorkingHours workingHours; String description; MenuiTags tags; MenuiLinks links; String phone; List categories; String lunchHours; List lunchMenu; List dishes; Restaurant( {@required this.id, @required this.name, @required this.city, @required this.adress, @required this.type, @required this.coordinates, this.placesId, @required this.imgUrl, this.workingHours, this.description, this.tags, this.links, this.phone, this.categories, this.lunchHours, this.lunchMenu, this.dishes}); } class Dish { String id; String restaurantId; String name; String category; String price; String notes; String imgUrl; String weight; MenuiAllergens allergens; String ingredients; String glicemicIndex; String kCal; bool vegan; bool vegetarian; Dish( {@required this.id, @required this.restaurantId, @required this.name, @required this.category, this.price, this.notes, this.imgUrl, this.weight, this.allergens, this.ingredients, this.glicemicIndex, this.kCal, this.vegan, this.vegetarian}); } class MenuiAllergens { bool gluten; bool lactose; bool soy; bool eggs; bool seaFood; bool peanuts; bool sesame; MenuiAllergens(this.gluten, this.lactose, this.soy, this.eggs, this.seaFood, this.peanuts, this.sesame); } class MenuiLunchMenuSet { String lunchSetName; String lunchSetPrice; List lunchSetDishes; MenuiLunchMenuSet(this.lunchSetName, this.lunchSetPrice, this.lunchSetDishes); } class MenuiLinks { String facebook; String instagram; String www; MenuiLinks(this.facebook, this.instagram, this.www); } class MenuiTags { bool cardPayments; bool petFriendly; bool glutenFree; bool vegan; bool vegetarian; bool alcohol; bool delivery; MenuiTags(this.cardPayments, this.petFriendly, this.glutenFree, this.vegan, this.vegetarian, this.alcohol, this.delivery); } class MenuiWorkingHours { String pn; String wt; String sr; String cz; String pt; String sb; String nd; MenuiWorkingHours( this.pn, this.wt, this.sr, this.cz, this.pt, this.sb, this.nd); }