lunch-rest/restaurant.hpp

73 lines
2.0 KiB
C++

#ifndef LUNCH_REST_PARSER_H
#define LUNCH_REST_PARSER_H
#include "menu.hpp"
#include <sstream>
namespace LunchRest {
class Restaurant {
public:
Restaurant() = delete;
Restaurant(const std::string &url, const std::string &restaurant) :
_url(url), _restaurant(restaurant) {
menus.resize(7);
}
virtual ~Restaurant() = default;
const std::vector<Menu> &getMenus() {
return menus;
}
const std::string &getRestaurant() {
return _restaurant;
}
virtual void parse() = 0;
void clearMenus() {
menus.clear();
permanent.clear();
menus.resize(7);
for(auto &x : menus)
x.setInvalidMenu();
menus[0].setDay("Monday");
menus[1].setDay("Tuesday");
menus[2].setDay("Wednesday");
menus[3].setDay("Thursday");
menus[4].setDay("Friday");
menus[5].setDay("Saturday");
menus[6].setDay("Sunday");
}
std::string jsonify(const std::vector<int> &days = {0,1,2,3,4,5,6}) {
std::stringstream ss{};
ss << "{\"restaurant\": \"" << getRestaurant() << "\", \"dailymenus\": [";
bool comma = false;
for(auto &day : days) {
if(static_cast<size_t>(day) > menus.size())
continue;
comma = true;
ss << menus[day].jsonify() << ",";
}
if(comma)
ss.seekp(-1, ss.cur);
ss << "], \"permanentmeals\": [";
for(auto &meal : permanent) {
ss << meal.jsonify() << ",";
}
if(permanent.size() > 0)
ss.seekp(-1, ss.cur);
ss << "]}";
return ss.str();
}
void addPermanent(const Meal &meal) {
permanent.push_back(meal);
}
void addPermanent(bool isSoup, const std::string &name, const std::string &desc, int price) {
permanent.emplace_back(isSoup, name, desc, price);
}
protected:
std::string _url;
std::string _restaurant;
std::vector<Menu> menus;
std::vector<Meal> permanent;
};
} // end of namespace LunchRest
#endif