From 213d0057fa8a6f89d887761133c56abc0608069d Mon Sep 17 00:00:00 2001 From: anulax1225 Date: Wed, 12 Jun 2024 23:27:16 +0200 Subject: [PATCH] Working FsManager --- src/bakatools/file_system/directory.cpp | 2 +- src/bakatools/json/fs_manager.cpp | 67 +++++++++++++++++++------ src/bakatools/json/fs_manager.h | 4 +- src/bakatools/json/node.h | 2 +- src/bakatools/json/tools.cpp | 10 ++++ src/bakatools/json/tools.h | 1 + 6 files changed, 67 insertions(+), 19 deletions(-) diff --git a/src/bakatools/file_system/directory.cpp b/src/bakatools/file_system/directory.cpp index 536a4fd..875364a 100644 --- a/src/bakatools/file_system/directory.cpp +++ b/src/bakatools/file_system/directory.cpp @@ -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); } diff --git a/src/bakatools/json/fs_manager.cpp b/src/bakatools/json/fs_manager.cpp index 1ce09ae..beefd0c 100644 --- a/src/bakatools/json/fs_manager.cpp +++ b/src/bakatools/json/fs_manager.cpp @@ -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(); diff --git a/src/bakatools/json/fs_manager.h b/src/bakatools/json/fs_manager.h index 1d7a2b4..1f98fb3 100644 --- a/src/bakatools/json/fs_manager.h +++ b/src/bakatools/json/fs_manager.h @@ -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(); }; } \ No newline at end of file diff --git a/src/bakatools/json/node.h b/src/bakatools/json/node.h index 9524960..5e5f71d 100644 --- a/src/bakatools/json/node.h +++ b/src/bakatools/json/node.h @@ -7,7 +7,7 @@ namespace Bk::Json class Node; using Pointer = std::shared_ptr; - using Object = std::unordered_map; + using Object = std::map; using List = std::vector; class Node diff --git a/src/bakatools/json/tools.cpp b/src/bakatools/json/tools.cpp index 5ac24b0..8629e2f 100644 --- a/src/bakatools/json/tools.cpp +++ b/src/bakatools/json/tools.cpp @@ -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; + } } \ No newline at end of file diff --git a/src/bakatools/json/tools.h b/src/bakatools/json/tools.h index 3dcc2a5..223b948 100644 --- a/src/bakatools/json/tools.h +++ b/src/bakatools/json/tools.h @@ -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); } \ No newline at end of file