Files
demo_spa_bot/app/db/memory.py
T
DevProject Agent a6a1e0d8a9 📝 Логирование + graceful shutdown
- Добавлен app/logger.py — loguru с ротацией (консоль, файл, ошибки)
- main.py: логи старта/стопа, graceful shutdown (SIGTERM/SIGINT/stop_signal)
- Все хендлеры: логирование ключевых действий пользователя
- Логи сохраняются в logs/bot_YYYY-MM-DD.log, ротация 30 дней
- Ошибки отдельно в logs/errors_*
2026-06-14 19:43:46 +04:00

107 lines
2.4 KiB
Python

import json
from app.logger import logger
from pathlib import Path
DB_DIR = Path(__file__).resolve().parent.parent.parent / "data"
DB_DIR.mkdir(exist_ok=True)
USERS_FILE = DB_DIR / "users.json"
BOOKINGS_FILE = DB_DIR / "bookings.json"
def _load_json(path, default):
if path.exists():
try:
with open(path, "r", encoding="utf-8") as fh:
return json.load(fh)
except (json.JSONDecodeError, OSError):
return default
return default
def _save_json(path, data):
with open(path, "w", encoding="utf-8") as fh:
json.dump(data, fh, ensure_ascii=False, indent=2)
def load_users():
return _load_json(USERS_FILE, {})
def save_users(users):
_save_json(USERS_FILE, users)
def get_user(user_id):
users = load_users()
return users.get(str(user_id))
def set_user(user_id, data):
users = load_users()
users[str(user_id)] = data
save_users(users)
def load_bookings():
return _load_json(BOOKINGS_FILE, [])
def save_bookings(bookings):
_save_json(BOOKINGS_FILE, bookings)
def create_booking(user_id, service, master, date, time):
bookings = load_bookings()
booking = {
"id": len(bookings) + 1,
"user_id": user_id,
"service": service,
"master": master,
"date": date,
"time": time,
"status": "active",
}
bookings.append(booking)
save_bookings(bookings)
return booking
def get_busy_times(master, date):
bookings = load_bookings()
return [
b["time"] for b in bookings
if b["master"] == master and b["date"] == date and b["status"] == "active"
]
def get_user_bookings(user_id):
bookings = load_bookings()
return [
b for b in bookings
if b["user_id"] == user_id and b["status"] == "active"
]
def cancel_booking(booking_id):
bookings = load_bookings()
for b in bookings:
if b["id"] == booking_id:
b["status"] = "cancelled"
save_bookings(bookings)
return True
return False
def update_booking(booking_id, service, master, date, time):
bookings = load_bookings()
for b in bookings:
if b["id"] == booking_id:
b["service"] = service
b["master"] = master
b["date"] = date
b["time"] = time
save_bookings(bookings)
return b
return None