101 lines
2.6 KiB
C++
101 lines
2.6 KiB
C++
#include "ShadowrunDb.hpp"
|
|
#include <optional>
|
|
#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<ShadowrunCharacter>(
|
|
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<ShadowrunCharacter> getCharacters(){
|
|
auto db = dbpool->acquire();
|
|
auto characters = db->get_all<ShadowrunCharacter>();
|
|
dbpool->release(db);
|
|
return characters;
|
|
}
|
|
|
|
optional<ShadowrunCharacter> getChracter(int id)
|
|
{
|
|
auto db = dbpool->acquire();
|
|
optional<ShadowrunCharacter> character = db->get_optional<ShadowrunCharacter>(id);
|
|
dbpool->release(db);
|
|
return character;
|
|
}
|
|
|
|
vector<ShadowrunCharacterData> getChracterData(int character_id)
|
|
{
|
|
auto db = dbpool->acquire();
|
|
auto characterData = db->get_all<ShadowrunCharacterData>(
|
|
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<ShadowrunCharacterData>(
|
|
where(
|
|
(c(&ShadowrunCharacterData::character_id) == characterId) and
|
|
(c(&ShadowrunCharacterData::type) == static_cast<int>(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<ShadowrunCharacterData>(data.id);
|
|
|
|
if(!characterData.has_value()){
|
|
id = db->insert(data);
|
|
}
|
|
else {
|
|
db->update(data);
|
|
id = data.id;
|
|
}
|
|
dbpool->release(db);
|
|
return id;
|
|
}
|
|
|
|
} |