#ifndef SERVICE_H #define SERVICE_H #include #include #include #include #include #include #include #include "core_global.h" #include "context.h" #include "iservice.h" #include "transaction.h" template class Service : public IService { public: explicit Service(QObject *parent = NULL) :IService(parent) { } explicit Service(const QString &pluginId) { m_pluginId = pluginId; } QList > all(const QString &where = "") { odb::database *db = Context::instance().db(); Q_ASSERT(db); Transaction tx; QList > ret; try { odb::result res; if (where.isEmpty()) { res = db->template query(); } else { res = db->template query(where.toStdString()); } for (typename odb::result::iterator it = res.begin(); it != res.end(); it++) { ret.append(it.load()); } tx.commit(); } catch (const odb::exception &ex) { emit dbError(ex.what()); } return ret; } void save(QSharedPointer entity) { odb::database *db = Context::instance().db(); Q_ASSERT(db); Transaction tx; try { db->persist(entity); tx.commit(); } catch (const odb::exception &ex) { emit dbError(ex.what()); emit dbErrorUpdate(ex.what()); return; } emit dataChanged(); } void update(QSharedPointer entity) { odb::database *db = Context::instance().db(); Q_ASSERT(db); Transaction tx; try { db->update(entity); tx.commit(); } catch (const odb::exception &ex) { emit dbError(ex.what()); emit dbErrorInsert(ex.what()); return; } emit dataChanged(); } QSharedPointer loadById(int id) { odb::database *db = Context::instance().db(); Q_ASSERT(db); Transaction tx; QSharedPointer entity; try { entity = db->template load(id); tx.commit(); } catch (const odb::exception &ex) { emit dbError(ex.what()); emit dbErrorRead(ex.what()); } return entity; } QSharedPointer reload(int id) { odb::database *db = Context::instance().db(); Q_ASSERT(db); Context::instance().session().cache_erase(*db, id); return loadById(id); } void erase(QSharedPointer entity) { odb::database *db = Context::instance().db(); Q_ASSERT(db); Transaction tx; try { db->erase(entity); tx.commit(); } catch (const odb::exception &ex) { emit dbError(ex.what()); emit dbErrorDelete(ex.what()); } } void setPluginId(const QString &pluginId) { m_pluginId = pluginId; } private: QString m_pluginId; }; #endif // SERVICE_H