{
  "openapi": "3.0.4",
  "info": {
    "title": "SCForge \u5F00\u653E API",
    "description": "SCForge\uFF08\u751F\u5B58\u6218\u4E89\u63D2\u4EF6 / \u6A21\u7EC4\u8D44\u6E90\u5E73\u53F0\uFF09\u7684\u5BF9\u5916\u5F00\u653E\u63A5\u53E3\u3002\n\n**\u9274\u6743**\uFF1A\u8BFB\u63A5\u53E3\u533F\u540D\u53EF\u7528\uFF1B\u4E0E\u300C\u6211\u7684\u8D44\u6E90\u300D\u76F8\u5173\u7684\u8BFB\u5199\u9700\u8981 API Key \u2014\u2014 \u8BF7\u6C42\u5934 Authorization: Bearer scf_\u003Cbase64url\u003E\u3002\u7B7E\u53D1\u4E0E\u4F5C\u7528\u57DF\u89C1\u63A5\u5165\u6307\u5357\u3002\n\n**\u9519\u8BEF\u5F62\u72B6**\uFF1A\u6240\u6709\u9519\u8BEF\u54CD\u5E94\u7EDF\u4E00\u4E3A { \u0022detail\u0022: \u0022\u4E2D\u6587\u8BF4\u660E\u0022 }\uFF08\u89C1 ApiError.cs\uFF09\uFF0CHTTP \u72B6\u6001\u7801\u5373\u8BED\u4E49\uFF08400 \u53C2\u6570\u6216\u89C4\u5219\u4E0D\u5408\u6CD5\u3001401 \u672A\u767B\u5F55\u3001403 \u4F5C\u7528\u57DF\u4E0D\u8DB3\u3001404 \u8D44\u6E90\u4E0D\u5B58\u5728\u3001409 \u72B6\u6001\u51B2\u7A81\uFF09\u3002\n\n**\u65F6\u95F4**\uFF1A\u6240\u6709\u65F6\u95F4\u5B57\u6BB5\u6309\u5317\u4EAC\u65F6\u95F4\uFF08UTC\u002B8\uFF0C\u002B08:00\uFF09\u8F93\u51FA\u3002",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.cldery.com",
      "description": "\u751F\u4EA7\u73AF\u5883"
    }
  ],
  "paths": {
    "/scforge/addons": {
      "get": {
        "tags": [
          "ScforgeAddons"
        ],
        "summary": "\u5206\u9875\u641C\u7D22\uFF1Aq / category / tag / gameVersion / sort / kind / page / pageSize\u3002kind \u7701\u7565\u5373\u63D2\u4EF6\u4E0E\u6A21\u7EC4\u90FD\u8FD4\u56DE\u3002",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tag",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "gameVersion",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 24
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "ScforgeAddons"
        ],
        "summary": "\u53D1\u5E03\u65B0\u8D44\u6E90\uFF08multipart/form-data\uFF09\u3002\u63D0\u4EA4\u540E\u8FDB\u5165\u5F85\u5BA1\u6838\uFF0C\u7BA1\u7406\u5458\u901A\u8FC7\u540E\u624D\u5BF9\u516C\u4F17\u53EF\u89C1\u3002\r\nkind \u51B3\u5B9A\u662F\u63D2\u4EF6\uFF08plugin\uFF09\u8FD8\u662F\u6A21\u7EC4\uFF08mod\uFF09\uFF0C\u521B\u5EFA\u540E\u4E0D\u53EF\u66F4\u6539\uFF0C\u5305\u6587\u4EF6\u6309 kind \u6821\u9A8C\u6269\u5C55\u540D\u3002\r\n\u8BF7\u6C42\u4F53\u4E0A\u9650\u6309\u300C\u8D44\u6E90\u5305\u4E0A\u9650 \u002B \u56FE\u7247\u9884\u7B97\u300D\u653E\u5BBD\uFF0C\u5426\u5219\u5927\u5305\u4F1A\u88AB Kestrel \u7684 30MB \u9ED8\u8BA4\u503C\u6321\u4E0B\u3002",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "Package": {
                    "type": "string",
                    "description": "\u8D44\u6E90\u5305\uFF08\u5FC5\u586B\uFF09\uFF1A.dll\uFF08\u63D2\u4EF6\uFF09\u6216 .netmod\uFF08\u6A21\u7EC4\uFF0C\u4F1A\u4E0B\u53D1\u5230\u5BA2\u6237\u7AEF\uFF09\u3002",
                    "format": "binary"
                  },
                  "Kind": {
                    "type": "string",
                    "description": "\u8D44\u6E90\u7C7B\u578B\uFF1Aplugin\uFF08\u63D2\u4EF6\uFF0C\u4EC5\u670D\u52A1\u7AEF\uFF09\u6216 mod\uFF08\u6A21\u7EC4\uFF0C\u4F1A\u4E0B\u53D1\u5230\u5BA2\u6237\u7AEF\uFF09\u3002\u521B\u5EFA\u540E\u4E0D\u53EF\u66F4\u6539\u3002"
                  },
                  "Name": {
                    "type": "string"
                  },
                  "Slug": {
                    "type": "string"
                  },
                  "Summary": {
                    "type": "string"
                  },
                  "Description": {
                    "type": "string"
                  },
                  "Readme": {
                    "type": "string"
                  },
                  "Category": {
                    "type": "string"
                  },
                  "GameVersion": {
                    "type": "string"
                  },
                  "Tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "\u6807\u7B7E\u952E\uFF1B\u540C\u540D\u591A\u503C\u53EF\u5728\u8868\u5355\u91CC\u91CD\u590D\u51FA\u73B0\u3002"
                  },
                  "SourceUrl": {
                    "type": "string"
                  },
                  "IssuesUrl": {
                    "type": "string"
                  },
                  "License": {
                    "type": "string"
                  },
                  "LicenseUrl": {
                    "type": "string"
                  },
                  "DonationUrl": {
                    "type": "string"
                  },
                  "DiscordUrl": {
                    "type": "string"
                  },
                  "Icon": {
                    "type": "string",
                    "description": "\u8D44\u6E90\u56FE\u6807\uFF08\u53EF\u9009\uFF09\uFF1AJPG / PNG / WebP / GIF\u3002",
                    "format": "binary"
                  },
                  "Gallery": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "binary"
                    },
                    "description": "\u622A\u56FE\uFF08\u53EF\u9009\uFF0C\u6700\u591A 6 \u5F20\uFF09\u3002"
                  },
                  "Version": {
                    "type": "string"
                  },
                  "Channel": {
                    "type": "string"
                  },
                  "Changelog": {
                    "type": "string"
                  },
                  "GameVersions": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "Dependencies": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              },
              "encoding": {
                "Package": {
                  "style": "form"
                },
                "Kind": {
                  "style": "form"
                },
                "Name": {
                  "style": "form"
                },
                "Slug": {
                  "style": "form"
                },
                "Summary": {
                  "style": "form"
                },
                "Description": {
                  "style": "form"
                },
                "Readme": {
                  "style": "form"
                },
                "Category": {
                  "style": "form"
                },
                "GameVersion": {
                  "style": "form"
                },
                "Tags": {
                  "style": "form"
                },
                "SourceUrl": {
                  "style": "form"
                },
                "IssuesUrl": {
                  "style": "form"
                },
                "License": {
                  "style": "form"
                },
                "LicenseUrl": {
                  "style": "form"
                },
                "DonationUrl": {
                  "style": "form"
                },
                "DiscordUrl": {
                  "style": "form"
                },
                "Icon": {
                  "style": "form"
                },
                "Gallery": {
                  "style": "form"
                },
                "Version": {
                  "style": "form"
                },
                "Channel": {
                  "style": "form"
                },
                "Changelog": {
                  "style": "form"
                },
                "GameVersions": {
                  "style": "form"
                },
                "Dependencies": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/addons/featured": {
      "get": {
        "tags": [
          "ScforgeAddons"
        ],
        "summary": "\u9996\u9875\u7CBE\u9009\uFF1A\u663E\u5F0F\u7CBE\u9009\u4F18\u5148\uFF0C\u4E0D\u8DB3\u65F6\u6309\u51C0\u8BC4\u5206\u8865\u9F50\uFF1Bkind \u53EF\u9650\u5B9A\u53EA\u770B\u63D2\u4EF6\u6216\u53EA\u770B\u6A21\u7EC4\u3002",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 6
            }
          },
          {
            "name": "kind",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/addons/recent": {
      "get": {
        "tags": [
          "ScforgeAddons"
        ],
        "summary": "\u6700\u8FD1\u66F4\u65B0\uFF1Bkind \u53EF\u9650\u5B9A\u53EA\u770B\u63D2\u4EF6\u6216\u53EA\u770B\u6A21\u7EC4\u3002",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 8
            }
          },
          {
            "name": "kind",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/addons/mine": {
      "get": {
        "tags": [
          "ScforgeAddons"
        ],
        "summary": "\u5F53\u524D\u7528\u6237\u53D1\u5E03\u7684\u8D44\u6E90\uFF08\u542B\u5F85\u5BA1\u6838\u4E0E\u5DF2\u9A73\u56DE\uFF09\u3002",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/addons/mine/summary": {
      "get": {
        "tags": [
          "ScforgeAddons"
        ],
        "summary": "\u300C\u6211\u7684\u8D44\u6E90\u300D\u9875\u7684\u7EDF\u8BA1\u5361\uFF08\u542B\u4E09\u79CD\u5BA1\u6838\u72B6\u6001\u7684\u6570\u91CF\uFF09\u3002",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/addons/{idOrSlug}": {
      "get": {
        "tags": [
          "ScforgeAddons"
        ],
        "summary": "\u8BE6\u60C5\uFF1AidOrSlug \u63A5\u53D7 GUID \u6216 slug\u3002",
        "parameters": [
          {
            "name": "idOrSlug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/addons/{id}": {
      "put": {
        "tags": [
          "ScforgeAddons"
        ],
        "summary": "\u7F16\u8F91\u8D44\u6E90\u8D44\u6599\uFF08\u4F5C\u8005\uFF0Cmultipart\uFF09\uFF1A\u7F16\u8F91\u4F1A\u91CD\u65B0\u8FDB\u5165\u5F85\u5BA1\u6838\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "Summary": {
                    "type": "string"
                  },
                  "Description": {
                    "type": "string"
                  },
                  "Readme": {
                    "type": "string"
                  },
                  "Category": {
                    "type": "string"
                  },
                  "GameVersion": {
                    "type": "string"
                  },
                  "Tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "SourceUrl": {
                    "type": "string"
                  },
                  "IssuesUrl": {
                    "type": "string"
                  },
                  "License": {
                    "type": "string"
                  },
                  "LicenseUrl": {
                    "type": "string"
                  },
                  "DonationUrl": {
                    "type": "string"
                  },
                  "DiscordUrl": {
                    "type": "string"
                  },
                  "Icon": {
                    "type": "string",
                    "description": "\u4F20\u5165\u5373\u66FF\u6362\u56FE\u6807\u3002",
                    "format": "binary"
                  },
                  "Gallery": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "binary"
                    },
                    "description": "\u4F20\u5165\u5373\u6574\u4F53\u66FF\u6362\u622A\u56FE\u5217\u8868\uFF08\u6700\u591A 6 \u5F20\uFF09\u3002"
                  },
                  "ClearIcon": {
                    "type": "boolean",
                    "description": "\u6E05\u7A7A\u56FE\u6807\u3002"
                  },
                  "ClearGallery": {
                    "type": "boolean",
                    "description": "\u6E05\u7A7A\u622A\u56FE\u3002"
                  }
                }
              },
              "encoding": {
                "Summary": {
                  "style": "form"
                },
                "Description": {
                  "style": "form"
                },
                "Readme": {
                  "style": "form"
                },
                "Category": {
                  "style": "form"
                },
                "GameVersion": {
                  "style": "form"
                },
                "Tags": {
                  "style": "form"
                },
                "SourceUrl": {
                  "style": "form"
                },
                "IssuesUrl": {
                  "style": "form"
                },
                "License": {
                  "style": "form"
                },
                "LicenseUrl": {
                  "style": "form"
                },
                "DonationUrl": {
                  "style": "form"
                },
                "DiscordUrl": {
                  "style": "form"
                },
                "Icon": {
                  "style": "form"
                },
                "Gallery": {
                  "style": "form"
                },
                "ClearIcon": {
                  "style": "form"
                },
                "ClearGallery": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "ScforgeAddons"
        ],
        "summary": "\u5220\u9664\u8D44\u6E90\uFF08\u8FDE\u540C\u7248\u672C\u3001\u8BC4\u8BBA\u4E0E\u6295\u7968\uFF09\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/addons/{id}/versions": {
      "post": {
        "tags": [
          "ScforgeAddons"
        ],
        "summary": "\u8FFD\u52A0\u4E00\u4E2A\u7248\u672C\uFF08multipart\uFF09\uFF1A\u65B0\u7248\u672C\u8FDB\u5165\u5F85\u5BA1\u6838\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "Package": {
                    "type": "string",
                    "format": "binary"
                  },
                  "Version": {
                    "type": "string"
                  },
                  "Channel": {
                    "type": "string"
                  },
                  "Changelog": {
                    "type": "string"
                  },
                  "GameVersions": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "Dependencies": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "GameVersion": {
                    "type": "string",
                    "description": "\u7F3A\u7701\u65F6\u6CBF\u7528\u8D44\u6E90\u7684\u4E3B\u6E38\u620F\u7248\u672C\u3002"
                  }
                }
              },
              "encoding": {
                "Package": {
                  "style": "form"
                },
                "Version": {
                  "style": "form"
                },
                "Channel": {
                  "style": "form"
                },
                "Changelog": {
                  "style": "form"
                },
                "GameVersions": {
                  "style": "form"
                },
                "Dependencies": {
                  "style": "form"
                },
                "GameVersion": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/addons/{id}/resubmit": {
      "post": {
        "tags": [
          "ScforgeAddons"
        ],
        "summary": "\u628A\u88AB\u9A73\u56DE\u7684\u8D44\u6E90\u91CD\u65B0\u63D0\u4EA4\u5BA1\u6838\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/addons/{id}/vote": {
      "get": {
        "tags": [
          "ScforgeAddons"
        ],
        "summary": "\u5F53\u524D\u7528\u6237\u5BF9\u67D0\u8D44\u6E90\u7684\u6295\u7968\u72B6\u6001\uFF08\u533F\u540D\u53EF\u8C03\uFF0C\u6052\u4E3A 0\uFF09\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "ScforgeAddons"
        ],
        "summary": "\u64A4\u9500\u6295\u7968\uFF08\u5E42\u7B49\uFF1A\u6CA1\u6709\u7968\u4E5F\u7B97\u6210\u529F\uFF09\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/addons/{id}/vote/up": {
      "put": {
        "tags": [
          "ScforgeAddons"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/addons/{id}/vote/down": {
      "put": {
        "tags": [
          "ScforgeAddons"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/api-keys/scopes": {
      "get": {
        "tags": [
          "ScforgeApiKeys"
        ],
        "summary": "\u53EF\u6388\u4E88\u7684\u4F5C\u7528\u57DF\u6E05\u5355\uFF08\u542B\u4E2D\u6587\u540D\u4E0E\u8BF4\u660E\uFF09\uFF0C\u4F9B\u754C\u9762\u6E32\u67D3\u52FE\u9009\u9879\u3002",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/api-keys": {
      "get": {
        "tags": [
          "ScforgeApiKeys"
        ],
        "summary": "\u6211\u7684 Key \u5217\u8868\uFF08\u542B\u5DF2\u540A\u9500\uFF0C\u4FBF\u4E8E\u786E\u8BA4\u0022\u90A3\u628A\u65E7\u7684\u771F\u7684\u5931\u6548\u4E86\u0022\uFF09\u3002",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "ScforgeApiKeys"
        ],
        "summary": "\u7B7E\u53D1\u4E00\u628A\u65B0 Key\u3002**\u54CD\u5E94\u91CC\u7684 token \u53EA\u51FA\u73B0\u8FD9\u4E00\u6B21** \u2014\u2014 \u8BF7\u7ACB\u523B\u4FDD\u5B58\uFF0C\u4E4B\u540E\u65E0\u6CD5\u518D\u53D6\u56DE\u3002",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeApiKeyCreateForm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeApiKeyCreateForm"
              }
            },
            "application/*\u002Bjson": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeApiKeyCreateForm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/api-keys/{id}/revoke": {
      "post": {
        "tags": [
          "ScforgeApiKeys"
        ],
        "summary": "\u540A\u9500\u81EA\u5DF1\u7684\u67D0\u628A Key\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeApiKeyRevokeForm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeApiKeyRevokeForm"
              }
            },
            "application/*\u002Bjson": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeApiKeyRevokeForm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/api-keys/{id}/rotate": {
      "post": {
        "tags": [
          "ScforgeApiKeys"
        ],
        "summary": "\u8F6E\u6362\uFF1A\u540A\u9500\u65E7\u7684\u3001\u7B7E\u53D1\u4E00\u628A\u540C\u6743\u9650\u7684\u65B0 Key\uFF08\u7528\u4E8E\u6CC4\u9732\u540E\u4E00\u952E\u6362\u9501\uFF09\u3002\r\n\u54CD\u5E94\u540C\u6837\u53EA\u5E26\u4E00\u6B21\u660E\u6587\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/addons/{addonId}/comments": {
      "get": {
        "tags": [
          "ScforgeComments"
        ],
        "summary": "\u8D44\u6E90\u7684\u8BC4\u8BBA\u6811\uFF08\u9876\u5C42\u8BC4\u8BBA \u002B \u5D4C\u5957\u56DE\u590D\uFF09\u3002",
        "parameters": [
          {
            "name": "addonId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "ScforgeComments"
        ],
        "summary": "\u53D1\u8868\u8BC4\u8BBA\uFF1B\u5E26 parentId \u65F6\u662F\u5BF9\u67D0\u6761\u8BC4\u8BBA\u7684\u56DE\u590D\u3002",
        "parameters": [
          {
            "name": "addonId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeCommentCreateIn"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeCommentCreateIn"
              }
            },
            "application/*\u002Bjson": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeCommentCreateIn"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/comments/{id}": {
      "patch": {
        "tags": [
          "ScforgeComments"
        ],
        "summary": "\u7F16\u8F91\u81EA\u5DF1\u7684\u8BC4\u8BBA\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeCommentUpdateIn"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeCommentUpdateIn"
              }
            },
            "application/*\u002Bjson": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeCommentUpdateIn"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "ScforgeComments"
        ],
        "summary": "\u5220\u9664\u8BC4\u8BBA\u53CA\u5176\u5168\u90E8\u56DE\u590D\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/comments/{id}/vote/up": {
      "put": {
        "tags": [
          "ScforgeComments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/comments/{id}/vote/down": {
      "put": {
        "tags": [
          "ScforgeComments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/comments/{id}/vote": {
      "delete": {
        "tags": [
          "ScforgeComments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/game-versions": {
      "get": {
        "tags": [
          "ScforgeGameVersions"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/versions/{id}/download": {
      "get": {
        "tags": [
          "ScforgeVersions"
        ],
        "summary": "\u4E0B\u8F7D\u67D0\u4E2A\u7248\u672C\u3002\u4E0B\u8F7D\u5165\u53E3\u7EDF\u4E00\u8D70\u8FD9\u91CC\uFF08\u800C\u4E0D\u662F\u9759\u6001\u76EE\u5F55\uFF09\uFF0C\r\n\u8FD9\u6837\u672A\u901A\u8FC7\u5BA1\u6838\u7684\u7248\u672C\u4E0D\u4F1A\u88AB\u76F4\u63A5\u62FF\u5230\uFF0C\u4E0B\u8F7D\u6B21\u6570\u4E5F\u624D\u6709\u552F\u4E00\u53E3\u5F84\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/versions/{id}": {
      "patch": {
        "tags": [
          "ScforgeVersions"
        ],
        "summary": "\u7F16\u8F91\u7248\u672C\u5143\u6570\u636E\uFF08\u4EC5\u4F5C\u8005\uFF09\uFF1A\u91CD\u65B0\u8FDB\u5165\u5F85\u5BA1\u6838\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeVersionEditIn"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeVersionEditIn"
              }
            },
            "application/*\u002Bjson": {
              "schema": {
                "$ref": "#/components/schemas/ScforgeVersionEditIn"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "ScforgeVersions"
        ],
        "summary": "\u5220\u9664\u4E00\u4E2A\u7248\u672C\uFF08\u4EC5\u4F5C\u8005\uFF09\u3002\u5220\u9664\u662F\u4E0B\u67B6\u52A8\u4F5C\uFF0C\u4E0D\u9700\u8981\u5BA1\u6838\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/versions/{id}/file": {
      "post": {
        "tags": [
          "ScforgeVersions"
        ],
        "summary": "\u66FF\u6362\u7248\u672C\u7684\u63D2\u4EF6\u5305\u6587\u4EF6\uFF08\u4EC5\u4F5C\u8005\uFF09\uFF1A\u91CD\u65B0\u8FDB\u5165\u5F85\u5BA1\u6838\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "Package": {
                    "type": "string",
                    "format": "binary"
                  }
                }
              },
              "encoding": {
                "Package": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/scforge/versions/{id}/resubmit": {
      "post": {
        "tags": [
          "ScforgeVersions"
        ],
        "summary": "\u628A\u88AB\u9A73\u56DE\u7684\u7248\u672C\u91CD\u65B0\u63D0\u4EA4\u5BA1\u6838\u3002",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ScforgeApiKeyCreateForm": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "\u8FD9\u628A Key \u7684\u540D\u5B57\uFF0C\u4F8B\uFF1A\u300C\u53D1\u7248\u673A\u5668\u4EBA\u300D\u3002\u7559\u7A7A\u6309\u300C\u672A\u547D\u540D\u300D\u5904\u7406\u3002",
            "nullable": true
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "\u4F5C\u7528\u57DF\u952E\uFF1B\u53EF\u4ECE \u0060GET /scforge/api-keys/scopes\u0060 \u53D6\u5408\u6CD5\u503C\u3002\u81F3\u5C11\u4E00\u4E2A\u3002",
            "nullable": true
          },
          "expiresAt": {
            "type": "string",
            "description": "\u8FC7\u671F\u65F6\u95F4\uFF08UTC\uFF09\u3002\u7559\u7A7A = \u957F\u671F\u6709\u6548\u3002",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "\u7B7E\u53D1\u4E00\u628A API Key \u7684\u8868\u5355\uFF08application/json \u5373\u53EF\uFF0C\u4E0D\u5FC5 multipart\uFF09\u3002"
      },
      "ScforgeApiKeyRevokeForm": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "description": "\u540A\u9500\u539F\u56E0\uFF0C\u5199\u5165\u5BA1\u8BA1\u8BB0\u5F55\uFF0C\u4FBF\u4E8E\u65E5\u540E\u8FFD\u6EAF\u3002",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "\u540A\u9500\u4E00\u628A Key\u3002"
      },
      "ScforgeCommentCreateIn": {
        "type": "object",
        "properties": {
          "body": {
            "type": "string",
            "nullable": true
          },
          "parentId": {
            "type": "string",
            "description": "\u7236\u8BC4\u8BBA Id\uFF1A\u4E3A\u7A7A\u5373\u9876\u5C42\u8BC4\u8BBA\u3002",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "\u53D1\u8868\u8BC4\u8BBA\u6216\u56DE\u590D\u3002"
      },
      "ScforgeCommentUpdateIn": {
        "type": "object",
        "properties": {
          "body": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "\u7F16\u8F91\u81EA\u5DF1\u8BC4\u8BBA\u7684\u6B63\u6587\u3002"
      },
      "ScforgeVersionEditIn": {
        "type": "object",
        "properties": {
          "channel": {
            "type": "string",
            "nullable": true
          },
          "changelog": {
            "type": "string",
            "nullable": true
          },
          "gameVersion": {
            "type": "string",
            "nullable": true
          },
          "gameVersions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "dependencies": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "\u7F16\u8F91\u4E00\u4E2A\u7248\u672C\u7684\u5143\u6570\u636E\uFF08JSON\uFF09\uFF1B\u7F16\u8F91\u4F1A\u91CD\u65B0\u8FDB\u5165\u5F85\u5BA1\u6838\u3002"
      }
    },
    "securitySchemes": {
      "ScforgeApiKey": {
        "type": "http",
        "description": "SCForge API Key\uFF08scf_ \u5F00\u5934\uFF09\u3002\u8BFB\u63A5\u53E3\u533F\u540D\u4E5F\u53EF\u8C03\u7528\uFF0C\u5E26\u4E0A Key \u624D\u80FD\u8BBF\u95EE\u300C\u6211\u7684\u8D44\u6E90\u300D\u4E0E\u5199\u63A5\u53E3\u3002",
        "scheme": "bearer",
        "bearerFormat": "scf_\u003Cbase64url\u003E"
      }
    }
  },
  "security": [
    {
      "ScforgeApiKey": []
    }
  ],
  "tags": [
    {
      "name": "ScforgeAddons",
      "description": "\u8D44\u6E90\u76EE\u5F55\u4E0E\u53D1\u5E03\u63A5\u53E3\uFF08\u8DEF\u7531\u524D\u7F00 \u0060/scforge/addons\u0060\uFF09\u3002\r\n            \r\n\u300C\u8D44\u6E90\u300D= \u63D2\u4EF6\uFF08\u0060kind=plugin\u0060\uFF0C\u4EC5\u670D\u52A1\u7AEF\uFF09\u4E0E\u6A21\u7EC4\uFF08\u0060kind=mod\u0060\uFF0C\u4F1A\u4E0B\u53D1\u5230\u5BA2\u6237\u7AEF\uFF09\u4E24\u7C7B\uFF0C\r\n\u5171\u7528\u540C\u4E00\u68F5\u8D44\u6E90\u6811\u4E0E\u540C\u4E00\u5957\u63A5\u53E3\uFF0C\u9760 \u0060kind\u0060 \u5B57\u6BB5\uFF08\u67E5\u8BE2\u53C2\u6570 / \u54CD\u5E94\u5B57\u6BB5\uFF09\u533A\u5206\uFF1B\r\n\u754C\u9762\u4E0A\u7684\u300C\u63D2\u4EF6\u300D\u300C\u6A21\u7EC4\u300D\u4E24\u4E2A\u677F\u5757\u53EA\u662F\u5BF9 \u0060kind\u0060 \u7684\u9884\u8BBE\u7B5B\u9009\u3002\r\n            \r\n\u8BFB\u53D6\u63A5\u53E3\u533F\u540D\u53EF\u7528\uFF08\u53EA\u770B\u5DF2\u901A\u8FC7\u5BA1\u6838\u7684\u5185\u5BB9\uFF09\uFF0C\u767B\u5F55\u540E\u989D\u5916\u56DE\u4F20\u300C\u6211\u7684\u6295\u7968\u300D\uFF1B\r\n\u5199\u5165\u63A5\u53E3\u8981\u6C42 Cookie \u4F1A\u8BDD\uFF0C**\u53D1\u5E03\u4E0E\u7F16\u8F91\u53EA\u5C5E\u4E8E\u4F5C\u8005\u672C\u4EBA**\uFF1B\r\n\u7BA1\u7406\u5458\u7684\u5185\u5BB9\u7BA1\u7406\u8D70 \u0060/scforge/admin\u0060\u3002"
    },
    {
      "name": "ScforgeApiKeys",
      "description": "API Key \u7684**\u81EA\u52A9**\u7BA1\u7406\uFF08\u8DEF\u7531\u524D\u7F00 \u0060/scforge/api-keys\u0060\uFF09\u3002\r\n            \r\n\u4E0E\u540E\u53F0\u7684 \u0060/scforge/admin/api-keys\u0060 \u5206\u5F00\uFF1A\u8FD9\u91CC\u53EA\u7BA1\u300C\u767B\u5F55\u7528\u6237\u7BA1\u81EA\u5DF1\u7684 Key\u300D\uFF0C\r\n\u540E\u53F0\u662F\u8D85\u7BA1\u5DE1\u68C0\u5168\u7AD9\uFF08\u542B\u4ED6\u4EBA Key \u7684\u540A\u9500\uFF09\u3002\r\n            \r\n\u8BA4\u8BC1\u65B9\u5F0F\u4E0E SCForge \u5176\u4F59\u5199\u7AEF\u70B9\u4E00\u81F4\uFF1A\u4E0D\u6302 \u0060[Authorize]\u0060\uFF0C\u7531\r\nClouderyApi.Modules.Scforge.Api.ScforgeControllerBase \u7684\u5F02\u5E38\u7FFB\u8BD1\u4EA7\u51FA\r\n\u0060{\u0022detail\u0022:\u0022\u2026\u0022}\u0060\uFF08\u7EDF\u4E00\u9519\u8BEF\u4F53\uFF09\uFF1B\u8C03\u7528\u8005\u8EAB\u4EFD\u7531 Cookie \u4F1A\u8BDD\u6216 API Key \u4E24\u6761\u901A\u9053\u4E4B\u4E00\u63D0\u4F9B\u3002"
    },
    {
      "name": "ScforgeComments",
      "description": "\u8BC4\u8BBA\u4E0E\u8BC4\u8BBA\u6295\u7968\uFF08\u8DEF\u7531\u524D\u7F00 \u0060/scforge\u0060\uFF09\u3002\r\n            \r\n\u8BFB\u53D6\u533F\u540D\u53EF\u7528\uFF08\u672A\u767B\u5F55\u65F6 myVote \u6052\u4E3A 0\u3001canEdit / canDelete \u4E3A false\uFF09\uFF1B\r\n\u5199\u5165\u8981\u6C42 Cookie \u4F1A\u8BDD\uFF1B\u7F16\u8F91\u4EC5\u9650\u4F5C\u8005\uFF0C\u5220\u9664\u5141\u8BB8\u4F5C\u8005\u6216\u7BA1\u7406\u5458\uFF08\u5DE1\u67E5\uFF09\u3002\r\n\u53EA\u6709\u5DF2\u901A\u8FC7\u5BA1\u6838\u7684\u8D44\u6E90\uFF08\u63D2\u4EF6 / \u6A21\u7EC4\uFF09\u5BF9\u516C\u4F17\u5F00\u653E\u8BC4\u8BBA\u3002"
    },
    {
      "name": "ScforgeGameVersions",
      "description": "\u53D7\u652F\u6301\u7684\u6E38\u620F\u7248\u672C\uFF08\u516C\u5F00\u53EA\u8BFB\uFF09\uFF1A\u53D1\u5E03\u9875\u4E0E\u7B5B\u9009\u9762\u677F\u7684\u53D6\u503C\u6765\u6E90\u3002"
    },
    {
      "name": "ScforgeVersions",
      "description": "\u7248\u672C\u63A5\u53E3\uFF08\u8DEF\u7531\u524D\u7F00 \u0060/scforge/versions\u0060\uFF09\uFF1A\r\n\u4E0B\u8F7D \u002B \u4F5C\u8005\u4FA7\u7EF4\u62A4\uFF08\u6539\u5143\u6570\u636E / \u6362\u6587\u4EF6 / \u5220\u9664 / \u91CD\u65B0\u63D0\u4EA4\u5BA1\u6838\uFF09\u3002\r\n\u7EF4\u62A4\u52A8\u4F5C\u53EA\u5C5E\u4E8E\u4F5C\u8005\uFF0C\u4E14\u6539\u52A8\u540E\u7248\u672C\u4F1A\u56DE\u5230\u5F85\u5BA1\u6838\u3002"
    }
  ]
}
