{
  "swagger": "2.0",
  "info": {
    "title": "聚玩社区服务",
    "description": "处理帖子、评论、点赞等社区互动。ID 字段（int64）以 string 传输",
    "version": "1.0"
  },
  "schemes": [
    "http",
    "https"
  ],
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "paths": {
    "/api/v1/comments/{id}/like": {
      "delete": {
        "summary": "取消点赞评论",
        "operationId": "UnlikeComment",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/EmptyResp"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/PathId"
            }
          }
        ],
        "tags": [
          "community"
        ]
      },
      "post": {
        "summary": "点赞评论",
        "operationId": "LikeComment",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/EmptyResp"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/PathId"
            }
          }
        ],
        "tags": [
          "community"
        ]
      }
    },
    "/api/v1/posts": {
      "get": {
        "summary": "获取帖子列表",
        "operationId": "ListPosts",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/PostListResp"
            }
          }
        },
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int64",
            "default": "0"
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int64",
            "default": "20"
          },
          {
            "name": "tags",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "sortBy",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "community"
        ],
        "consumes": [
          "multipart/form-data"
        ]
      },
      "post": {
        "summary": "发布帖子",
        "operationId": "CreatePost",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/Post"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreatePostReq"
            }
          }
        ],
        "tags": [
          "community"
        ]
      }
    },
    "/api/v1/posts/{id}": {
      "get": {
        "summary": "获取帖子详情",
        "operationId": "GetPost",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/Post"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "community"
        ]
      }
    },
    "/api/v1/posts/{id}/comments": {
      "get": {
        "summary": "获取帖子评论",
        "operationId": "ListComments",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/CommentListResp"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "id",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "offset",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int64",
            "default": "0"
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int64",
            "default": "20"
          }
        ],
        "tags": [
          "community"
        ]
      },
      "post": {
        "summary": "发表评论",
        "operationId": "CreateComment",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/Comment"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreateCommentReq"
            }
          }
        ],
        "tags": [
          "community"
        ]
      }
    },
    "/api/v1/posts/{id}/like": {
      "delete": {
        "summary": "取消点赞帖子",
        "operationId": "UnlikePost",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/EmptyResp"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/PathId"
            }
          }
        ],
        "tags": [
          "community"
        ]
      },
      "post": {
        "summary": "点赞帖子",
        "operationId": "LikePost",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/EmptyResp"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/PathId"
            }
          }
        ],
        "tags": [
          "community"
        ]
      }
    },
    "/api/v1/posts/{id}/pin": {
      "delete": {
        "summary": "取消置顶",
        "operationId": "UnpinPost",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/EmptyResp"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/PathId"
            }
          }
        ],
        "tags": [
          "community"
        ]
      },
      "post": {
        "summary": "置顶帖子",
        "operationId": "PinPost",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/EmptyResp"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/PathId"
            }
          }
        ],
        "tags": [
          "community"
        ]
      }
    },
    "/api/v1/users/{id}/posts": {
      "get": {
        "summary": "获取用户帖子",
        "operationId": "ListUserPosts",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/PostListResp"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "id",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "offset",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int64",
            "default": "0"
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int64",
            "default": "20"
          }
        ],
        "tags": [
          "community"
        ]
      }
    }
  },
  "definitions": {
    "Comment": {
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "format": "int64"
        },
        "content": {
          "type": "string"
        },
        "author": {
          "$ref": "#/definitions/UserProfile"
        },
        "likeCount": {
          "type": "integer",
          "format": "int64"
        },
        "liked": {
          "type": "boolean",
          "format": "boolean"
        },
        "createdAt": {
          "type": "string"
        }
      },
      "title": "Comment",
      "required": [
        "id",
        "content",
        "author",
        "likeCount",
        "liked",
        "createdAt"
      ]
    },
    "CommentListResp": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Comment"
          }
        },
        "meta": {
          "$ref": "#/definitions/PageMeta"
        }
      },
      "title": "CommentListResp",
      "required": [
        "items",
        "meta"
      ]
    },
    "CreateCommentReq": {
      "type": "object",
      "properties": {
        "postId": {
          "type": "integer",
          "format": "int64"
        },
        "content": {
          "type": "string"
        }
      },
      "title": "CreateCommentReq",
      "required": [
        "-",
        "content"
      ]
    },
    "CreatePostReq": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "content": {
          "type": "string"
        },
        "images": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "linkedOrderId": {
          "type": "string"
        }
      },
      "title": "CreatePostReq",
      "required": [
        "title",
        "content",
        "images",
        "tags"
      ]
    },
    "EmptyResp": {
      "type": "object",
      "title": "EmptyResp"
    },
    "ListCommentsReq": {
      "type": "object",
      "properties": {
        "offset": {
          "type": "integer",
          "format": "int64",
          "default": "0"
        },
        "limit": {
          "type": "integer",
          "format": "int64",
          "default": "20"
        }
      },
      "title": "ListCommentsReq"
    },
    "PageMeta": {
      "type": "object",
      "properties": {
        "total": {
          "type": "integer",
          "format": "int64"
        },
        "offset": {
          "type": "integer",
          "format": "int64"
        },
        "limit": {
          "type": "integer",
          "format": "int64"
        }
      },
      "title": "PageMeta",
      "required": [
        "total",
        "offset",
        "limit"
      ]
    },
    "PageReq": {
      "type": "object",
      "properties": {
        "offset": {
          "type": "integer",
          "format": "int64",
          "default": "0"
        },
        "limit": {
          "type": "integer",
          "format": "int64",
          "default": "20"
        }
      },
      "title": "PageReq",
      "required": [
        "offset",
        "limit"
      ]
    },
    "PathId": {
      "type": "object",
      "title": "PathId"
    },
    "Post": {
      "type": "object",
      "properties": {
        "id": {
          "type": "integer",
          "format": "int64"
        },
        "title": {
          "type": "string"
        },
        "content": {
          "type": "string"
        },
        "images": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "linkedOrderId": {
          "type": "integer",
          "format": "int64"
        },
        "pinned": {
          "type": "boolean",
          "format": "boolean"
        },
        "likeCount": {
          "type": "integer",
          "format": "int64"
        },
        "commentCount": {
          "type": "integer",
          "format": "int64"
        },
        "liked": {
          "type": "boolean",
          "format": "boolean"
        },
        "author": {
          "$ref": "#/definitions/UserProfile"
        },
        "createdAt": {
          "type": "string"
        }
      },
      "title": "Post",
      "required": [
        "id",
        "title",
        "content",
        "images",
        "tags",
        "pinned",
        "likeCount",
        "commentCount",
        "liked",
        "author",
        "createdAt"
      ]
    },
    "PostListReq": {
      "type": "object",
      "properties": {
        "offset": {
          "type": "integer",
          "format": "int64",
          "default": "0"
        },
        "limit": {
          "type": "integer",
          "format": "int64",
          "default": "20"
        },
        "tags": {
          "type": "string"
        },
        "sortBy": {
          "type": "string"
        }
      },
      "title": "PostListReq"
    },
    "PostListResp": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Post"
          }
        },
        "meta": {
          "$ref": "#/definitions/PageMeta"
        }
      },
      "title": "PostListResp",
      "required": [
        "items",
        "meta"
      ]
    },
    "SimpleUser": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "nickname": {
          "type": "string"
        },
        "avatar": {
          "type": "string"
        }
      },
      "title": "SimpleUser",
      "required": [
        "id",
        "nickname",
        "avatar"
      ]
    },
    "UserProfile": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "username": {
          "type": "string"
        },
        "nickname": {
          "type": "string"
        },
        "avatar": {
          "type": "string"
        },
        "role": {
          "type": "string",
          "description": " consumer, player, owner, admin"
        },
        "verifiedRoles": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "verificationStatus": {
          "type": "object"
        },
        "phone": {
          "type": "string"
        },
        "bio": {
          "type": "string"
        },
        "createdAt": {
          "type": "string"
        }
      },
      "title": "UserProfile",
      "required": [
        "id",
        "username",
        "nickname",
        "avatar",
        "role",
        "verifiedRoles",
        "verificationStatus",
        "createdAt"
      ]
    }
  },
  "securityDefinitions": {
    "apiKey": {
      "type": "apiKey",
      "description": "Enter JWT Bearer token **_only_**",
      "name": "Authorization",
      "in": "header"
    }
  }
}
