Working FsManager

main
anulax1225 ago%!(EXTRA string=11 months)
parent bce0459ed3
commit 213d0057fa
  1. 2
      src/bakatools/file_system/directory.cpp
  2. 67
      src/bakatools/json/fs_manager.cpp
  3. 4
      src/bakatools/json/fs_manager.h
  4. 2
      src/bakatools/json/node.h
  5. 10
      src/bakatools/json/tools.cpp
  6. 1
      src/bakatools/json/tools.h

@ -3,7 +3,7 @@
namespace Bk {
Directory Directory::create(std::string path)
{
std::filesystem::create_directory(path);
std::filesystem::create_directories(path);
return Directory(path);
}

@ -127,17 +127,22 @@ namespace Bk::Json
if (f_list.exists())
{
auto ls = Parser(f_list).parse();
int i = id - get_page(id) * config->get_object()["page_size"]->get_int();
auto node = ls->get_p_list()->at(i);
ls->get_p_list()->at(i)->set_object(object);
write(f_list, ls);
return true;
for (int i = 0; i < ls->get_list().size(); i++)
{
auto node = ls->get_p_list()->at(i);
if (Json::as_key("id", node->get_object()) && node->get_object()["id"]->get_int() == id)
{
ls->get_p_list()->at(i)->set_object(object);
write(f_list, ls);
return true;
}
}
}
}
return false;
}
void FsManager::remove(int id)
bool FsManager::remove(int id)
{
auto f_path = Tools::string_format("%s/%d.json", path, get_page(id));
auto f_list = File(f_path);
@ -147,16 +152,15 @@ namespace Bk::Json
for (int i = 0; i < ls->get_list().size(); i++)
{
auto node = ls->get_p_list()->at(i);
if (node->get_object().find("id") != node->get_object().end())
if (Json::as_key("id", node->get_object()) && node->get_object()["id"]->get_int() == id)
{
if (node->get_object()["id"]->get_int() == id)
{
ls->get_p_list()->erase(ls->get_p_list()->begin() + i);
}
ls->get_p_list()->erase(ls->get_p_list()->begin() + i);
write(f_list, ls);
return true;
}
}
write(f_list, ls);
}
return false;
}
Pointer FsManager::findby_id(int id)
@ -168,11 +172,42 @@ namespace Bk::Json
if (f_list.exists())
{
auto ls = Parser(f_list).parse();
int i = id - get_page(id) * config->get_object()["page_size"]->get_int();
auto node = ls->get_p_list()->at(i);
auto node_id = Json::find_key("id", node->get_object());
if (!node_id->is_null() && node_id->is_type(Node::Type::NUMBER) && node_id->get_int() == id) return node;
for (int i = 0; i < ls->get_list().size(); i++)
{
auto node = ls->get_p_list()->at(i);
if (Json::as_key("id", node->get_object()))
{
if (node->get_object()["id"]->get_int() == id)
{
return node;
}
}
}
}
}
Pointer node(new Node);
node->set_null();
return node;
}
Pointer FsManager::find_all()
{
if (!config->is_null())
{
Pointer full_list(new Node);
full_list->set_list(new List);
int max_page = get_page(config->get_object()["id_count"]->get_int());
for (int i = 0; i <= max_page; i++)
{
auto f_path = Tools::string_format("%s/%d.json", path, i);
auto f_list = File(f_path);
if (f_list.exists())
{
auto ls = Parser(f_list).parse();
full_list = Json::concat(full_list->get_list(), ls->get_list());
}
}
return full_list;
}
Pointer node(new Node);
node->set_null();

@ -16,6 +16,7 @@ namespace Bk::Json
void init(bool force = false, int page_size = 100);
void config_init(int page_size);
bool exists() { return File(path + "/collection.json").exists(); }
void erase() { Directory(path).remove(); }
void set_config(Object* object);
void write(File file, Pointer& node);
@ -26,7 +27,8 @@ namespace Bk::Json
int insert(Object* object);
bool update(Object* object);
void remove(int id);
bool remove(int id);
Pointer findby_id(int id);
Pointer find_all();
};
}

@ -7,7 +7,7 @@ namespace Bk::Json
class Node;
using Pointer = std::shared_ptr<Node>;
using Object = std::unordered_map<std::string, Pointer>;
using Object = std::map<std::string, Pointer>;
using List = std::vector<Pointer>;
class Node

@ -14,4 +14,14 @@ namespace Bk::Json
{
return obj.find(name) != obj.end();
}
Pointer concat(List ls1, List ls2)
{
Pointer node(new Node);
List* new_ls = new List();
new_ls->insert(new_ls->end(), ls1.begin(), ls1.end());
new_ls->insert(new_ls->end(), ls2.begin(), ls2.end());
node->set_list(new_ls);
return node;
}
}

@ -7,4 +7,5 @@ namespace Bk::Json
{
Pointer find_key(std::string name, Object obj);
bool as_key(std::string name, Object obj);
Pointer concat(List ls1, List ls2);
}
Loading…
Cancel
Save