import json import os from typing import List, Optional from app.models.schemas import User DATA_DIR = "data" USERS_FILE = os.path.join(DATA_DIR, "users.json") class UserService: def __init__(self): if not os.path.exists(DATA_DIR): os.makedirs(DATA_DIR) self.users = self._load_users() # Ensure at least one admin user exists if not self.users: default_user = User(username="admin", password="admin") self.add_user(default_user) def _load_users(self) -> List[User]: if not os.path.exists(USERS_FILE): return [] try: with open(USERS_FILE, "r") as f: data = json.load(f) return [User(**u) for u in data] except Exception: return [] def _save_users(self): with open(USERS_FILE, "w") as f: json.dump([u.dict() for u in self.users], f, indent=4, default=str) def get_all_users(self) -> List[User]: return self.users def add_user(self, user: User) -> Optional[User]: if len(self.users) >= 10: return None # Avoid duplicate usernames if any(u.username == user.username for u in self.users): return None self.users.append(user) self._save_users() return user def delete_user(self, user_id: str) -> bool: # Don't allow deleting the last admin if len(self.users) <= 1: return False initial_len = len(self.users) self.users = [u for u in self.users if u.id != user_id] if len(self.users) < initial_len: self._save_users() return True return False def authenticate(self, username, password) -> Optional[User]: for user in self.users: if user.username == username and user.password == password: return user return None user_service = UserService()