- Переписан memory.py: теперь загружает/сохраняет users.json и bookings.json в data/ - booking_service.py: импорты через функции, а не переменные - start.py, profile.py: используют get_user/set_user вместо прямого импорта users - Добавлена папка data/ с .gitkeep
114 lines
2.4 KiB
Python
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
|