"""Validate shared constants match backend definitions.""" import json from pathlib import Path from models import ROLE_ADMIN, ROLE_REGULAR, AppointmentStatus, InviteStatus def validate_shared_constants() -> None: """ Validate that shared/constants.json matches backend definitions. Raises ValueError if there's a mismatch. """ constants_path = Path(__file__).parent.parent / "shared" / "constants.json" if not constants_path.exists(): raise ValueError(f"Shared constants file not found: {constants_path}") with open(constants_path) as f: constants = json.load(f) # Validate roles expected_roles = {"ADMIN": ROLE_ADMIN, "REGULAR": ROLE_REGULAR} if constants.get("roles") != expected_roles: raise ValueError( f"Role mismatch in shared/constants.json. " f"Expected: {expected_roles}, Got: {constants.get('roles')}" ) # Validate invite statuses expected_invite_statuses = {s.name: s.value for s in InviteStatus} if constants.get("inviteStatuses") != expected_invite_statuses: got = constants.get("inviteStatuses") raise ValueError( f"Invite status mismatch. Expected: {expected_invite_statuses}, Got: {got}" ) # Validate appointment statuses expected_appointment_statuses = {s.name: s.value for s in AppointmentStatus} if constants.get("appointmentStatuses") != expected_appointment_statuses: got = constants.get("appointmentStatuses") raise ValueError( f"Appointment status mismatch. " f"Expected: {expected_appointment_statuses}, Got: {got}" ) # Validate booking constants exist with required fields booking = constants.get("booking", {}) required_booking_fields = [ "slotDurationMinutes", "maxAdvanceDays", "minAdvanceDays", "noteMaxLength", ] for field in required_booking_fields: if field not in booking: raise ValueError(f"Missing booking constant '{field}' in constants.json") # Validate validation rules exist (structure check only) validation = constants.get("validation", {}) required_fields = ["telegram", "signal", "nostrNpub"] for field in required_fields: if field not in validation: raise ValueError( f"Missing validation rules for '{field}' in constants.json" ) if __name__ == "__main__": validate_shared_constants() print("✓ Shared constants are valid")