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