zkt26/z2/backend/database.py
2026-04-22 18:52:54 +02:00

61 lines
1.8 KiB
Python

import os
import bcrypt
from pymongo import MongoClient
class Database:
def __init__(self):
mongo_host = os.environ.get("MONGO_HOST", "mongodb://db:27017")
self._client = MongoClient(mongo_host)
self._db = self._client.BankAPI
self._users = self._db["Users"]
self._ensure_bank_account()
def _ensure_bank_account(self):
if not self.user_exists("BANK"):
self._users.insert_one({
"Username": "BANK",
"Password": b"",
"Own": 0,
"Debt": 0
})
def user_exists(self, username):
return self._users.find_one({"Username": username}) is not None
def register(self, username, password):
hashed = bcrypt.hashpw(password.encode("utf8"), bcrypt.gensalt())
self._users.insert_one({
"Username": username,
"Password": hashed,
"Own": 0,
"Debt": 0
})
def verify_password(self, username, password):
stored = self._users.find_one({"Username": username})["Password"]
return bcrypt.hashpw(password.encode("utf8"), stored) == stored
def get_balance(self, username):
return self._users.find_one(
{"Username": username},
{"Password": 0, "_id": 0}
)
def get_cash(self, username):
return self._users.find_one({"Username": username})["Own"]
def get_debt(self, username):
return self._users.find_one({"Username": username})["Debt"]
def update_cash(self, username, amount):
self._users.update_one(
{"Username": username},
{"$set": {"Own": amount}}
)
def update_debt(self, username, amount):
self._users.update_one(
{"Username": username},
{"$set": {"Debt": amount}}
)