Files
demo_spa_bot/app/db/memory.py
T
DevProject Agent 866a01d700 🔥 JSON-хранилище: данные в data/*.json вместо in-memory
- Переписан memory.py: теперь загружает/сохраняет users.json и bookings.json в data/
- booking_service.py: импорты через функции, а не переменные
- start.py, profile.py: используют get_user/set_user вместо прямого импорта users
- Добавлена папка data/ с .gitkeep
2026-06-14 19:22:27 +04:00

114 lines
2.4 KiB
Python

import json
import os
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 f:
return json.load(f)
except (json.JSONDecodeError, OSError):
return default
return default
def _save_json(path, data):
with open(path, w, encoding=utf-8) as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# ——— Users ———
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)
# ——— Bookings ———
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