#include "ShadowrunDb.hpp" #include #include "databasepool.h" #include "utils.hpp" #include "crow/logging.h" using namespace std; using namespace sqlite_orm; namespace shadowrun { int64_t createCharacter(const string& name){ if (name.empty()) return -1; int64_t id; auto db = dbpool->acquire(); auto character = db->get_optional( where(c(&ShadowrunCharacter::name) == name) ); if (character.has_value()) { id = character.value().id; } else { auto c = newShadowrunCharacter(name); id = db->insert(c); } dbpool->release(db); return id; } std::vector getCharacters(){ auto db = dbpool->acquire(); auto characters = db->get_all(); dbpool->release(db); return characters; } optional getChracter(int id) { auto db = dbpool->acquire(); optional character = db->get_optional(id); dbpool->release(db); return character; } vector getChracterData(int character_id) { auto db = dbpool->acquire(); auto characterData = db->get_all( where(c(&ShadowrunCharacterData::character_id) == character_id) ); dbpool->release(db); return characterData; } int storeCharacterData(int characterId, const Type type, const string& json){ int id; auto db = dbpool->acquire(); auto characterData = db->get_all( where( (c(&ShadowrunCharacterData::character_id) == characterId) and (c(&ShadowrunCharacterData::type) == static_cast(type))) ); if(characterData.empty()){ ShadowrunCharacterData character = newShadowrunCharacterData(characterId, type, json); id = db->insert(character); } else { if (characterData.size() > 1){ CROW_LOG_ERROR << "Character ID: " << characterId << "has mote than 1 type: " << magic_enum::enum_name(type); } auto& character = characterData[0]; character.json = json; character.updated_at = utils::currentTime(); db->update(character); id = character.id; } dbpool->release(db); return id; } int storeCharacterData(const ShadowrunCharacterData& data){ int id; auto db = dbpool->acquire(); auto characterData = db->get_optional(data.id); if(!characterData.has_value()){ id = db->insert(data); } else { db->update(data); id = data.id; } dbpool->release(db); return id; } }