Merge pull request #8119 from zzmp/fix/domain-hours-metadata-format

reformat operating hours to [[open,close]]
This commit is contained in:
Stephen Birarda 2016-06-22 09:30:12 -07:00 committed by GitHub
commit 18e4c3b94c

View file

@ -63,12 +63,16 @@ const QString DomainMetadata::Descriptors::Hours::CLOSE = "close";
DomainMetadata::DomainMetadata(QObject* domainServer) : QObject(domainServer) { DomainMetadata::DomainMetadata(QObject* domainServer) : QObject(domainServer) {
// set up the structure necessary for casting during parsing (see parseHours, esp.) // set up the structure necessary for casting during parsing (see parseHours, esp.)
_metadata[USERS] = QVariantMap {}; _metadata[USERS] = QVariantMap {};
_metadata[DESCRIPTORS] = QVariantMap { _metadata[DESCRIPTORS] = QVariantMap { {
{ Descriptors::HOURS, QVariantMap { Descriptors::HOURS, QVariantMap {
{ Descriptors::Hours::WEEKDAY, QVariantList { QVariantMap{} } }, { Descriptors::Hours::WEEKDAY, QVariantList {
{ Descriptors::Hours::WEEKEND, QVariantList { QVariantMap{} } } QVariantList{ QVariant{}, QVariant{} } }
} } },
}; { Descriptors::Hours::WEEKEND, QVariantList {
QVariantList{ QVariant{}, QVariant{} } }
}
}
} };
assert(dynamic_cast<DomainServer*>(domainServer)); assert(dynamic_cast<DomainServer*>(domainServer));
DomainServer* server = static_cast<DomainServer*>(domainServer); DomainServer* server = static_cast<DomainServer*>(domainServer);
@ -96,33 +100,37 @@ QJsonObject DomainMetadata::get(const QString& group) {
return QJsonObject::fromVariantMap(_metadata[group].toMap()); return QJsonObject::fromVariantMap(_metadata[group].toMap());
} }
// merge delta into target
// target should be of the form [ OpenTime, CloseTime ],
// delta should be of the form [ { open: Time, close: Time } ]
void parseHours(QVariant delta, QVariant& target) { void parseHours(QVariant delta, QVariant& target) {
using Hours = DomainMetadata::Descriptors::Hours; using Hours = DomainMetadata::Descriptors::Hours;
// hours should be of the form [ { open: Time, close: Time } ]
assert(target.canConvert<QVariantList>()); assert(target.canConvert<QVariantList>());
auto& targetList = *static_cast<QVariantList*>(target.data()); auto& targetList = *static_cast<QVariantList*>(target.data());
// if/when multiple ranges are allowed, this list will need to be iterated // if/when multiple ranges are allowed, this list will need to be iterated
assert(targetList[0].canConvert<QVariantMap>()); assert(targetList[0].canConvert<QVariantList>());
auto& targetMap = *static_cast<QVariantMap*>(targetList[0].data()); auto& hours = *static_cast<QVariantList*>(targetList[0].data());
auto deltaMap = delta.toList()[0].toMap(); auto deltaHours = delta.toList()[0].toMap();
if (deltaMap.isEmpty()) { if (deltaHours.isEmpty()) {
return; return;
} }
// merge delta into base // merge delta into base
auto open = deltaMap.find(Hours::OPEN); static const int OPEN_INDEX = 0;
if (open != deltaMap.end()) { static const int CLOSE_INDEX = 1;
targetMap[Hours::OPEN] = open.value(); auto open = deltaHours.find(Hours::OPEN);
if (open != deltaHours.end()) {
hours[OPEN_INDEX] = open.value();
} }
assert(targetMap[Hours::OPEN].canConvert<QString>()); assert(hours[OPEN_INDEX].canConvert<QString>());
auto close = deltaMap.find(Hours::CLOSE); auto close = deltaHours.find(Hours::CLOSE);
if (close != deltaMap.end()) { if (close != deltaHours.end()) {
targetMap[Hours::CLOSE] = close.value(); hours[CLOSE_INDEX] = close.value();
} }
assert(targetMap[Hours::CLOSE].canConvert<QString>()); assert(hours[CLOSE_INDEX].canConvert<QString>());
} }
void DomainMetadata::descriptorsChanged() { void DomainMetadata::descriptorsChanged() {