muhammadtabishkha's picture
Initial commit
08dea0f
Raw
History Blame Contribute Delete
4.63 kB
"""
db.py β€” Simple JSON file database
No MongoDB. No setup. Just a file on disk.
Data is saved in data.json automatically.
"""
import json
import os
import uuid
from datetime import datetime
DB_FILE = "data.json"
def _load():
if not os.path.exists(DB_FILE):
return {"users": {}, "expenses": {}, "debts": {}, "goals": {}}
with open(DB_FILE, "r") as f:
return json.load(f)
def _save(data):
with open(DB_FILE, "w") as f:
json.dump(data, f, indent=2, default=str)
def new_id():
return str(uuid.uuid4())
def now():
return datetime.utcnow().isoformat()
# ── Users ──────────────────────────────────────────────────────────────────────
def get_user_by_email(email):
db = _load()
for u in db["users"].values():
if u["email"] == email:
return u
return None
def get_user_by_id(uid):
return _load()["users"].get(uid)
def create_user(name, email, password_hash, income, currency="PKR"):
db = _load()
uid = new_id()
db["users"][uid] = {
"id": uid, "name": name, "email": email,
"password": password_hash, "income": income,
"currency": currency, "created_at": now()
}
_save(db)
return db["users"][uid]
def update_user_income(uid, income):
db = _load()
if uid in db["users"]:
db["users"][uid]["income"] = income
_save(db)
# ── Expenses ──────────────────────────────────────────────────────────────────
def add_expense(user_id, description, amount, type_, category, notes=None):
db = _load()
eid = new_id()
db["expenses"][eid] = {
"id": eid, "user_id": user_id, "description": description,
"amount": amount, "type": type_, "category": category,
"notes": notes, "date": now()
}
_save(db)
return db["expenses"][eid]
def get_expenses(user_id):
db = _load()
return [e for e in db["expenses"].values() if e["user_id"] == user_id]
def delete_expense(expense_id, user_id):
db = _load()
if expense_id in db["expenses"] and db["expenses"][expense_id]["user_id"] == user_id:
del db["expenses"][expense_id]
_save(db)
return True
return False
# ── Debts ─────────────────────────────────────────────────────────────────────
def add_debt(user_id, name, principal, interest_rate, monthly_payment, loan_type):
db = _load()
did = new_id()
db["debts"][did] = {
"id": did, "user_id": user_id, "name": name,
"principal": principal, "interest_rate": interest_rate,
"monthly_payment": monthly_payment, "loan_type": loan_type,
"created_at": now()
}
_save(db)
return db["debts"][did]
def get_debts(user_id):
db = _load()
return [d for d in db["debts"].values() if d["user_id"] == user_id]
def delete_debt(debt_id, user_id):
db = _load()
if debt_id in db["debts"] and db["debts"][debt_id]["user_id"] == user_id:
del db["debts"][debt_id]
_save(db)
return True
return False
# ── Goals ─────────────────────────────────────────────────────────────────────
def add_goal(user_id, name, emoji, target_amount, monthly_contribution):
db = _load()
gid = new_id()
db["goals"][gid] = {
"id": gid, "user_id": user_id, "name": name, "emoji": emoji,
"target_amount": target_amount, "current_amount": 0,
"monthly_contribution": monthly_contribution, "created_at": now()
}
_save(db)
return db["goals"][gid]
def get_goals(user_id):
db = _load()
return [g for g in db["goals"].values() if g["user_id"] == user_id]
def contribute_goal(goal_id, user_id, amount):
db = _load()
if goal_id in db["goals"] and db["goals"][goal_id]["user_id"] == user_id:
db["goals"][goal_id]["current_amount"] += amount
_save(db)
return db["goals"][goal_id]
return None
def delete_goal(goal_id, user_id):
db = _load()
if goal_id in db["goals"] and db["goals"][goal_id]["user_id"] == user_id:
del db["goals"][goal_id]
_save(db)
return True
return False