"""Service layer: business logic and external I/O. Modules in this package talk to Supabase, AI providers, and the file system. They never import from :mod:`app.api` (the routers depend on them, not the other way around). """ from . import ( supabase_service, challenge_loader, scenario_service, evaluator, completion_service, certificate_service, file_storage, ) from .supabase_service import ( supabase_headers, scenario_table, get_supabase_scenario_count, fetch_scenario_by_id, fetch_random_scenario_from_supabase, delete_scenario_from_supabase, insert_scenario_to_supabase, ) from .challenge_loader import ( map_encryption_row_to_training, map_code_fixing_row_to_training, map_log_analysis_row_to_training, map_vuln_hunter_row_to_training, ) from .scenario_service import ( generate_scenario_from_groq, generate_challenge_from_scenario, generate_challenge_from_groq, generate_and_store_scenario, handle_background_replacement, map_scenario_to_list_item, attach_scenario_metadata, ) from .evaluator import ( evaluate_training, evaluate_code_fix, evaluate_log_analysis, evaluate_vuln_hunter, ai_evaluate_code_fix, ) from .completion_service import ( record_user_completion, count_completions, ) from .certificate_service import ( handle_certificates, download_certificate_pdf, verify_certificate, cert_progress, make_verify_code, build_cert_title, category_label, ) from .file_storage import ( upload_challenge_file, ) __all__ = [ # modules "supabase_service", "challenge_loader", "scenario_service", "evaluator", "completion_service", "certificate_service", "file_storage", # supabase "supabase_headers", "scenario_table", "get_supabase_scenario_count", "fetch_scenario_by_id", "fetch_random_scenario_from_supabase", "delete_scenario_from_supabase", "insert_scenario_to_supabase", # challenge_loader "map_encryption_row_to_training", "map_code_fixing_row_to_training", "map_log_analysis_row_to_training", "map_vuln_hunter_row_to_training", # scenario_service "generate_scenario_from_groq", "generate_challenge_from_scenario", "generate_challenge_from_groq", "generate_and_store_scenario", "handle_background_replacement", "map_scenario_to_list_item", "attach_scenario_metadata", # evaluator "evaluate_training", "evaluate_code_fix", "evaluate_log_analysis", "evaluate_vuln_hunter", "ai_evaluate_code_fix", # completion "record_user_completion", "count_completions", # certificate "handle_certificates", "download_certificate_pdf", "verify_certificate", "cert_progress", "make_verify_code", "build_cert_title", "category_label", # file_storage "upload_challenge_file", ]