#include "basemodel.h" #include "services/beerservice.h" BaseModel::BaseModel(const QString &entity, QObject *parent) : QObject{parent}, m_entity(entity) { Q_ASSERT(!m_entity.isEmpty()); service()->connectListener(this); service()->sendCommand(m_entity, BeerService::ActionGet); } BaseModel::~BaseModel() { service()->removeListener(this); } QString BaseModel::entity() const { return m_entity; } QVariantList BaseModel::items() const { return m_data.values(); } QVariantMap BaseModel::item(const QString &itemId) const { return m_data.value(itemId).toMap(); } QVariant BaseModel::itemProperty(const QString &itemId, const QString &propertyName, const QVariant &def) const { return item(itemId).value(propertyName, def); } void BaseModel::submitItem(const QVariantMap &item) const { QString itemId = item.value("id").toString(); if (itemId.isEmpty()) { service()->sendCommand(entity(), BeerService::ActionAdd, item); } else { QVariantMap modItem = this->item(itemId); for (auto it = item.constBegin(); it != item.constEnd(); ++it) { modItem[it.key()] = it.value(); } service()->sendCommand(entity(), BeerService::ActionModify, modItem); } } void BaseModel::deleteItem(const QString &itemId) const { service()->sendCommand(entity(), BeerService::ActionDelete, QVariantMap { { "id", itemId } }); } void BaseModel::created(const QVariant &data) { modified(data); } void BaseModel::modified(const QVariant &data) { QVariantMap d = data.toMap(); m_data[d.value("id").toString()] = d; emit dataChanged(); } void BaseModel::deleted(const QVariant &data) { QString id = data.toString(); m_data.remove(id); emit dataChanged(); } void BaseModel::received(const QVariant &data) { m_data = data.toMap(); emit dataChanged(); } BeerService *BaseModel::service() const { return BeerService::instance(); }