🔥 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
This commit is contained in:
+113
-2
@@ -1,2 +1,113 @@
|
||||
users = {}
|
||||
bookings = []
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user