{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://chaofeiyue.com/contracts/competition-api-v1.schema.json",
  "title": "Chaofeiyue Competition API V1",
  "description": "超飞越AI竞赛目录列表响应。未知日期和主办方必须使用 null，不得推测。",
  "type": "object",
  "required": ["schema_version", "data_version", "total", "competitions"],
  "properties": {
    "schema_version": { "const": "1.0" },
    "data_version": { "type": "string" },
    "generated_at": { "type": "string", "format": "date-time" },
    "source_of_truth": { "type": "string" },
    "page": { "type": "integer", "minimum": 1 },
    "limit": { "type": "integer", "minimum": 1, "maximum": 100 },
    "total": { "type": "integer", "minimum": 0 },
    "total_pages": { "type": "integer", "minimum": 0 },
    "filters": {
      "type": "object",
      "properties": {
        "q": { "type": "string" },
        "status": { "type": "string" },
        "discipline": { "type": "string" },
        "major": { "type": "string" },
        "tag": { "type": "string" }
      },
      "additionalProperties": false
    },
    "competitions": { "type": "array", "items": { "$ref": "#/$defs/competition" } }
  },
  "$defs": {
    "majorFit": {
      "type": "object",
      "required": ["official_code", "major", "discipline", "professional_class", "fit_score", "recommendation_level", "suggested_team", "deliverable"],
      "properties": {
        "official_code": { "type": "string" },
        "major": { "type": "string" },
        "discipline": { "type": "string" },
        "professional_class": { "type": "string" },
        "fit_score": { "type": "number", "minimum": 0, "maximum": 100 },
        "recommendation_level": { "enum": ["核心赛事", "拓展赛事"] },
        "suggested_team": { "type": "string" },
        "deliverable": { "type": "string" }
      },
      "additionalProperties": false
    },
    "competition": {
      "type": "object",
      "required": ["competition_id", "name", "aliases", "organizer", "official_url", "summary", "registration_start", "registration_end", "competition_start", "competition_end", "competition_status", "source_status", "latest_edition", "disciplines", "professional_classes", "majors", "tags", "usage_count", "source_verified_at", "updated_at"],
      "properties": {
        "competition_id": { "type": "string", "pattern": "^comp-[a-f0-9]{12}$" },
        "name": { "type": "string", "minLength": 1 },
        "aliases": { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
        "organizer": { "type": ["string", "null"] },
        "official_url": { "type": ["string", "null"], "format": "uri" },
        "summary": { "type": "string" },
        "registration_start": { "type": ["string", "null"], "format": "date" },
        "registration_end": { "type": ["string", "null"], "format": "date" },
        "competition_start": { "type": ["string", "null"], "format": "date" },
        "competition_end": { "type": ["string", "null"], "format": "date" },
        "competition_status": { "enum": ["current_edition_verified", "latest_edition_pending", "latest_notice_pending", "source_verified", "source_recheck_needed", "source_verification_needed", "catalog_included", "unverified"] },
        "source_status": { "type": "string" },
        "latest_edition": { "type": ["string", "null"] },
        "disciplines": { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
        "professional_classes": { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
        "majors": { "type": "array", "items": { "$ref": "#/$defs/majorFit" } },
        "tags": { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
        "usage_count": { "type": "integer", "minimum": 0 },
        "source_verified_at": { "type": "string", "format": "date" },
        "updated_at": { "type": "string", "format": "date-time" }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": true
}
