90 lines
1.9 KiB
C++
90 lines
1.9 KiB
C++
#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();
|
|
}
|