Files
schn33fuchs 232e74c8c9 Data management and updating
Tracker for updating and getting data
Datamanager to serialize/deserialize
Main for initialization
Config for config
2026-06-02 11:53:52 +02:00

80 lines
2.5 KiB
Python

import json
from pathlib import Path
from core.user import User
from core.item import Item
from core.transaction import Transaction
class DataManager:
def __init__(self, data_dir) -> None:
self.data_dir = Path(data_dir)
self.data_dir.mkdir(exist_ok=True)
self.users_file = self.data_dir / "users.json"
self.items_file = self.data_dir / "items.json"
self.debts_file = self.data_dir / "debts.json"
self.transactions_file = self.data_dir / "transactions.json"
self._init_files()
def _init_files(self):
if not self.users_file.exists():
self._save_json(self.users_file, {})
if not self.items_file.exists():
self._save_json(self.items_file, {})
if not self.debts_file.exists():
self._save_json(self.debts_file, {})
if not self.transactions_file.exists():
self._save_json(self.transactions_file, [])
def load_users(self):
data = self._load_json(self.users_file)
return {
user_id: User.from_json(user_data) for user_id, user_data in data.items()
}
def load_items(self):
data = self._load_json(self.items_file)
return {
item_id: Item.from_json(item_data) for item_id, item_data in data.items()
}
def load_debts(self):
return self._load_json(self.debts_file)
def load_transactions(self):
data = self._load_json(self.transactions_file)
return [Transaction.from_json(t) for t in data]
def save_users(self, users):
data = {user_id: user.to_json() for user_id, user in users.items()}
self._save_json(self.users_file, data)
def save_items(self, items):
data = {item_id: item.to_json() for item_id, item in items.items()}
self._save_json(self.items_file, data)
def save_debts(self, debts):
self._save_json(self.debts_file, debts)
def save_transactions(self, transactions):
data = [t.to_json() for t in transactions]
self._save_json(self.transactions_file, data)
def _load_json(self, filepath):
try:
with open(filepath, "r") as f:
return json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
return (
{}
if filepath.name.endswith(".json")
and "transaction" not in filepath.name
else []
)
def _save_json(self, filepath, data):
with open(filepath, "w") as f:
json.dump(data, f, indent=2)