# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

basePath: /
definitions:
  constant.NotificationChannelKey:
    enum:
    - email
    type: string
    x-enum-varnames:
    - EmailChannel
  constant.Privilege:
    properties:
      key:
        type: string
      label:
        type: string
      value:
        minimum: 1
        type: integer
    type: object
  entity.BadgeLevel:
    enum:
    - 1
    - 2
    - 3
    type: integer
    x-enum-varnames:
    - BadgeLevelBronze
    - BadgeLevelSilver
    - BadgeLevelGold
  handler.RespBody:
    properties:
      code:
        description: http code
        type: integer
      data:
        description: response data
      msg:
        description: response message
        type: string
      reason:
        description: reason key
        type: string
    type: object
  install.CheckConfigFileResp:
    properties:
      config_file_exist:
        type: boolean
      db_connection_success:
        type: boolean
      db_table_exist:
        type: boolean
    type: object
  install.CheckDatabaseReq:
    properties:
      db_file:
        type: string
      db_host:
        type: string
      db_name:
        type: string
      db_password:
        type: string
      db_type:
        enum:
        - postgres
        - sqlite3
        - mysql
        type: string
      db_username:
        type: string
      ssl_cert:
        type: string
      ssl_enabled:
        type: boolean
      ssl_key:
        type: string
      ssl_mode:
        type: string
      ssl_root_cert:
        type: string
    required:
    - db_type
    type: object
  install.InitBaseInfoReq:
    properties:
      contact_email:
        maxLength: 500
        type: string
      email:
        maxLength: 500
        type: string
      external_content_display:
        enum:
        - always_display
        - ask_before_display
        type: string
      lang:
        maxLength: 30
        type: string
      login_required:
        type: boolean
      name:
        maxLength: 30
        minLength: 2
        type: string
      password:
        maxLength: 32
        minLength: 8
        type: string
      site_name:
        maxLength: 30
        type: string
      site_url:
        maxLength: 512
        type: string
    required:
    - contact_email
    - email
    - external_content_display
    - lang
    - name
    - password
    - site_name
    - site_url
    type: object
  pager.PageModel:
    properties:
      count:
        type: integer
      list: {}
    type: object
  plugin.EmbedConfig:
    properties:
      enable:
        type: boolean
      platform:
        type: string
    type: object
  plugin.RenderConfig:
    properties:
      select_theme:
        type: string
    type: object
  schema.AIConversationAdminDeleteReq:
    properties:
      conversation_id:
        type: string
    required:
    - conversation_id
    type: object
  schema.AIConversationAdminDetailResp:
    properties:
      conversation_id:
        type: string
      created_at:
        type: integer
      records:
        items:
          $ref: '#/definitions/schema.AIConversationRecord'
        type: array
      topic:
        type: string
      user_info:
        $ref: '#/definitions/schema.AIConversationUserInfo'
    type: object
  schema.AIConversationAdminListItem:
    properties:
      created_at:
        type: integer
      helpful_count:
        type: integer
      id:
        type: string
      topic:
        type: string
      unhelpful_count:
        type: integer
      user_info:
        $ref: '#/definitions/schema.AIConversationUserInfo'
    type: object
  schema.AIConversationDetailResp:
    properties:
      conversation_id:
        type: string
      created_at:
        type: integer
      records:
        items:
          $ref: '#/definitions/schema.AIConversationRecord'
        type: array
      topic:
        type: string
      updated_at:
        type: integer
    type: object
  schema.AIConversationListItem:
    properties:
      conversation_id:
        type: string
      created_at:
        type: integer
      topic:
        type: string
    type: object
  schema.AIConversationRecord:
    properties:
      chat_completion_id:
        type: string
      content:
        type: string
      created_at:
        type: integer
      helpful:
        type: integer
      reasoning_content:
        type: string
      role:
        type: string
      unhelpful:
        type: integer
    type: object
  schema.AIConversationUserInfo:
    properties:
      avatar:
        type: string
      display_name:
        type: string
      id:
        type: string
      rank:
        type: integer
      username:
        type: string
    type: object
  schema.AIConversationVoteReq:
    properties:
      cancel:
        type: boolean
      chat_completion_id:
        type: string
      vote_type:
        enum:
        - helpful
        - unhelpful
        type: string
    required:
    - chat_completion_id
    - vote_type
    type: object
  schema.AIPromptConfig:
    properties:
      en_us:
        type: string
      zh_cn:
        type: string
    type: object
  schema.AcceptAnswerReq:
    properties:
      answer_id:
        type: string
      question_id:
        maxLength: 30
        type: string
    required:
    - question_id
    type: object
  schema.ActObjectInfo:
    properties:
      answer_id:
        type: string
      display_name:
        type: string
      main_tag_slug_name:
        type: string
      object_type:
        type: string
      question_id:
        type: string
      title:
        type: string
      username:
        type: string
    type: object
  schema.ActObjectTimeline:
    properties:
      activity_id:
        type: string
      activity_type:
        type: string
      cancelled:
        type: boolean
      cancelled_at:
        type: integer
      comment:
        type: string
      created_at:
        type: integer
      object_id:
        type: string
      object_type:
        type: string
      revision_id:
        type: string
      user_info:
        $ref: '#/definitions/schema.UserBasicInfo'
    type: object
  schema.ActionRecordResp:
    properties:
      captcha_id:
        type: string
      captcha_img:
        type: string
      verify:
        type: boolean
    type: object
  schema.AddAPIKeyReq:
    properties:
      description:
        maxLength: 150
        type: string
      scope:
        enum:
        - read-only
        - global
        type: string
    required:
    - description
    - scope
    type: object
  schema.AddAPIKeyResp:
    properties:
      access_key:
        type: string
    type: object
  schema.AddCommentReq:
    properties:
      captcha_code:
        type: string
      captcha_id:
        type: string
      mention_username_list:
        description: '@ user id list'
        items:
          type: string
        type: array
      object_id:
        description: object id
        type: string
      original_text:
        description: original comment content
        maxLength: 600
        minLength: 2
        type: string
      reply_comment_id:
        description: reply comment id
        type: string
    required:
    - object_id
    - original_text
    type: object
  schema.AddReportReq:
    properties:
      captcha_code:
        type: string
      captcha_id:
        description: captcha_id
        type: string
      content:
        description: report content
        maxLength: 500
        type: string
      object_id:
        description: object id
        maxLength: 20
        type: string
      report_type:
        description: report type
        type: integer
    required:
    - object_id
    - report_type
    type: object
  schema.AddTagReq:
    properties:
      display_name:
        description: display_name
        maxLength: 35
        type: string
      original_text:
        description: original text
        maxLength: 65536
        type: string
      slug_name:
        description: slug_name
        maxLength: 35
        type: string
    required:
    - display_name
    - original_text
    - slug_name
    type: object
  schema.AddUserReq:
    properties:
      display_name:
        maxLength: 30
        minLength: 2
        type: string
      email:
        maxLength: 500
        type: string
      password:
        maxLength: 32
        minLength: 8
        type: string
    required:
    - display_name
    - email
    - password
    type: object
  schema.AddUsersReq:
    properties:
      users:
        description: users info line by line
        type: string
    type: object
  schema.AdminUpdateAnswerStatusReq:
    properties:
      answer_id:
        type: string
      status:
        enum:
        - available
        - deleted
        type: string
    required:
    - answer_id
    - status
    type: object
  schema.AdminUpdateQuestionStatusReq:
    properties:
      question_id:
        type: string
      status:
        enum:
        - available
        - closed
        - deleted
        type: string
    required:
    - question_id
    - status
    type: object
  schema.AnswerAddReq:
    properties:
      captcha_code:
        type: string
      captcha_id:
        type: string
      content:
        maxLength: 65535
        minLength: 6
        type: string
      question_id:
        type: string
    required:
    - content
    type: object
  schema.AnswerInfo:
    properties:
      accepted:
        type: integer
      collected:
        type: boolean
      content:
        type: string
      create_time:
        type: integer
      html:
        type: string
      id:
        type: string
      member_actions:
        description: MemberActions
        items:
          $ref: '#/definitions/schema.PermissionMemberAction'
        type: array
      question_id:
        type: string
      question_info:
        $ref: '#/definitions/schema.QuestionInfoResp'
      status:
        type: integer
      update_time:
        type: integer
      update_user_info:
        $ref: '#/definitions/schema.UserBasicInfo'
      user_info:
        $ref: '#/definitions/schema.UserBasicInfo'
      vote_count:
        type: integer
      vote_status:
        type: string
    type: object
  schema.AnswerUpdateReq:
    properties:
      captcha_code:
        type: string
      captcha_id:
        type: string
      content:
        maxLength: 65535
        minLength: 6
        type: string
      edit_summary:
        type: string
      id:
        type: string
      title:
        type: string
    required:
    - content
    type: object
  schema.AvatarInfo:
    properties:
      custom:
        maxLength: 200
        type: string
      gravatar:
        maxLength: 200
        type: string
      type:
        maxLength: 100
        type: string
    type: object
  schema.BadgeListInfo:
    properties:
      award_count:
        description: badge award count
        type: integer
      earned_count:
        description: badge earned count
        type: integer
      icon:
        description: badge icon
        type: string
      id:
        description: badge id
        type: string
      level:
        allOf:
        - $ref: '#/definitions/entity.BadgeLevel'
        description: badge level
      name:
        description: badge name
        type: string
    type: object
  schema.BadgeStatus:
    enum:
    - active
    - inactive
    type: string
    x-enum-varnames:
    - BadgeStatusActive
    - BadgeStatusInactive
  schema.CloseQuestionReq:
    properties:
      close_msg:
        description: close_type
        type: string
      close_type:
        description: close_type
        type: integer
      id:
        type: string
    required:
    - id
    type: object
  schema.CollectionSwitchReq:
    properties:
      bookmark:
        type: boolean
      group_id:
        type: string
      object_id:
        type: string
    required:
    - group_id
    - object_id
    type: object
  schema.CollectionSwitchResp:
    properties:
      object_collection_count:
        type: integer
    type: object
  schema.ConfigField:
    properties:
      description:
        type: string
      name:
        type: string
      options:
        items:
          $ref: '#/definitions/schema.ConfigFieldOption'
        type: array
      required:
        type: boolean
      title:
        type: string
      type:
        type: string
      ui_options:
        $ref: '#/definitions/schema.ConfigFieldUIOptions'
      value: {}
    type: object
  schema.ConfigFieldOption:
    properties:
      label:
        type: string
      value:
        type: string
    type: object
  schema.ConfigFieldUIOptions:
    properties:
      action:
        $ref: '#/definitions/schema.UIOptionAction'
      class_name:
        type: string
      field_class_name:
        type: string
      input_type:
        type: string
      label:
        type: string
      placeholder:
        type: string
      rows:
        type: string
      text:
        type: string
      variant:
        type: string
    type: object
  schema.ConnectorInfoResp:
    properties:
      icon:
        type: string
      link:
        type: string
      name:
        type: string
    type: object
  schema.ConnectorUserInfoResp:
    properties:
      binding:
        type: boolean
      external_id:
        type: string
      icon:
        type: string
      link:
        type: string
      name:
        type: string
    type: object
  schema.DeleteAPIKeyReq:
    properties:
      id:
        type: integer
    type: object
  schema.DeletePermanentlyReq:
    properties:
      type:
        enum:
        - users
        - questions
        - answers
        type: string
    required:
    - type
    type: object
  schema.EditUserProfileReq:
    properties:
      display_name:
        maxLength: 30
        minLength: 2
        type: string
      email:
        maxLength: 500
        type: string
      user_id:
        type: string
      username:
        maxLength: 30
        minLength: 2
        type: string
    required:
    - display_name
    - email
    - user_id
    type: object
  schema.ExternalLoginBindingUserSendEmailReq:
    properties:
      binding_key:
        maxLength: 100
        type: string
      email:
        maxLength: 512
        type: string
      must:
        description: |-
          If must is true, whatever email if exists, try to bind user.
          If must is false, when email exist, will only be prompted with a warning.
        type: boolean
    required:
    - binding_key
    - email
    type: object
  schema.ExternalLoginBindingUserSendEmailResp:
    properties:
      access_token:
        type: string
      email_exist_and_must_be_confirmed:
        type: boolean
    type: object
  schema.ExternalLoginUnbindingReq:
    properties:
      external_id:
        maxLength: 128
        type: string
    required:
    - external_id
    type: object
  schema.FollowReq:
    properties:
      is_cancel:
        description: is cancel
        type: boolean
      object_id:
        description: object id
        type: string
    required:
    - object_id
    type: object
  schema.FollowResp:
    properties:
      follows:
        description: the followers of object
        type: integer
      is_followed:
        description: if user is followed object will be true,otherwise false
        type: boolean
    type: object
  schema.GetAIModelResp:
    properties:
      created:
        type: integer
      id:
        type: string
      object:
        type: string
      owned_by:
        type: string
    type: object
  schema.GetAIProviderResp:
    properties:
      default_api_host:
        type: string
      display_name:
        type: string
      name:
        type: string
    type: object
  schema.GetAPIKeyResp:
    properties:
      access_key:
        type: string
      created_at:
        type: integer
      description:
        type: string
      id:
        type: integer
      last_used_at:
        type: integer
      scope:
        type: string
    type: object
  schema.GetAnswerInfoResp:
    properties:
      info:
        $ref: '#/definitions/schema.AnswerInfo'
      question:
        $ref: '#/definitions/schema.QuestionInfoResp'
    type: object
  schema.GetBadgeInfoResp:
    properties:
      award_count:
        description: badge award count
        type: integer
      description:
        description: badge description
        type: string
      earned_count:
        description: badge earned count
        type: integer
      icon:
        description: badge icon
        type: string
      id:
        description: badge id
        type: string
      is_single:
        description: badge is single or multiple
        type: boolean
      level:
        allOf:
        - $ref: '#/definitions/entity.BadgeLevel'
        description: badge level
      name:
        description: badge name
        type: string
    type: object
  schema.GetBadgeListPagedResp:
    properties:
      award_count:
        description: badge award count
        type: integer
      description:
        description: badge description
        type: string
      earned:
        description: badge earned count
        type: boolean
      group_name:
        description: badge group name
        type: string
      icon:
        description: badge icon
        type: string
      id:
        description: badge id
        type: string
      level:
        allOf:
        - $ref: '#/definitions/entity.BadgeLevel'
        description: badge level
      name:
        description: badge name
        type: string
      status:
        allOf:
        - $ref: '#/definitions/schema.BadgeStatus'
        description: badge status
    type: object
  schema.GetBadgeListResp:
    properties:
      badges:
        description: badge list info
        items:
          $ref: '#/definitions/schema.BadgeListInfo'
        type: array
      group_name:
        description: badge group name
        type: string
    type: object
  schema.GetCommentPersonalWithPageResp:
    properties:
      answer_id:
        description: answer id
        type: string
      comment_id:
        description: comment id
        type: string
      content:
        description: content
        type: string
      created_at:
        description: create time
        type: integer
      object_id:
        description: object id
        type: string
      object_type:
        description: object type
        enum:
        - question
        - answer
        - tag
        - comment
        type: string
      question_id:
        description: question id
        type: string
      title:
        description: title
        type: string
      url_title:
        description: url title
        type: string
    type: object
  schema.GetCommentResp:
    properties:
      comment_id:
        description: comment id
        type: string
      created_at:
        description: create time
        type: integer
      is_vote:
        description: current user if already vote this comment
        type: boolean
      member_actions:
        description: MemberActions
        items:
          $ref: '#/definitions/schema.PermissionMemberAction'
        type: array
      object_id:
        description: object id
        type: string
      original_text:
        description: original comment content
        type: string
      parsed_text:
        description: parsed comment content
        type: string
      reply_comment_id:
        description: reply comment id
        type: string
      reply_user_display_name:
        description: reply user display name
        type: string
      reply_user_id:
        description: reply user id
        type: string
      reply_user_status:
        description: reply user status
        type: string
      reply_username:
        description: reply user username
        type: string
      user_avatar:
        description: user avatar
        type: string
      user_display_name:
        description: user display name
        type: string
      user_id:
        description: user id
        type: string
      user_status:
        description: user status
        type: string
      username:
        description: username
        type: string
      vote_count:
        description: user vote amount
        type: integer
    type: object
  schema.GetCurrentLoginUserInfoResp:
    properties:
      access_token:
        description: access token
        type: string
      answer_count:
        description: answer count
        type: integer
      authority_group:
        description: authority group
        type: integer
      avatar:
        $ref: '#/definitions/schema.AvatarInfo'
      bio:
        description: bio markdown
        type: string
      bio_html:
        description: bio html
        type: string
      color_scheme:
        description: Color scheme
        type: string
      created_at:
        description: create time
        type: integer
      display_name:
        description: display name
        type: string
      e_mail:
        description: email
        type: string
      follow_count:
        description: follow count
        type: integer
      have_password:
        description: user have password
        type: boolean
      id:
        description: user id
        type: string
      language:
        description: language
        type: string
      last_login_date:
        description: last login date
        type: integer
      location:
        description: location
        type: string
      mail_status:
        description: mail status(1 pass 2 to be verified)
        type: integer
      mobile:
        description: mobile
        type: string
      notice_status:
        description: notice status(1 on 2off)
        type: integer
      question_count:
        description: question count
        type: integer
      rank:
        description: rank
        type: integer
      role_id:
        description: role id
        type: integer
      status:
        description: user status
        type: string
      suspended_until:
        description: suspended until timestamp
        type: integer
      username:
        description: username
        type: string
      visit_token:
        description: visit token
        type: string
      website:
        description: website
        type: string
    type: object
  schema.GetFollowingTagsResp:
    properties:
      display_name:
        description: display name
        type: string
      main_tag_slug_name:
        description: if main tag slug name is not empty, this tag is synonymous with
          the main tag
        type: string
      recommend:
        type: boolean
      reserved:
        type: boolean
      slug_name:
        description: slug name
        type: string
      tag_id:
        description: tag id
        type: string
    type: object
  schema.GetObjectTimelineResp:
    properties:
      object_info:
        $ref: '#/definitions/schema.ActObjectInfo'
      timeline:
        items:
          $ref: '#/definitions/schema.ActObjectTimeline'
        type: array
    type: object
  schema.GetOtherUserInfoByUsernameResp:
    properties:
      answer_count:
        description: answer count
        type: integer
      avatar:
        description: avatar
        type: string
      bio:
        description: bio markdown
        type: string
      bio_html:
        description: bio html
        type: string
      created_at:
        description: create time
        type: integer
      display_name:
        description: display name
        type: string
      follow_count:
        description: |-
          email
          follow count
        type: integer
      id:
        description: user id
        type: string
      last_login_date:
        description: last login date
        type: integer
      location:
        description: location
        type: string
      mobile:
        description: mobile
        type: string
      question_count:
        description: question count
        type: integer
      rank:
        description: rank
        type: integer
      status:
        type: string
      status_msg:
        type: string
      suspended_until:
        description: suspended until timestamp
        type: integer
      username:
        description: username
        type: string
      website:
        description: website
        type: string
    type: object
  schema.GetOtherUserInfoResp:
    properties:
      info:
        $ref: '#/definitions/schema.GetOtherUserInfoByUsernameResp'
    type: object
  schema.GetPluginConfigResp:
    properties:
      config_fields:
        items:
          $ref: '#/definitions/schema.ConfigField'
        type: array
      description:
        type: string
      name:
        type: string
      slug_name:
        type: string
      version:
        type: string
    type: object
  schema.GetPluginListResp:
    properties:
      description:
        type: string
      enabled:
        type: boolean
      have_config:
        type: boolean
      link:
        type: string
      name:
        type: string
      slug_name:
        type: string
      version:
        type: string
    type: object
  schema.GetPrivilegesConfigResp:
    properties:
      options:
        items:
          $ref: '#/definitions/schema.PrivilegeOption'
        type: array
      selected_level:
        $ref: '#/definitions/schema.PrivilegeLevel'
    type: object
  schema.GetRankPersonalPageResp:
    properties:
      answer_id:
        description: answer id
        type: string
      content:
        description: content
        type: string
      created_at:
        description: create time
        type: integer
      object_id:
        description: object id
        type: string
      object_type:
        description: object type
        enum:
        - question
        - answer
        - tag
        - comment
        type: string
      question_id:
        description: question id
        type: string
      rank_type:
        description: rank type
        type: string
      reputation:
        description: reputation
        type: integer
      title:
        description: title
        type: string
      url_title:
        description: url title
        type: string
    type: object
  schema.GetReportListPageResp:
    properties:
      answer_accepted:
        type: boolean
      answer_count:
        type: integer
      answer_id:
        type: string
      author_user_info:
        $ref: '#/definitions/schema.UserBasicInfo'
      comment_id:
        type: string
      created_at:
        type: integer
      flag_id:
        type: string
      object_id:
        type: string
      object_show_status:
        type: integer
      object_status:
        type: integer
      object_type:
        enum:
        - question
        - answer
        - comment
        type: string
      original_text:
        type: string
      parsed_text:
        type: string
      question_id:
        type: string
      reason:
        $ref: '#/definitions/schema.ReasonItem'
      reason_content:
        type: string
      submit_at:
        type: integer
      submitter_user:
        $ref: '#/definitions/schema.UserBasicInfo'
      tags:
        items:
          $ref: '#/definitions/schema.TagResp'
        type: array
      title:
        type: string
      url_title:
        type: string
    type: object
  schema.GetReviewingTypeResp:
    properties:
      label:
        type: string
      name:
        type: string
      todo_amount:
        type: integer
    type: object
  schema.GetRevisionResp:
    properties:
      content: {}
      create_at:
        type: integer
      id:
        type: string
      object_id:
        type: string
      reason:
        type: string
      status:
        type: integer
      title:
        type: string
      url_title:
        type: string
      use_id:
        type: string
      user_info:
        $ref: '#/definitions/schema.UserBasicInfo'
    type: object
  schema.GetRoleResp:
    properties:
      description:
        type: string
      id:
        type: integer
      name:
        type: string
    type: object
  schema.GetSMTPConfigResp:
    properties:
      encryption:
        description: '"" SSL TLS'
        type: string
      from_email:
        type: string
      from_name:
        type: string
      smtp_authentication:
        type: boolean
      smtp_host:
        type: string
      smtp_password:
        type: string
      smtp_port:
        type: integer
      smtp_username:
        type: string
    type: object
  schema.GetSiteLegalInfoResp:
    properties:
      privacy_policy_original_text:
        type: string
      privacy_policy_parsed_text:
        type: string
      terms_of_service_original_text:
        type: string
      terms_of_service_parsed_text:
        type: string
    type: object
  schema.GetTagBasicResp:
    properties:
      display_name:
        type: string
      recommend:
        type: boolean
      reserved:
        type: boolean
      slug_name:
        type: string
      tag_id:
        type: string
    type: object
  schema.GetTagPageResp:
    properties:
      created_at:
        description: created time
        type: integer
      description:
        description: description
        type: string
      display_name:
        description: display_name
        type: string
      excerpt:
        description: excerpt
        type: string
      follow_count:
        description: follower amount
        type: integer
      is_follower:
        description: is follower
        type: boolean
      original_text:
        description: original text
        type: string
      parsed_text:
        description: parsed_text
        type: string
      question_count:
        description: question amount
        type: integer
      recommend:
        type: boolean
      reserved:
        type: boolean
      slug_name:
        description: slug_name
        type: string
      tag_id:
        description: tag_id
        type: string
      updated_at:
        description: updated time
        type: integer
    type: object
  schema.GetTagResp:
    properties:
      created_at:
        type: integer
      description:
        type: string
      display_name:
        type: string
      excerpt:
        type: string
      follow_count:
        type: integer
      is_follower:
        type: boolean
      main_tag_slug_name:
        description: if main tag slug name is not empty, this tag is synonymous with
          the main tag
        type: string
      member_actions:
        items:
          $ref: '#/definitions/schema.PermissionMemberAction'
        type: array
      original_text:
        type: string
      parsed_text:
        type: string
      question_count:
        type: integer
      recommend:
        type: boolean
      reserved:
        type: boolean
      slug_name:
        type: string
      status:
        type: string
      tag_id:
        type: string
      updated_at:
        type: integer
    type: object
  schema.GetTagSynonymsResp:
    properties:
      member_actions:
        description: MemberActions
        items:
          $ref: '#/definitions/schema.PermissionMemberAction'
        type: array
      synonyms:
        description: synonyms
        items:
          $ref: '#/definitions/schema.TagSynonym'
        type: array
    type: object
  schema.GetUnreviewedPostPageResp:
    properties:
      answer_id:
        type: string
      author_user_info:
        $ref: '#/definitions/schema.UserBasicInfo'
      comment_id:
        type: string
      created_at:
        type: integer
      object_id:
        type: string
      object_show_status:
        type: integer
      object_status:
        type: integer
      object_type:
        enum:
        - question
        - answer
        - comment
        type: string
      original_text:
        type: string
      parsed_text:
        type: string
      question_id:
        type: string
      reason:
        type: string
      review_id:
        type: integer
      submit_at:
        type: integer
      submitter_display_name:
        type: string
      tags:
        items:
          $ref: '#/definitions/schema.TagResp'
        type: array
      title:
        type: string
      url_title:
        type: string
    type: object
  schema.GetUnreviewedRevisionResp:
    properties:
      info:
        $ref: '#/definitions/schema.UnreviewedRevisionInfoInfo'
      type:
        type: string
      unreviewed_info:
        $ref: '#/definitions/schema.GetRevisionResp'
    type: object
  schema.GetUserActivationResp:
    properties:
      activation_url:
        type: string
    type: object
  schema.GetUserBadgeAwardListResp:
    properties:
      earned_count:
        description: badge award count
        type: integer
      icon:
        description: badge icon
        type: string
      id:
        description: badge id
        type: string
      level:
        allOf:
        - $ref: '#/definitions/entity.BadgeLevel'
        description: badge level
      name:
        description: badge name
        type: string
    type: object
  schema.GetUserNotificationConfigResp:
    properties:
      all_new_question:
        $ref: '#/definitions/schema.NotificationChannelConfig'
      all_new_question_for_following_tags:
        $ref: '#/definitions/schema.NotificationChannelConfig'
      inbox:
        $ref: '#/definitions/schema.NotificationChannelConfig'
    type: object
  schema.GetUserPageResp:
    properties:
      avatar:
        description: avatar
        type: string
      created_at:
        description: create time
        type: integer
      deleted_at:
        description: delete time
        type: integer
      display_name:
        description: display name
        type: string
      e_mail:
        description: email
        type: string
      rank:
        description: rank
        type: integer
      role_id:
        description: role id
        type: integer
      role_name:
        description: role name
        type: string
      status:
        description: user status(normal,suspended,deleted,inactive)
        type: string
      suspended_at:
        description: suspended time
        type: integer
      suspended_until:
        description: suspended until time
        type: integer
      user_id:
        description: user id
        type: string
      username:
        description: username
        type: string
    type: object
  schema.GetUserPluginListResp:
    properties:
      name:
        type: string
      slug_name:
        type: string
    type: object
  schema.GetUserStaffResp:
    properties:
      avatar:
        description: avatar
        type: string
      display_name:
        description: display name
        type: string
      username:
        description: username
        type: string
    type: object
  schema.GetVoteWithPageResp:
    properties:
      answer_id:
        description: answer id
        type: string
      content:
        description: content
        type: string
      created_at:
        description: create time
        type: integer
      object_id:
        description: object id
        type: string
      object_type:
        description: object type
        enum:
        - question
        - answer
        - tag
        - comment
        type: string
      question_id:
        description: question id
        type: string
      title:
        description: title
        type: string
      url_title:
        description: url title
        type: string
      vote_type:
        description: vote type
        type: string
    type: object
  schema.LoadingAction:
    properties:
      state:
        type: string
      text:
        type: string
    type: object
  schema.NotificationChannelConfig:
    properties:
      enable:
        type: boolean
      key:
        $ref: '#/definitions/constant.NotificationChannelKey'
    type: object
  schema.NotificationClearIDRequest:
    properties:
      id:
        type: string
    type: object
  schema.NotificationClearRequest:
    properties:
      type:
        enum:
        - inbox
        - achievement
        type: string
    required:
    - type
    type: object
  schema.OnCompleteAction:
    properties:
      refresh_form_config:
        type: boolean
      toast_return_message:
        type: boolean
    type: object
  schema.Operation:
    properties:
      description:
        type: string
      level:
        $ref: '#/definitions/schema.OperationLevel'
      msg:
        type: string
      time:
        type: integer
      type:
        type: string
    type: object
  schema.OperationLevel:
    enum:
    - info
    - danger
    - warning
    - secondary
    type: string
    x-enum-varnames:
    - OperationLevelInfo
    - OperationLevelDanger
    - OperationLevelWarning
    - OperationLevelSecondary
  schema.OperationQuestionReq:
    properties:
      id:
        type: string
      operation:
        description: operation [pin unpin hide show]
        type: string
    required:
    - id
    type: object
  schema.PermissionMemberAction:
    properties:
      action:
        type: string
      name:
        type: string
      type:
        type: string
    type: object
  schema.PostRenderReq:
    properties:
      content:
        type: string
    type: object
  schema.PrivilegeLevel:
    enum:
    - 1
    - 2
    - 3
    - 99
    type: integer
    x-enum-varnames:
    - PrivilegeLevel1
    - PrivilegeLevel2
    - PrivilegeLevel3
    - PrivilegeLevelCustom
  schema.PrivilegeOption:
    properties:
      level:
        $ref: '#/definitions/schema.PrivilegeLevel'
      level_desc:
        type: string
      privileges:
        items:
          $ref: '#/definitions/constant.Privilege'
        type: array
    type: object
  schema.QuestionAdd:
    properties:
      captcha_code:
        type: string
      captcha_id:
        description: captcha_id
        type: string
      content:
        description: content
        maxLength: 65535
        minLength: 0
        type: string
      tags:
        description: tags
        items:
          $ref: '#/definitions/schema.TagItem'
        type: array
      title:
        description: question title
        maxLength: 150
        minLength: 6
        type: string
    required:
    - title
    type: object
  schema.QuestionAddByAnswer:
    properties:
      answer_content:
        maxLength: 65535
        minLength: 6
        type: string
      captcha_code:
        type: string
      captcha_id:
        description: captcha_id
        type: string
      content:
        description: content
        maxLength: 65535
        minLength: 0
        type: string
      mention_username_list:
        items:
          type: string
        type: array
      tags:
        description: tags
        items:
          $ref: '#/definitions/schema.TagItem'
        type: array
      title:
        description: question title
        maxLength: 150
        minLength: 6
        type: string
    required:
    - answer_content
    - title
    type: object
  schema.QuestionInfoResp:
    properties:
      accepted_answer_id:
        type: string
      answer_count:
        type: integer
      answered:
        type: boolean
      collected:
        type: boolean
      collection_count:
        type: integer
      content:
        type: string
      create_time:
        type: integer
      description:
        type: string
      edit_time:
        type: integer
      extends_actions:
        items:
          $ref: '#/definitions/schema.PermissionMemberAction'
        type: array
      first_answer_id:
        type: string
      follow_count:
        type: integer
      html:
        type: string
      id:
        type: string
      is_followed:
        type: boolean
      last_answer_id:
        type: string
      last_answered_user_info:
        $ref: '#/definitions/schema.UserBasicInfo'
      member_actions:
        description: MemberActions
        items:
          $ref: '#/definitions/schema.PermissionMemberAction'
        type: array
      operation:
        $ref: '#/definitions/schema.Operation'
      pin:
        type: integer
      show:
        type: integer
      status:
        type: integer
      tags:
        items:
          $ref: '#/definitions/schema.TagResp'
        type: array
      title:
        type: string
      unique_view_count:
        type: integer
      update_time:
        type: integer
      update_user_info:
        $ref: '#/definitions/schema.UserBasicInfo'
      url_title:
        type: string
      user_info:
        $ref: '#/definitions/schema.UserBasicInfo'
      view_count:
        type: integer
      vote_count:
        type: integer
      vote_status:
        type: string
    type: object
  schema.QuestionPageReq:
    properties:
      in_days:
        minimum: 1
        type: integer
      order:
        enum:
        - newest
        - active
        - hot
        - score
        - unanswered
        - recommend
        - frequent
        type: string
      page:
        minimum: 1
        type: integer
      page_size:
        minimum: 1
        type: integer
      tag:
        maxLength: 100
        type: string
      username:
        maxLength: 100
        type: string
    type: object
  schema.QuestionPageResp:
    properties:
      accepted_answer_id:
        description: answer information
        type: string
      answer_count:
        type: integer
      collection_count:
        type: integer
      created_at:
        type: integer
      description:
        type: string
      follow_count:
        type: integer
      id:
        type: string
      last_answer_id:
        type: string
      operated_at:
        description: operator information
        type: integer
      operation_type:
        type: string
      operator:
        $ref: '#/definitions/schema.QuestionPageRespOperator'
      pin:
        description: '1: unpin, 2: pin'
        type: integer
      show:
        description: '0: show, 1: hide'
        type: integer
      status:
        type: integer
      tags:
        items:
          $ref: '#/definitions/schema.TagResp'
        type: array
      title:
        type: string
      unique_view_count:
        type: integer
      url_title:
        type: string
      view_count:
        description: question statistical information
        type: integer
      vote_count:
        type: integer
    type: object
  schema.QuestionPageRespOperator:
    properties:
      avatar:
        type: string
      display_name:
        type: string
      id:
        type: string
      rank:
        type: integer
      status:
        type: string
      username:
        type: string
    type: object
  schema.QuestionRecoverReq:
    properties:
      question_id:
        type: string
    required:
    - question_id
    type: object
  schema.QuestionUpdate:
    properties:
      captcha_code:
        type: string
      captcha_id:
        description: captcha_id
        type: string
      content:
        description: content
        maxLength: 65535
        minLength: 0
        type: string
      edit_summary:
        description: edit summary
        type: string
      id:
        description: question id
        type: string
      invite_user:
        items:
          type: string
        type: array
      tags:
        description: tags
        items:
          $ref: '#/definitions/schema.TagItem'
        type: array
      title:
        description: question title
        maxLength: 150
        minLength: 6
        type: string
    required:
    - id
    - title
    type: object
  schema.QuestionUpdateInviteUser:
    properties:
      captcha_code:
        type: string
      captcha_id:
        description: captcha_id
        type: string
      id:
        type: string
      invite_user:
        items:
          type: string
        type: array
    required:
    - id
    type: object
  schema.ReactionRespItem:
    properties:
      count:
        description: Count is the number of users who reacted
        type: integer
      emoji:
        description: Emoji is the reaction emoji
        type: string
      is_active:
        description: IsActive is if current user has reacted
        type: boolean
      tooltip:
        description: Tooltip is the user's name who reacted
        type: string
    type: object
  schema.ReasonItem:
    properties:
      content_type:
        type: string
      description:
        type: string
      name:
        type: string
      placeholder:
        type: string
      reason_key:
        type: string
      reason_type:
        type: integer
    type: object
  schema.RecoverAnswerReq:
    properties:
      answer_id:
        type: string
    required:
    - answer_id
    type: object
  schema.RecoverTagReq:
    properties:
      tag_id:
        type: string
    required:
    - tag_id
    type: object
  schema.RemoveAnswerReq:
    properties:
      captcha_code:
        type: string
      captcha_id:
        type: string
      id:
        type: string
    required:
    - id
    type: object
  schema.RemoveCommentReq:
    properties:
      captcha_code:
        type: string
      captcha_id:
        type: string
      comment_id:
        description: comment id
        type: string
    required:
    - comment_id
    type: object
  schema.RemoveQuestionReq:
    properties:
      captcha_code:
        type: string
      captcha_id:
        description: captcha_id
        type: string
      id:
        description: question id
        type: string
    required:
    - id
    type: object
  schema.RemoveTagReq:
    properties:
      tag_id:
        description: tag_id
        type: string
    required:
    - tag_id
    type: object
  schema.ReopenQuestionReq:
    properties:
      question_id:
        type: string
    type: object
  schema.ReviewReportReq:
    properties:
      close_msg:
        type: string
      close_type:
        type: integer
      content:
        maxLength: 65535
        minLength: 6
        type: string
      flag_id:
        type: string
      operation_type:
        enum:
        - edit_post
        - close_post
        - delete_post
        - unlist_post
        - ignore_report
        type: string
      tags:
        items:
          $ref: '#/definitions/schema.TagItem'
        type: array
      title:
        maxLength: 150
        minLength: 6
        type: string
    required:
    - flag_id
    - operation_type
    type: object
  schema.RevisionAuditReq:
    properties:
      id:
        description: object id
        type: string
      operation:
        description: approve or reject
        type: string
    required:
    - id
    - operation
    type: object
  schema.SearchObject:
    properties:
      accepted:
        type: boolean
      answer_count:
        type: integer
      created_at:
        type: integer
      excerpt:
        type: string
      id:
        type: string
      question_id:
        type: string
      status:
        description: Status
        type: string
      tags:
        description: tags
        items:
          $ref: '#/definitions/schema.TagResp'
        type: array
      title:
        type: string
      url_title:
        type: string
      user_info:
        allOf:
        - $ref: '#/definitions/schema.SearchObjectUser'
        description: user info
      vote_count:
        type: integer
    type: object
  schema.SearchObjectUser:
    properties:
      display_name:
        type: string
      id:
        type: string
      rank:
        type: integer
      status:
        type: string
      username:
        type: string
    type: object
  schema.SearchResp:
    properties:
      count:
        type: integer
      list:
        description: search response
        items:
          $ref: '#/definitions/schema.SearchResult'
        type: array
    type: object
  schema.SearchResult:
    properties:
      object:
        allOf:
        - $ref: '#/definitions/schema.SearchObject'
        description: this object
      object_type:
        description: object_type
        type: string
    type: object
  schema.SendUserActivationReq:
    properties:
      user_id:
        type: string
    required:
    - user_id
    type: object
  schema.SiteAIProvider:
    properties:
      api_host:
        maxLength: 512
        type: string
      api_key:
        maxLength: 256
        type: string
      model:
        maxLength: 100
        type: string
      provider:
        maxLength: 50
        type: string
    type: object
  schema.SiteAIReq:
    properties:
      ai_providers:
        items:
          $ref: '#/definitions/schema.SiteAIProvider'
        type: array
      chosen_provider:
        maxLength: 50
        type: string
      enabled:
        type: boolean
      prompt_config:
        $ref: '#/definitions/schema.AIPromptConfig'
    type: object
  schema.SiteAIResp:
    properties:
      ai_providers:
        items:
          $ref: '#/definitions/schema.SiteAIProvider'
        type: array
      chosen_provider:
        maxLength: 50
        type: string
      enabled:
        type: boolean
      prompt_config:
        $ref: '#/definitions/schema.AIPromptConfig'
    type: object
  schema.SiteAdvancedReq:
    properties:
      authorized_attachment_extensions:
        items:
          type: string
        type: array
      authorized_image_extensions:
        items:
          type: string
        type: array
      max_attachment_size:
        type: integer
      max_image_megapixel:
        type: integer
      max_image_size:
        type: integer
    type: object
  schema.SiteAdvancedResp:
    properties:
      authorized_attachment_extensions:
        items:
          type: string
        type: array
      authorized_image_extensions:
        items:
          type: string
        type: array
      max_attachment_size:
        type: integer
      max_image_megapixel:
        type: integer
      max_image_size:
        type: integer
    type: object
  schema.SiteBrandingReq:
    properties:
      favicon:
        maxLength: 512
        type: string
      logo:
        maxLength: 512
        type: string
      mobile_logo:
        maxLength: 512
        type: string
      square_icon:
        maxLength: 512
        type: string
    type: object
  schema.SiteBrandingResp:
    properties:
      favicon:
        maxLength: 512
        type: string
      logo:
        maxLength: 512
        type: string
      mobile_logo:
        maxLength: 512
        type: string
      square_icon:
        maxLength: 512
        type: string
    type: object
  schema.SiteCustomCssHTMLReq:
    properties:
      custom_css:
        maxLength: 65536
        type: string
      custom_footer:
        maxLength: 65536
        type: string
      custom_head:
        maxLength: 65536
        type: string
      custom_header:
        maxLength: 65536
        type: string
      custom_sidebar:
        maxLength: 65536
        type: string
    type: object
  schema.SiteCustomCssHTMLResp:
    properties:
      custom_css:
        maxLength: 65536
        type: string
      custom_footer:
        maxLength: 65536
        type: string
      custom_head:
        maxLength: 65536
        type: string
      custom_header:
        maxLength: 65536
        type: string
      custom_sidebar:
        maxLength: 65536
        type: string
    type: object
  schema.SiteGeneralReq:
    properties:
      contact_email:
        maxLength: 512
        type: string
      description:
        maxLength: 2000
        type: string
      name:
        maxLength: 128
        type: string
      short_description:
        maxLength: 255
        type: string
      site_url:
        maxLength: 512
        type: string
    required:
    - contact_email
    - name
    - site_url
    type: object
  schema.SiteGeneralResp:
    properties:
      contact_email:
        maxLength: 512
        type: string
      description:
        maxLength: 2000
        type: string
      name:
        maxLength: 128
        type: string
      short_description:
        maxLength: 255
        type: string
      site_url:
        maxLength: 512
        type: string
    required:
    - contact_email
    - name
    - site_url
    type: object
  schema.SiteInfoResp:
    properties:
      ai_enabled:
        type: boolean
      branding:
        $ref: '#/definitions/schema.SiteBrandingResp'
      custom_css_html:
        $ref: '#/definitions/schema.SiteCustomCssHTMLResp'
      general:
        $ref: '#/definitions/schema.SiteGeneralResp'
      interface:
        $ref: '#/definitions/schema.SiteInterfaceSettingsResp'
      login:
        $ref: '#/definitions/schema.SiteLoginResp'
      mcp_enabled:
        type: boolean
      revision:
        type: string
      site_advanced:
        $ref: '#/definitions/schema.SiteAdvancedResp'
      site_legal:
        $ref: '#/definitions/schema.SiteLegalSimpleResp'
      site_questions:
        $ref: '#/definitions/schema.SiteQuestionsResp'
      site_security:
        $ref: '#/definitions/schema.SiteSecurityResp'
      site_seo:
        $ref: '#/definitions/schema.SiteSeoResp'
      site_tags:
        $ref: '#/definitions/schema.SiteTagsResp'
      site_users:
        $ref: '#/definitions/schema.SiteUsersResp'
      theme:
        $ref: '#/definitions/schema.SiteThemeResp'
      users_settings:
        $ref: '#/definitions/schema.SiteUsersSettingsResp'
      version:
        type: string
    type: object
  schema.SiteInterfaceReq:
    properties:
      language:
        maxLength: 128
        type: string
      time_zone:
        maxLength: 128
        type: string
    required:
    - language
    - time_zone
    type: object
  schema.SiteInterfaceSettingsResp:
    properties:
      language:
        maxLength: 128
        type: string
      time_zone:
        maxLength: 128
        type: string
    required:
    - language
    - time_zone
    type: object
  schema.SiteLegalSimpleResp:
    properties:
      external_content_display:
        enum:
        - always_display
        - ask_before_display
        type: string
    required:
    - external_content_display
    type: object
  schema.SiteLoginReq:
    properties:
      allow_email_domains:
        items:
          type: string
        type: array
      allow_email_registrations:
        type: boolean
      allow_new_registrations:
        type: boolean
      allow_password_login:
        type: boolean
      require_email_verification:
        type: boolean
    required:
    - require_email_verification
    type: object
  schema.SiteLoginResp:
    properties:
      allow_email_domains:
        items:
          type: string
        type: array
      allow_email_registrations:
        type: boolean
      allow_new_registrations:
        type: boolean
      allow_password_login:
        type: boolean
      require_email_verification:
        type: boolean
    type: object
  schema.SiteMCPReq:
    properties:
      enabled:
        type: boolean
    type: object
  schema.SiteMCPResp:
    properties:
      enabled:
        type: boolean
      http_header:
        type: string
      type:
        type: string
      url:
        type: string
    type: object
  schema.SitePoliciesReq:
    properties:
      privacy_policy_original_text:
        type: string
      privacy_policy_parsed_text:
        type: string
      terms_of_service_original_text:
        type: string
      terms_of_service_parsed_text:
        type: string
    type: object
  schema.SitePoliciesResp:
    properties:
      privacy_policy_original_text:
        type: string
      privacy_policy_parsed_text:
        type: string
      terms_of_service_original_text:
        type: string
      terms_of_service_parsed_text:
        type: string
    type: object
  schema.SiteQuestionsReq:
    properties:
      min_content:
        maximum: 65535
        minimum: 0
        type: integer
      min_tags:
        maximum: 5
        minimum: 0
        type: integer
      restrict_answer:
        type: boolean
    type: object
  schema.SiteQuestionsResp:
    properties:
      min_content:
        maximum: 65535
        minimum: 0
        type: integer
      min_tags:
        maximum: 5
        minimum: 0
        type: integer
      restrict_answer:
        type: boolean
    type: object
  schema.SiteSecurityReq:
    properties:
      check_update:
        type: boolean
      external_content_display:
        enum:
        - always_display
        - ask_before_display
        type: string
      login_required:
        type: boolean
    required:
    - external_content_display
    type: object
  schema.SiteSecurityResp:
    properties:
      check_update:
        type: boolean
      external_content_display:
        enum:
        - always_display
        - ask_before_display
        type: string
      login_required:
        type: boolean
    required:
    - external_content_display
    type: object
  schema.SiteSeoReq:
    properties:
      permalink:
        maximum: 4
        minimum: 0
        type: integer
      robots:
        type: string
    required:
    - permalink
    - robots
    type: object
  schema.SiteSeoResp:
    properties:
      permalink:
        maximum: 4
        minimum: 0
        type: integer
      robots:
        type: string
    required:
    - permalink
    - robots
    type: object
  schema.SiteTagsReq:
    properties:
      recommend_tags:
        items:
          $ref: '#/definitions/schema.SiteWriteTag'
        type: array
      required_tag:
        type: boolean
      reserved_tags:
        items:
          $ref: '#/definitions/schema.SiteWriteTag'
        type: array
    type: object
  schema.SiteTagsResp:
    properties:
      recommend_tags:
        items:
          $ref: '#/definitions/schema.SiteWriteTag'
        type: array
      required_tag:
        type: boolean
      reserved_tags:
        items:
          $ref: '#/definitions/schema.SiteWriteTag'
        type: array
    type: object
  schema.SiteThemeReq:
    properties:
      color_scheme:
        maxLength: 100
        type: string
      layout:
        enum:
        - Full-width
        - Fixed-width
        type: string
      theme:
        maxLength: 255
        type: string
      theme_config:
        additionalProperties: {}
        type: object
    required:
    - theme
    type: object
  schema.SiteThemeResp:
    properties:
      color_scheme:
        type: string
      layout:
        type: string
      theme:
        type: string
      theme_config:
        additionalProperties: {}
        type: object
      theme_options:
        items:
          $ref: '#/definitions/schema.ThemeOption'
        type: array
    type: object
  schema.SiteUsersReq:
    properties:
      allow_update_avatar:
        type: boolean
      allow_update_bio:
        type: boolean
      allow_update_display_name:
        type: boolean
      allow_update_location:
        type: boolean
      allow_update_username:
        type: boolean
      allow_update_website:
        type: boolean
      default_avatar:
        enum:
        - system
        - gravatar
        type: string
      gravatar_base_url:
        type: string
    required:
    - default_avatar
    type: object
  schema.SiteUsersResp:
    properties:
      allow_update_avatar:
        type: boolean
      allow_update_bio:
        type: boolean
      allow_update_display_name:
        type: boolean
      allow_update_location:
        type: boolean
      allow_update_username:
        type: boolean
      allow_update_website:
        type: boolean
      default_avatar:
        enum:
        - system
        - gravatar
        type: string
      gravatar_base_url:
        type: string
    required:
    - default_avatar
    type: object
  schema.SiteUsersSettingsReq:
    properties:
      default_avatar:
        enum:
        - system
        - gravatar
        type: string
      gravatar_base_url:
        type: string
    required:
    - default_avatar
    type: object
  schema.SiteUsersSettingsResp:
    properties:
      default_avatar:
        enum:
        - system
        - gravatar
        type: string
      gravatar_base_url:
        type: string
    required:
    - default_avatar
    type: object
  schema.SiteWriteTag:
    properties:
      display_name:
        type: string
      slug_name:
        type: string
    required:
    - slug_name
    type: object
  schema.TagItem:
    properties:
      display_name:
        description: display_name
        maxLength: 35
        type: string
      original_text:
        description: original text
        type: string
      slug_name:
        description: slug_name
        maxLength: 35
        type: string
    type: object
  schema.TagResp:
    properties:
      display_name:
        type: string
      main_tag_slug_name:
        description: if main tag slug name is not empty, this tag is synonymous with
          the main tag
        type: string
      recommend:
        type: boolean
      reserved:
        type: boolean
      slug_name:
        type: string
    type: object
  schema.TagSynonym:
    properties:
      display_name:
        description: display name
        type: string
      main_tag_slug_name:
        description: if main tag slug name is not empty, this tag is synonymous with
          the main tag
        type: string
      slug_name:
        description: slug name
        type: string
      tag_id:
        description: tag id
        type: string
    type: object
  schema.ThemeOption:
    properties:
      label:
        type: string
      value:
        type: string
    type: object
  schema.UIOptionAction:
    properties:
      loading:
        $ref: '#/definitions/schema.LoadingAction'
      method:
        type: string
      on_complete:
        $ref: '#/definitions/schema.OnCompleteAction'
      url:
        type: string
    type: object
  schema.UnreviewedRevisionInfoInfo:
    properties:
      answer_accepted:
        type: boolean
      answer_count:
        type: integer
      answer_id:
        type: string
      comment_id:
        type: string
      content:
        type: string
      created_at:
        type: integer
      html:
        type: string
      object_creator_user_id:
        type: string
      object_id:
        type: string
      object_type:
        type: string
      question_id:
        type: string
      show_status:
        type: integer
      status:
        type: integer
      tags:
        items:
          $ref: '#/definitions/schema.TagResp'
        type: array
      title:
        type: string
      url_title:
        type: string
    type: object
  schema.UpdateAPIKeyReq:
    properties:
      description:
        maxLength: 150
        type: string
      id:
        type: integer
    required:
    - description
    - id
    type: object
  schema.UpdateBadgeStatusReq:
    properties:
      id:
        description: badge id
        type: string
      status:
        allOf:
        - $ref: '#/definitions/schema.BadgeStatus'
        description: badge status
    required:
    - id
    - status
    type: object
  schema.UpdateCommentReq:
    properties:
      captcha_code:
        type: string
      captcha_id:
        description: whether user can delete it
        type: string
      comment_id:
        description: comment id
        type: string
      original_text:
        description: original comment content
        maxLength: 600
        minLength: 2
        type: string
    required:
    - comment_id
    - original_text
    type: object
  schema.UpdateFollowTagsReq:
    properties:
      slug_name_list:
        description: tag slug name list
        items:
          type: string
        type: array
    type: object
  schema.UpdateInfoRequest:
    properties:
      avatar:
        $ref: '#/definitions/schema.AvatarInfo'
      bio:
        maxLength: 4096
        type: string
      display_name:
        maxLength: 30
        minLength: 2
        type: string
      location:
        maxLength: 100
        type: string
      username:
        maxLength: 30
        minLength: 2
        type: string
      website:
        maxLength: 500
        type: string
    type: object
  schema.UpdatePluginConfigReq:
    properties:
      config_fields:
        additionalProperties: {}
        type: object
      plugin_slug_name:
        maxLength: 100
        type: string
    required:
    - plugin_slug_name
    type: object
  schema.UpdatePluginStatusReq:
    properties:
      enabled:
        type: boolean
      plugin_slug_name:
        maxLength: 100
        type: string
    required:
    - plugin_slug_name
    type: object
  schema.UpdatePrivilegesConfigReq:
    properties:
      custom_privileges:
        items:
          $ref: '#/definitions/constant.Privilege'
        type: array
      level:
        allOf:
        - $ref: '#/definitions/schema.PrivilegeLevel'
        minimum: 1
    required:
    - level
    type: object
  schema.UpdateReactionReq:
    properties:
      emoji:
        enum:
        - heart
        - smile
        - frown
        type: string
      object_id:
        type: string
      reaction:
        enum:
        - activate
        - deactivate
        type: string
    required:
    - emoji
    - object_id
    - reaction
    type: object
  schema.UpdateReviewReq:
    properties:
      review_id:
        type: integer
      status:
        enum:
        - approve
        - reject
        type: string
    required:
    - review_id
    - status
    type: object
  schema.UpdateSMTPConfigReq:
    properties:
      encryption:
        description: '"" SSL TLS'
        enum:
        - SSL
        - TLS
        type: string
      from_email:
        maxLength: 256
        type: string
      from_name:
        maxLength: 256
        type: string
      smtp_authentication:
        type: boolean
      smtp_host:
        maxLength: 256
        type: string
      smtp_password:
        maxLength: 256
        type: string
      smtp_port:
        maximum: 65535
        minimum: 1
        type: integer
      smtp_username:
        maxLength: 256
        type: string
      test_email_recipient:
        type: string
    type: object
  schema.UpdateTagReq:
    properties:
      display_name:
        description: display_name
        maxLength: 35
        type: string
      edit_summary:
        description: edit summary
        type: string
      original_text:
        description: original text
        type: string
      slug_name:
        description: slug_name
        maxLength: 35
        type: string
      tag_id:
        description: tag_id
        type: string
    required:
    - tag_id
    type: object
  schema.UpdateTagSynonymReq:
    properties:
      synonym_tag_list:
        description: synonym tag list
        items:
          $ref: '#/definitions/schema.TagItem'
        type: array
      tag_id:
        description: tag_id
        type: string
    required:
    - synonym_tag_list
    - tag_id
    type: object
  schema.UpdateUserInterfaceRequest:
    properties:
      color_scheme:
        description: Color scheme
        maxLength: 100
        type: string
      language:
        description: language
        maxLength: 100
        type: string
    required:
    - color_scheme
    - language
    type: object
  schema.UpdateUserNotificationConfigReq:
    properties:
      all_new_question:
        $ref: '#/definitions/schema.NotificationChannelConfig'
      all_new_question_for_following_tags:
        $ref: '#/definitions/schema.NotificationChannelConfig'
      inbox:
        $ref: '#/definitions/schema.NotificationChannelConfig'
    type: object
  schema.UpdateUserPasswordReq:
    properties:
      password:
        maxLength: 32
        minLength: 8
        type: string
      user_id:
        type: string
    required:
    - password
    - user_id
    type: object
  schema.UpdateUserPluginConfigReq:
    properties:
      config_fields:
        additionalProperties: {}
        type: object
      plugin_slug_name:
        maxLength: 100
        type: string
    required:
    - plugin_slug_name
    type: object
  schema.UpdateUserRoleReq:
    properties:
      role_id:
        description: role id
        type: integer
      user_id:
        description: user id
        type: string
    required:
    - role_id
    - user_id
    type: object
  schema.UpdateUserStatusReq:
    properties:
      remove_all_content:
        type: boolean
      status:
        enum:
        - normal
        - suspended
        - deleted
        - inactive
        type: string
      suspend_duration:
        enum:
        - 24h
        - 48h
        - 72h
        - 7d
        - 14d
        - 1m
        - 2m
        - 3m
        - 6m
        - 1y
        - forever
        type: string
      user_id:
        type: string
    required:
    - status
    - user_id
    type: object
  schema.UserBasicInfo:
    properties:
      avatar:
        type: string
      display_name:
        type: string
      id:
        type: string
      language:
        type: string
      location:
        type: string
      rank:
        type: integer
      status:
        type: string
      suspended_until:
        type: integer
      username:
        type: string
      website:
        type: string
    type: object
  schema.UserChangeEmailSendCodeReq:
    properties:
      captcha_code:
        type: string
      captcha_id:
        type: string
      e_mail:
        maxLength: 500
        type: string
      pass:
        maxLength: 32
        minLength: 8
        type: string
    required:
    - e_mail
    type: object
  schema.UserChangeEmailVerifyReq:
    properties:
      code:
        maxLength: 500
        type: string
    required:
    - code
    type: object
  schema.UserEmailLoginReq:
    properties:
      captcha_code:
        type: string
      captcha_id:
        type: string
      e_mail:
        maxLength: 500
        type: string
      pass:
        maxLength: 32
        minLength: 8
        type: string
    required:
    - e_mail
    - pass
    type: object
  schema.UserLoginResp:
    properties:
      access_token:
        description: access token
        type: string
      answer_count:
        description: answer count
        type: integer
      authority_group:
        description: authority group
        type: integer
      avatar:
        description: avatar
        type: string
      bio:
        description: bio markdown
        type: string
      bio_html:
        description: bio html
        type: string
      color_scheme:
        description: Color scheme
        type: string
      created_at:
        description: create time
        type: integer
      display_name:
        description: display name
        type: string
      e_mail:
        description: email
        type: string
      follow_count:
        description: follow count
        type: integer
      have_password:
        description: user have password
        type: boolean
      id:
        description: user id
        type: string
      language:
        description: language
        type: string
      last_login_date:
        description: last login date
        type: integer
      location:
        description: location
        type: string
      mail_status:
        description: mail status(1 pass 2 to be verified)
        type: integer
      mobile:
        description: mobile
        type: string
      notice_status:
        description: notice status(1 on 2off)
        type: integer
      question_count:
        description: question count
        type: integer
      rank:
        description: rank
        type: integer
      role_id:
        description: role id
        type: integer
      status:
        description: user status
        type: string
      suspended_until:
        description: suspended until timestamp
        type: integer
      username:
        description: username
        type: string
      visit_token:
        description: visit token
        type: string
      website:
        description: website
        type: string
    type: object
  schema.UserModifyPasswordReq:
    properties:
      captcha_code:
        type: string
      captcha_id:
        type: string
      old_pass:
        maxLength: 32
        minLength: 8
        type: string
      pass:
        maxLength: 32
        minLength: 8
        type: string
    required:
    - pass
    type: object
  schema.UserRankingResp:
    properties:
      staffs:
        items:
          $ref: '#/definitions/schema.UserRankingSimpleInfo'
        type: array
      users_with_the_most_reputation:
        items:
          $ref: '#/definitions/schema.UserRankingSimpleInfo'
        type: array
      users_with_the_most_vote:
        items:
          $ref: '#/definitions/schema.UserRankingSimpleInfo'
        type: array
    type: object
  schema.UserRankingSimpleInfo:
    properties:
      avatar:
        description: avatar
        type: string
      display_name:
        description: display name
        type: string
      rank:
        description: rank
        type: integer
      username:
        description: username
        type: string
      vote_count:
        description: vote
        type: integer
    type: object
  schema.UserRePassWordRequest:
    properties:
      code:
        maxLength: 100
        type: string
      pass:
        maxLength: 32
        type: string
    required:
    - code
    - pass
    type: object
  schema.UserRegisterReq:
    properties:
      captcha_code:
        type: string
      captcha_id:
        type: string
      e_mail:
        maxLength: 500
        type: string
      name:
        maxLength: 30
        minLength: 2
        type: string
      pass:
        maxLength: 32
        minLength: 8
        type: string
    required:
    - e_mail
    - name
    - pass
    type: object
  schema.UserRetrievePassWordRequest:
    properties:
      captcha_code:
        type: string
      captcha_id:
        type: string
      e_mail:
        maxLength: 500
        type: string
    required:
    - e_mail
    type: object
  schema.UserUnsubscribeNotificationReq:
    properties:
      code:
        maxLength: 500
        type: string
    required:
    - code
    type: object
  schema.VoteReq:
    properties:
      captcha_code:
        type: string
      captcha_id:
        type: string
      is_cancel:
        type: boolean
      object_id:
        type: string
    required:
    - object_id
    type: object
  schema.VoteResp:
    properties:
      down_votes:
        type: integer
      up_votes:
        type: integer
      vote_status:
        type: string
      votes:
        type: integer
    type: object
  translator.LangOption:
    properties:
      label:
        type: string
      progress:
        description: Translation completion percentage
        type: integer
      value:
        type: string
    type: object
info:
  contact: {}
  description: Apache Answer API
  title: Apache Answer
paths:
  /:
    get:
      consumes:
      - application/json
      description: if config file not exist try to redirect to install page
      produces:
      - application/json
      responses: {}
      summary: if config file not exist try to redirect to install page
      tags:
      - installation
  /answer/admin/api/ai-config:
    get:
      description: get AI configuration
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteAIResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get AI configuration
      tags:
      - admin
    put:
      description: update AI configuration
      parameters:
      - description: AI config
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteAIReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update AI configuration
      tags:
      - admin
  /answer/admin/api/ai-models:
    post:
      description: get AI models
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetAIModelResp'
                  type: array
              type: object
      security:
      - ApiKeyAuth: []
      summary: get AI models
      tags:
      - admin
  /answer/admin/api/ai-provider:
    get:
      description: get AI provider configuration
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetAIProviderResp'
                  type: array
              type: object
      security:
      - ApiKeyAuth: []
      summary: get AI provider configuration
      tags:
      - admin
  /answer/admin/api/ai/conversation:
    delete:
      consumes:
      - application/json
      description: delete conversation and its related records for admin
      parameters:
      - description: apikey
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AIConversationAdminDeleteReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      summary: delete conversation for admin
      tags:
      - ai-conversation-admin
    get:
      consumes:
      - application/json
      description: get conversation detail for admin
      parameters:
      - description: conversation id
        in: query
        name: conversation_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.AIConversationAdminDetailResp'
              type: object
      summary: get conversation detail for admin
      tags:
      - ai-conversation-admin
  /answer/admin/api/ai/conversation/page:
    get:
      consumes:
      - application/json
      description: get conversation list for admin
      parameters:
      - description: page
        in: query
        name: page
        type: integer
      - description: page size
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.AIConversationAdminListItem'
                        type: array
                    type: object
              type: object
      summary: get conversation list for admin
      tags:
      - ai-conversation-admin
  /answer/admin/api/answer/page:
    get:
      consumes:
      - application/json
      description: Status:[available,deleted,pending]
      parameters:
      - description: page size
        in: query
        name: page
        type: integer
      - description: page size
        in: query
        name: page_size
        type: integer
      - description: user status
        enum:
        - available
        - deleted
        - pending
        in: query
        name: status
        type: string
      - description: answer id or question title
        in: query
        name: query
        type: string
      - description: question id
        in: query
        name: question_id
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: AdminAnswerPage admin answer page
      tags:
      - admin
  /answer/admin/api/answer/status:
    put:
      consumes:
      - application/json
      description: update answer status
      parameters:
      - description: AdminUpdateAnswerStatusReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AdminUpdateAnswerStatusReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update answer status
      tags:
      - admin
  /answer/admin/api/api-key:
    delete:
      description: delete apikey
      parameters:
      - description: apikey
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.DeleteAPIKeyReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: delete apikey
      tags:
      - admin
    post:
      description: add apikey
      parameters:
      - description: apikey
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AddAPIKeyReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.AddAPIKeyResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: add apikey
      tags:
      - admin
    put:
      description: update apikey
      parameters:
      - description: apikey
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateAPIKeyReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update apikey
      tags:
      - admin
  /answer/admin/api/api-key/all:
    get:
      description: get all api keys
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetAPIKeyResp'
                  type: array
              type: object
      security:
      - ApiKeyAuth: []
      summary: get all api keys
      tags:
      - admin
  /answer/admin/api/badge/status:
    put:
      consumes:
      - application/json
      description: update badge status
      parameters:
      - description: UpdateBadgeStatusReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateBadgeStatusReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update badge status
      tags:
      - AdminBadge
  /answer/admin/api/badges:
    get:
      consumes:
      - application/json
      description: list all badges by page
      parameters:
      - description: page
        in: query
        name: page
        type: integer
      - description: page size
        in: query
        name: page_size
        type: integer
      - description: badge status
        enum:
        - ""
        - active
        - inactive
        in: query
        name: status
        type: string
      - description: search param
        in: query
        name: q
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetBadgeListPagedResp'
                  type: array
              type: object
      security:
      - ApiKeyAuth: []
      summary: list all badges by page
      tags:
      - AdminBadge
  /answer/admin/api/dashboard:
    get:
      consumes:
      - application/json
      description: DashboardInfo
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: DashboardInfo
      tags:
      - admin
  /answer/admin/api/delete/permanently:
    delete:
      consumes:
      - application/json
      description: delete permanently
      parameters:
      - description: DeletePermanentlyReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.DeletePermanentlyReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: delete permanently
      tags:
      - admin
  /answer/admin/api/language/options:
    get:
      description: Get language options
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: Get language options
      tags:
      - Lang
  /answer/admin/api/mcp-config:
    get:
      description: get MCP configuration
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteMCPResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get MCP configuration
      tags:
      - admin
    put:
      description: update MCP configuration
      parameters:
      - description: MCP config
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteMCPReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update MCP configuration
      tags:
      - admin
  /answer/admin/api/plugin/config:
    get:
      description: get plugin config
      parameters:
      - description: plugin_slug_name
        in: query
        name: plugin_slug_name
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetPluginConfigResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get plugin config
      tags:
      - AdminPlugin
    put:
      consumes:
      - application/json
      description: update plugin config
      parameters:
      - description: UpdatePluginConfigReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdatePluginConfigReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update plugin config
      tags:
      - AdminPlugin
  /answer/admin/api/plugin/status:
    put:
      consumes:
      - application/json
      description: update plugin status
      parameters:
      - description: UpdatePluginStatusReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdatePluginStatusReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update plugin status
      tags:
      - AdminPlugin
  /answer/admin/api/plugins:
    get:
      consumes:
      - application/json
      description: get plugin list
      parameters:
      - description: 'status: active/inactive'
        in: query
        name: status
        type: string
      - description: have config
        in: query
        name: have_config
        type: boolean
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetPluginListResp'
                  type: array
              type: object
      security:
      - ApiKeyAuth: []
      summary: get plugin list
      tags:
      - AdminPlugin
  /answer/admin/api/question/page:
    get:
      consumes:
      - application/json
      description: Status:[available,closed,deleted,pending]
      parameters:
      - description: page size
        in: query
        name: page
        type: integer
      - description: page size
        in: query
        name: page_size
        type: integer
      - description: user status
        enum:
        - available
        - closed
        - deleted
        - pending
        in: query
        name: status
        type: string
      - description: question id or title
        in: query
        name: query
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: AdminQuestionPage admin question page
      tags:
      - admin
  /answer/admin/api/question/status:
    put:
      consumes:
      - application/json
      description: update question status
      parameters:
      - description: AdminUpdateQuestionStatusReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AdminUpdateQuestionStatusReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update question status
      tags:
      - admin
  /answer/admin/api/reasons:
    get:
      consumes:
      - application/json
      description: get reasons by object type and action
      parameters:
      - description: object_type
        enum:
        - question
        - answer
        - comment
        - user
        in: query
        name: object_type
        required: true
        type: string
      - description: action
        enum:
        - status
        - close
        - flag
        - review
        in: query
        name: action
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: get reasons by object type and action
      tags:
      - reason
  /answer/admin/api/roles:
    get:
      description: get role list
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetRoleResp'
                  type: array
              type: object
      security:
      - ApiKeyAuth: []
      summary: get role list
      tags:
      - admin
  /answer/admin/api/setting/privileges:
    get:
      description: GetPrivilegesConfig get privileges config
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetPrivilegesConfigResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: GetPrivilegesConfig get privileges config
      tags:
      - admin
    put:
      description: update privileges config
      parameters:
      - description: config
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdatePrivilegesConfigReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update privileges config
      tags:
      - admin
  /answer/admin/api/setting/smtp:
    get:
      description: GetSMTPConfig get smtp config
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetSMTPConfigResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: GetSMTPConfig get smtp config
      tags:
      - admin
    put:
      description: update smtp config
      parameters:
      - description: smtp config
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateSMTPConfigReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update smtp config
      tags:
      - admin
  /answer/admin/api/siteinfo/advanced:
    get:
      description: get site advanced setting
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteAdvancedResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get site advanced setting
      tags:
      - admin
    put:
      description: update site advanced info
      parameters:
      - description: advanced settings
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteAdvancedReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site advanced info
      tags:
      - admin
  /answer/admin/api/siteinfo/branding:
    get:
      description: get site interface
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteBrandingResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get site interface
      tags:
      - admin
    put:
      description: update site info branding
      parameters:
      - description: branding info
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteBrandingReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site info branding
      tags:
      - admin
  /answer/admin/api/siteinfo/custom-css-html:
    get:
      description: get site info custom html css config
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteCustomCssHTMLResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get site info custom html css config
      tags:
      - admin
    put:
      description: update site custom css html config
      parameters:
      - description: login info
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteCustomCssHTMLReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site custom css html config
      tags:
      - admin
  /answer/admin/api/siteinfo/general:
    get:
      description: get site general information
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteGeneralResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get site general information
      tags:
      - admin
    put:
      description: update site general information
      parameters:
      - description: general
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteGeneralReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site general information
      tags:
      - admin
  /answer/admin/api/siteinfo/interface:
    get:
      description: get site interface
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteInterfaceSettingsResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get site interface
      tags:
      - admin
    put:
      description: update site info interface
      parameters:
      - description: general
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteInterfaceReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site info interface
      tags:
      - admin
  /answer/admin/api/siteinfo/login:
    get:
      description: get site info login config
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteLoginResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get site info login config
      tags:
      - admin
    put:
      description: update site login
      parameters:
      - description: login info
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteLoginReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site login
      tags:
      - admin
  /answer/admin/api/siteinfo/polices:
    get:
      description: Get the policies information for the site
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SitePoliciesResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: Get the policies information for the site
      tags:
      - admin
    put:
      description: update site policies configuration
      parameters:
      - description: write info
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SitePoliciesReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site policies configuration
      tags:
      - admin
  /answer/admin/api/siteinfo/question:
    get:
      description: get site questions setting
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteQuestionsResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get site questions setting
      tags:
      - admin
    put:
      description: update site question settings
      parameters:
      - description: questions settings
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteQuestionsReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site question settings
      tags:
      - admin
  /answer/admin/api/siteinfo/security:
    get:
      description: Get the security information for the site
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteSecurityResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: Get the security information for the site
      tags:
      - admin
    put:
      description: update site security configuration
      parameters:
      - description: write info
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteSecurityReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site security configuration
      tags:
      - admin
  /answer/admin/api/siteinfo/seo:
    get:
      description: get site seo information
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteSeoResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get site seo information
      tags:
      - admin
    put:
      description: update site seo information
      parameters:
      - description: seo
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteSeoReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site seo information
      tags:
      - admin
  /answer/admin/api/siteinfo/tag:
    get:
      description: get site tags setting
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteTagsResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get site tags setting
      tags:
      - admin
    put:
      description: update site tag settings
      parameters:
      - description: tags settings
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteTagsReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site tag settings
      tags:
      - admin
  /answer/admin/api/siteinfo/theme:
    get:
      description: get site info theme config
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteThemeResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get site info theme config
      tags:
      - admin
    put:
      description: update site custom css html config
      parameters:
      - description: login info
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteThemeReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site custom css html config
      tags:
      - admin
  /answer/admin/api/siteinfo/users:
    get:
      description: get site user config
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteUsersResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get site user config
      tags:
      - admin
    put:
      description: update site info config about users
      parameters:
      - description: users info
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteUsersReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site info config about users
      tags:
      - admin
  /answer/admin/api/siteinfo/users-settings:
    get:
      description: get site interface
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteUsersSettingsResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get site interface
      tags:
      - admin
    put:
      description: update site info users settings
      parameters:
      - description: general
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SiteUsersSettingsReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update site info users settings
      tags:
      - admin
  /answer/admin/api/theme/options:
    get:
      description: Get theme options
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: Get theme options
      tags:
      - admin
  /answer/admin/api/user:
    post:
      consumes:
      - application/json
      description: add user
      parameters:
      - description: user
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AddUserReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: add user
      tags:
      - admin
  /answer/admin/api/user/activation:
    get:
      description: get user activation
      parameters:
      - description: user id
        in: query
        name: user_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetUserActivationResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get user activation
      tags:
      - admin
  /answer/admin/api/user/password:
    put:
      consumes:
      - application/json
      description: update user password
      parameters:
      - description: user
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateUserPasswordReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update user password
      tags:
      - admin
  /answer/admin/api/user/profile:
    put:
      consumes:
      - application/json
      description: edit user profile
      parameters:
      - description: user
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.EditUserProfileReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: edit user profile
      tags:
      - admin
  /answer/admin/api/user/role:
    put:
      consumes:
      - application/json
      description: update user role
      parameters:
      - description: user
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateUserRoleReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update user role
      tags:
      - admin
  /answer/admin/api/user/status:
    put:
      consumes:
      - application/json
      description: update user
      parameters:
      - description: user
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateUserStatusReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update user
      tags:
      - admin
  /answer/admin/api/users:
    post:
      consumes:
      - application/json
      description: add users
      parameters:
      - description: user
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AddUsersReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: add users
      tags:
      - admin
  /answer/admin/api/users/activation:
    post:
      description: send user activation
      parameters:
      - description: SendUserActivationReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.SendUserActivationReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: send user activation
      tags:
      - admin
  /answer/admin/api/users/page:
    get:
      description: get user page
      parameters:
      - description: page size
        in: query
        name: page
        type: integer
      - description: page size
        in: query
        name: page_size
        type: integer
      - description: 'search query: email, username or id:[id]'
        in: query
        name: query
        type: string
      - description: staff user
        in: query
        name: staff
        type: boolean
      - description: user status
        enum:
        - suspended
        - deleted
        - inactive
        in: query
        name: status
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      records:
                        items:
                          $ref: '#/definitions/schema.GetUserPageResp'
                        type: array
                    type: object
              type: object
      security:
      - ApiKeyAuth: []
      summary: get user page
      tags:
      - admin
  /answer/api/v1/activity/timeline:
    get:
      description: get object timeline
      parameters:
      - description: object id
        in: query
        name: object_id
        type: string
      - description: tag slug name
        in: query
        name: tag_slug_name
        type: string
      - description: object type
        enum:
        - question
        - answer
        - tag
        in: query
        name: object_type
        type: string
      - description: is show vote
        in: query
        name: show_vote
        type: boolean
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetObjectTimelineResp'
              type: object
      summary: get object timeline
      tags:
      - Comment
  /answer/api/v1/activity/timeline/detail:
    get:
      description: get object timeline detail
      parameters:
      - description: revision id
        in: query
        name: revision_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetObjectTimelineResp'
              type: object
      summary: get object timeline detail
      tags:
      - Comment
  /answer/api/v1/ai/conversation:
    get:
      consumes:
      - application/json
      description: get conversation detail
      parameters:
      - description: conversation id
        in: query
        name: conversation_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.AIConversationDetailResp'
              type: object
      summary: get conversation detail
      tags:
      - ai-conversation
  /answer/api/v1/ai/conversation/page:
    get:
      consumes:
      - application/json
      description: get conversation list
      parameters:
      - description: page
        in: query
        name: page
        type: integer
      - description: page size
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.AIConversationListItem'
                        type: array
                    type: object
              type: object
      summary: get conversation list
      tags:
      - ai-conversation
  /answer/api/v1/ai/conversation/vote:
    post:
      consumes:
      - application/json
      description: vote record
      parameters:
      - description: vote request
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AIConversationVoteReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      summary: vote record
      tags:
      - ai-conversation
  /answer/api/v1/answer:
    delete:
      consumes:
      - application/json
      description: delete answer
      parameters:
      - description: answer
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.RemoveAnswerReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: delete answer
      tags:
      - Answer
    post:
      consumes:
      - application/json
      description: add answer
      parameters:
      - description: add answer request
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AnswerAddReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: Add Answer
      tags:
      - Answer
    put:
      consumes:
      - application/json
      description: Update Answer
      parameters:
      - description: AnswerUpdateReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AnswerUpdateReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: Update Answer
      tags:
      - Answer
  /answer/api/v1/answer/acceptance:
    post:
      consumes:
      - application/json
      description: Accept Answer
      parameters:
      - description: AcceptAnswerReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AcceptAnswerReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: Accept Answer
      tags:
      - Answer
  /answer/api/v1/answer/info:
    get:
      consumes:
      - application/json
      description: Get Answer Detail
      parameters:
      - description: id
        in: query
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetAnswerInfoResp'
              type: object
      summary: Get Answer Detail
      tags:
      - Answer
  /answer/api/v1/answer/page:
    get:
      consumes:
      - application/json
      description: AnswerList <br> <b>order</b> (default or updated)
      parameters:
      - description: question_id
        in: query
        name: question_id
        required: true
        type: string
      - description: order
        in: query
        name: order
        required: true
        type: string
      - description: page
        in: query
        name: page
        required: true
        type: string
      - description: page_size
        in: query
        name: page_size
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            type: string
      summary: AnswerList
      tags:
      - Answer
  /answer/api/v1/answer/recover:
    post:
      consumes:
      - application/json
      description: recover the deleted answer
      parameters:
      - description: answer
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.RecoverAnswerReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: recover answer
      tags:
      - Answer
  /answer/api/v1/badge:
    get:
      consumes:
      - application/json
      description: get badge info
      parameters:
      - default: string
        description: id
        in: query
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetBadgeInfoResp'
              type: object
      summary: get badge info
      tags:
      - api-badge
  /answer/api/v1/badge/awards/page:
    get:
      consumes:
      - application/json
      description: get badge award list
      parameters:
      - description: page
        in: query
        name: page
        type: integer
      - description: page size
        in: query
        name: page_size
        type: integer
      - description: badge id
        in: query
        name: badge_id
        required: true
        type: string
      - description: only list the award by username
        in: query
        name: username
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetBadgeInfoResp'
              type: object
      summary: get badge award list
      tags:
      - api-badge
  /answer/api/v1/badge/user/awards:
    get:
      consumes:
      - application/json
      description: get user badge award list
      parameters:
      - description: user name
        in: query
        name: username
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetUserBadgeAwardListResp'
                  type: array
              type: object
      summary: get user badge award list
      tags:
      - api-badge
  /answer/api/v1/badge/user/awards/recent:
    get:
      consumes:
      - application/json
      description: get user badge award list
      parameters:
      - description: user name
        in: query
        name: username
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetUserBadgeAwardListResp'
                  type: array
              type: object
      summary: get user badge award list
      tags:
      - api-badge
  /answer/api/v1/badges:
    get:
      consumes:
      - application/json
      description: list all badges group by group
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetBadgeListResp'
                  type: array
              type: object
      summary: list all badges group by group
      tags:
      - api-badge
  /answer/api/v1/collection/switch:
    post:
      consumes:
      - application/json
      description: add collection
      parameters:
      - description: collection
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.CollectionSwitchReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.CollectionSwitchResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: add collection
      tags:
      - Collection
  /answer/api/v1/comment:
    delete:
      consumes:
      - application/json
      description: remove comment
      parameters:
      - description: comment
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.RemoveCommentReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: remove comment
      tags:
      - Comment
    get:
      description: get comment by id
      parameters:
      - description: id
        in: query
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.GetCommentResp'
                        type: array
                    type: object
              type: object
      summary: get comment by id
      tags:
      - Comment
    post:
      consumes:
      - application/json
      description: add comment
      parameters:
      - description: comment
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AddCommentReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetCommentResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: add comment
      tags:
      - Comment
    put:
      consumes:
      - application/json
      description: update comment
      parameters:
      - description: comment
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateCommentReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update comment
      tags:
      - Comment
  /answer/api/v1/comment/page:
    get:
      description: get comment page
      parameters:
      - description: page
        in: query
        name: page
        type: integer
      - description: page size
        in: query
        name: page_size
        type: integer
      - description: object id
        in: query
        name: object_id
        required: true
        type: string
      - description: query condition
        enum:
        - vote
        in: query
        name: query_cond
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.GetCommentResp'
                        type: array
                    type: object
              type: object
      summary: get comment page
      tags:
      - Comment
  /answer/api/v1/connector/binding/email:
    post:
      consumes:
      - application/json
      description: external login binding user send email
      parameters:
      - description: external login binding user send email
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.ExternalLoginBindingUserSendEmailReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.ExternalLoginBindingUserSendEmailResp'
              type: object
      summary: external login binding user send email
      tags:
      - PluginConnector
  /answer/api/v1/connector/info:
    get:
      description: get all enabled connectors
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.ConnectorInfoResp'
                  type: array
              type: object
      security:
      - ApiKeyAuth: []
      summary: get all enabled connectors
      tags:
      - PluginConnector
  /answer/api/v1/connector/user/info:
    get:
      description: get all connectors info about user
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.ConnectorUserInfoResp'
                  type: array
              type: object
      security:
      - ApiKeyAuth: []
      summary: get all connectors info about user
      tags:
      - PluginConnector
  /answer/api/v1/connector/user/unbinding:
    delete:
      consumes:
      - application/json
      description: unbind external user login
      parameters:
      - description: ExternalLoginUnbindingReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.ExternalLoginUnbindingReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: unbind external user login
      tags:
      - PluginConnector
  /answer/api/v1/embed/config:
    get:
      consumes:
      - application/json
      description: get embed plugin config
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/plugin.EmbedConfig'
                  type: array
              type: object
      summary: get embed plugin config
      tags:
      - Plugin
  /answer/api/v1/file:
    post:
      consumes:
      - multipart/form-data
      description: upload file
      parameters:
      - description: identify the source of the file upload
        enum:
        - post
        - post_attachment
        - avatar
        - branding
        in: formData
        name: source
        required: true
        type: string
      - description: file
        in: formData
        name: file
        required: true
        type: file
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  type: string
              type: object
      security:
      - ApiKeyAuth: []
      summary: upload file
      tags:
      - Upload
  /answer/api/v1/follow:
    post:
      consumes:
      - application/json
      description: follow object or cancel follow operation
      parameters:
      - description: follow
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.FollowReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.FollowResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: follow object or cancel follow operation
      tags:
      - Activity
  /answer/api/v1/follow/tags:
    put:
      consumes:
      - application/json
      description: update user follow tags
      parameters:
      - description: follow
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateFollowTagsReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update user follow tags
      tags:
      - Activity
  /answer/api/v1/language/config:
    get:
      description: get language config mapping
      parameters:
      - description: Accept-Language
        in: header
        name: Accept-Language
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      summary: get language config mapping
      tags:
      - Lang
  /answer/api/v1/language/options:
    get:
      description: Get language options
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      summary: Get language options
      tags:
      - Lang
  /answer/api/v1/meta/reaction:
    get:
      consumes:
      - application/json
      description: get reaction for an object
      parameters:
      - description: object_id
        in: query
        name: object_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.ReactionRespItem'
              type: object
      summary: get reaction
      tags:
      - Meta
    put:
      consumes:
      - application/json
      description: update reaction. if not exist, add one
      parameters:
      - description: reaction
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateReactionReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: add or update reaction
      tags:
      - Meta
  /answer/api/v1/notification/page:
    get:
      consumes:
      - application/json
      description: get notification list
      parameters:
      - description: page size
        in: query
        name: page
        type: integer
      - description: page size
        in: query
        name: page_size
        type: integer
      - description: type
        enum:
        - inbox
        - achievement
        in: query
        name: type
        required: true
        type: string
      - description: inbox_type
        enum:
        - all
        - posts
        - invites
        - votes
        in: query
        name: inbox_type
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: get notification list
      tags:
      - Notification
  /answer/api/v1/notification/read/state:
    put:
      consumes:
      - application/json
      description: ClearUnRead
      parameters:
      - description: NotificationClearIDRequest
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.NotificationClearIDRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: ClearUnRead
      tags:
      - Notification
  /answer/api/v1/notification/read/state/all:
    put:
      consumes:
      - application/json
      description: ClearUnRead
      parameters:
      - description: NotificationClearRequest
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.NotificationClearRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: ClearUnRead
      tags:
      - Notification
  /answer/api/v1/notification/status:
    get:
      consumes:
      - application/json
      description: GetRedDot
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: GetRedDot
      tags:
      - Notification
    put:
      consumes:
      - application/json
      description: DelRedDot
      parameters:
      - description: NotificationClearRequest
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.NotificationClearRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: DelRedDot
      tags:
      - Notification
  /answer/api/v1/permission:
    get:
      description: check user permission
      parameters:
      - description: access-token
        in: header
        name: Authorization
        required: true
        type: string
      - description: permission key
        enum:
        - question.add
        - question.edit
        - question.edit_without_review
        - question.delete
        - question.close
        - question.reopen
        - question.vote_up
        - question.vote_down
        - question.pin
        - question.unpin
        - question.hide
        - question.show
        - answer.add
        - answer.edit
        - answer.edit_without_review
        - answer.delete
        - answer.accept
        - answer.vote_up
        - answer.vote_down
        - answer.invite_someone_to_answer
        - comment.add
        - comment.edit
        - comment.delete
        - comment.vote_up
        - comment.vote_down
        - report.add
        - tag.add
        - tag.edit
        - tag.edit_slug_name
        - tag.edit_without_review
        - tag.delete
        - tag.synonym
        - link.url_limit
        - vote.detail
        - answer.audit
        - question.audit
        - tag.audit
        - tag.use_reserved_tag
        in: query
        name: action
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  additionalProperties:
                    type: boolean
                  type: object
              type: object
      security:
      - ApiKeyAuth: []
      summary: check user permission
      tags:
      - Permission
  /answer/api/v1/personal/answer/page:
    get:
      consumes:
      - application/json
      description: list personal answers
      parameters:
      - default: string
        description: username
        in: query
        name: username
        required: true
        type: string
      - description: order
        enum:
        - newest
        - score
        in: query
        name: order
        required: true
        type: string
      - default: "0"
        description: page
        in: query
        name: page
        required: true
        type: string
      - default: "20"
        description: page_size
        in: query
        name: page_size
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: list personal answers
      tags:
      - Personal
  /answer/api/v1/personal/collection/page:
    get:
      consumes:
      - application/json
      description: list personal collections
      parameters:
      - default: "0"
        description: page
        in: query
        name: page
        required: true
        type: string
      - default: "20"
        description: page_size
        in: query
        name: page_size
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: list personal collections
      tags:
      - Collection
  /answer/api/v1/personal/comment/page:
    get:
      description: user personal comment list
      parameters:
      - description: page
        in: query
        name: page
        type: integer
      - description: page size
        in: query
        name: page_size
        type: integer
      - description: username
        in: query
        name: username
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.GetCommentPersonalWithPageResp'
                        type: array
                    type: object
              type: object
      summary: user personal comment list
      tags:
      - Comment
  /answer/api/v1/personal/qa/top:
    get:
      consumes:
      - application/json
      description: UserTop
      parameters:
      - default: string
        description: username
        in: query
        name: username
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      summary: UserTop
      tags:
      - Question
  /answer/api/v1/personal/rank/page:
    get:
      description: user personal rank list
      parameters:
      - description: page
        in: query
        name: page
        type: integer
      - description: page size
        in: query
        name: page_size
        type: integer
      - description: username
        in: query
        name: username
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.GetRankPersonalPageResp'
                        type: array
                    type: object
              type: object
      summary: user personal rank list
      tags:
      - Rank
  /answer/api/v1/personal/user/info:
    get:
      consumes:
      - application/json
      description: GetOtherUserInfoByUsername
      parameters:
      - description: username
        in: query
        name: username
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetOtherUserInfoResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: GetOtherUserInfoByUsername
      tags:
      - User
  /answer/api/v1/personal/vote/page:
    get:
      consumes:
      - application/json
      description: get user personal votes
      parameters:
      - description: page size
        in: query
        name: page
        type: integer
      - description: page size
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.GetVoteWithPageResp'
                        type: array
                    type: object
              type: object
      security:
      - ApiKeyAuth: []
      summary: get user personal votes
      tags:
      - Activity
  /answer/api/v1/plugin/status:
    get:
      consumes:
      - application/json
      description: get all plugins status
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetPluginListResp'
                  type: array
              type: object
      summary: get all plugins status
      tags:
      - Plugin
  /answer/api/v1/post/render:
    post:
      consumes:
      - application/json
      description: render post content
      parameters:
      - description: PostRenderReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.PostRenderReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: render post content
      tags:
      - Upload
  /answer/api/v1/question:
    delete:
      consumes:
      - application/json
      description: delete question
      parameters:
      - description: question
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.RemoveQuestionReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: delete question
      tags:
      - Question
    post:
      consumes:
      - application/json
      description: add question
      parameters:
      - description: question
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.QuestionAdd'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: add question
      tags:
      - Question
    put:
      consumes:
      - application/json
      description: update question
      parameters:
      - description: question
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.QuestionUpdate'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update question
      tags:
      - Question
  /answer/api/v1/question/answer:
    post:
      consumes:
      - application/json
      description: add question and answer
      parameters:
      - description: question
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.QuestionAddByAnswer'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: add question and answer
      tags:
      - Question
  /answer/api/v1/question/info:
    get:
      consumes:
      - application/json
      description: get question details
      parameters:
      - default: "1"
        description: Question TagID
        in: query
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            type: string
      summary: get question details
      tags:
      - Question
  /answer/api/v1/question/invite:
    get:
      consumes:
      - application/json
      description: get question invite user info
      parameters:
      - default: "1"
        description: Question ID
        in: query
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            type: string
      summary: get question invite user info
      tags:
      - Question
    put:
      consumes:
      - application/json
      description: update question invite user
      parameters:
      - description: question
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.QuestionUpdateInviteUser'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update question invite user
      tags:
      - Question
  /answer/api/v1/question/link:
    get:
      description: get question link
      parameters:
      - in: query
        minimum: 1
        name: in_days
        type: integer
      - enum:
        - newest
        - active
        - hot
        - score
        - unanswered
        - recommend
        - frequent
        in: query
        name: order
        type: string
      - in: query
        minimum: 1
        name: page
        type: integer
      - in: query
        maximum: 100
        minimum: 1
        name: page_size
        type: integer
      - in: query
        name: question_id
        required: true
        type: string
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.QuestionPageResp'
                        type: array
                    type: object
              type: object
      summary: get question link
      tags:
      - Question
  /answer/api/v1/question/operation:
    put:
      consumes:
      - application/json
      description: Operation question \n operation [pin unpin hide show]
      parameters:
      - description: question
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.OperationQuestionReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: Operation question
      tags:
      - Question
  /answer/api/v1/question/page:
    get:
      consumes:
      - application/json
      description: get questions by page
      parameters:
      - description: QuestionPageReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.QuestionPageReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.QuestionPageResp'
                        type: array
                    type: object
              type: object
      summary: get questions by page
      tags:
      - Question
  /answer/api/v1/question/recommend/page:
    get:
      consumes:
      - application/json
      description: get recommend questions by page
      parameters:
      - description: QuestionPageReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.QuestionPageReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.QuestionPageResp'
                        type: array
                    type: object
              type: object
      summary: get recommend questions by page
      tags:
      - Question
  /answer/api/v1/question/recover:
    post:
      consumes:
      - application/json
      description: recover deleted question
      parameters:
      - description: question
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.QuestionRecoverReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: recover deleted question
      tags:
      - Question
  /answer/api/v1/question/reopen:
    put:
      consumes:
      - application/json
      description: reopen question
      parameters:
      - description: question
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.ReopenQuestionReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: reopen question
      tags:
      - Question
  /answer/api/v1/question/similar:
    get:
      consumes:
      - application/json
      description: fuzzy query similar questions based on title
      parameters:
      - default: string
        description: title
        in: query
        name: title
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: fuzzy query similar questions based on title
      tags:
      - Question
  /answer/api/v1/question/similar/tag:
    get:
      consumes:
      - application/json
      description: Search Similar Question
      parameters:
      - default: ""
        description: question_id
        in: query
        name: question_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            type: string
      summary: Search Similar Question
      tags:
      - Question
  /answer/api/v1/question/status:
    put:
      consumes:
      - application/json
      description: Close question
      parameters:
      - description: question
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.CloseQuestionReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: Close question
      tags:
      - Question
  /answer/api/v1/question/tags:
    get:
      description: get tag list
      parameters:
      - description: tag
        in: query
        name: tag
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetTagBasicResp'
                  type: array
              type: object
      security:
      - ApiKeyAuth: []
      summary: get tag list
      tags:
      - Tag
  /answer/api/v1/reasons:
    get:
      consumes:
      - application/json
      description: get reasons by object type and action
      parameters:
      - description: object_type
        enum:
        - question
        - answer
        - comment
        - user
        in: query
        name: object_type
        required: true
        type: string
      - description: action
        enum:
        - status
        - close
        - flag
        - review
        in: query
        name: action
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: get reasons by object type and action
      tags:
      - reason
  /answer/api/v1/render/config:
    get:
      consumes:
      - application/json
      description: GetRenderConfig
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/plugin.RenderConfig'
              type: object
      summary: GetRenderConfig
      tags:
      - PluginRender
  /answer/api/v1/report:
    post:
      consumes:
      - application/json
      description: add report <br> source (question, answer, comment, user)
      parameters:
      - description: report
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AddReportReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: add report
      tags:
      - Report
  /answer/api/v1/report/review:
    put:
      consumes:
      - application/json
      description: review report
      parameters:
      - description: flag
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.ReviewReportReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: review report
      tags:
      - Report
  /answer/api/v1/report/unreviewed/post:
    get:
      consumes:
      - application/json
      description: get unreviewed report post page
      parameters:
      - description: page
        in: query
        name: page
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.GetReportListPageResp'
                        type: array
                    type: object
              type: object
      security:
      - ApiKeyAuth: []
      summary: get unreviewed report post page
      tags:
      - Report
  /answer/api/v1/review/pending/post:
    put:
      consumes:
      - application/json
      description: update review
      parameters:
      - description: review
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateReviewReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update review
      tags:
      - Review
  /answer/api/v1/review/pending/post/page:
    get:
      consumes:
      - application/json
      description: get unreviewed post page
      parameters:
      - description: page
        in: query
        name: page
        type: integer
      - description: object_id
        in: query
        name: object_id
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.GetUnreviewedPostPageResp'
                        type: array
                    type: object
              type: object
      security:
      - ApiKeyAuth: []
      summary: get unreviewed post page
      tags:
      - Review
  /answer/api/v1/reviewing/type:
    get:
      description: get reviewing type
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetReviewingTypeResp'
                  type: array
              type: object
      security:
      - ApiKeyAuth: []
      summary: get reviewing type
      tags:
      - Revision
  /answer/api/v1/revisions:
    get:
      description: get revision list
      parameters:
      - description: object id
        in: query
        name: object_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetRevisionResp'
                  type: array
              type: object
      summary: get revision list
      tags:
      - Revision
  /answer/api/v1/revisions/audit:
    put:
      description: revision audit operation:approve or reject
      parameters:
      - description: audit
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.RevisionAuditReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: revision audit
      tags:
      - Revision
  /answer/api/v1/revisions/edit/check:
    get:
      consumes:
      - application/json
      description: check can update revision
      parameters:
      - default: string
        description: id
        in: query
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: check can update revision
      tags:
      - Revision
  /answer/api/v1/revisions/unreviewed:
    get:
      description: get unreviewed revision list
      parameters:
      - description: page id
        in: query
        name: page
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.GetUnreviewedRevisionResp'
                        type: array
                    type: object
              type: object
      security:
      - ApiKeyAuth: []
      summary: get unreviewed revision list
      tags:
      - Revision
  /answer/api/v1/search:
    get:
      description: search object
      parameters:
      - description: query string
        in: query
        name: q
        required: true
        type: string
      - description: order
        enum:
        - newest
        - active
        - score
        - relevance
        in: query
        name: order
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SearchResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: search object
      tags:
      - Search
  /answer/api/v1/search/desc:
    get:
      description: get search description
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SearchResp'
              type: object
      summary: get search description
      tags:
      - Search
  /answer/api/v1/siteinfo:
    get:
      description: get site info
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.SiteInfoResp'
              type: object
      summary: get site info
      tags:
      - site
  /answer/api/v1/siteinfo/legal:
    get:
      description: get site legal info
      parameters:
      - description: legal information type
        enum:
        - tos
        - privacy
        in: query
        name: info_type
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetSiteLegalInfoResp'
              type: object
      summary: get site legal info
      tags:
      - site
  /answer/api/v1/tag:
    delete:
      consumes:
      - application/json
      description: delete tag
      parameters:
      - description: tag
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.RemoveTagReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: delete tag
      tags:
      - Tag
    get:
      consumes:
      - application/json
      description: get tag one
      parameters:
      - description: tag id
        in: query
        name: tag_id
        required: true
        type: string
      - description: tag name
        in: query
        name: tag_name
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetTagResp'
              type: object
      summary: get tag one
      tags:
      - Tag
    post:
      consumes:
      - application/json
      description: add tag
      parameters:
      - description: tag
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AddTagReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: add tag
      tags:
      - Tag
    put:
      consumes:
      - application/json
      description: update tag
      parameters:
      - description: tag
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateTagReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update tag
      tags:
      - Tag
  /answer/api/v1/tag/merge:
    post:
      consumes:
      - application/json
      description: merge tag
      parameters:
      - description: tag
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.AddTagReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: merge tag
      tags:
      - Tag
  /answer/api/v1/tag/recover:
    post:
      consumes:
      - application/json
      description: recover delete tag
      parameters:
      - description: tag
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.RecoverTagReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: recover delete tag
      tags:
      - Tag
  /answer/api/v1/tag/synonym:
    put:
      consumes:
      - application/json
      description: update tag
      parameters:
      - description: tag
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateTagSynonymReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update tag
      tags:
      - Tag
  /answer/api/v1/tag/synonyms:
    get:
      description: get tag synonyms
      parameters:
      - description: tag id
        in: query
        name: tag_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetTagSynonymsResp'
              type: object
      summary: get tag synonyms
      tags:
      - Tag
  /answer/api/v1/tags:
    get:
      description: get tags list by slug name
      parameters:
      - collectionFormat: csv
        description: string collection
        in: query
        items:
          type: string
        name: tags
        type: array
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetTagBasicResp'
                  type: array
              type: object
      summary: get tags list
      tags:
      - Tag
  /answer/api/v1/tags/following:
    get:
      description: get following tag list
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetFollowingTagsResp'
                  type: array
              type: object
      security:
      - ApiKeyAuth: []
      summary: get following tag list
      tags:
      - Tag
  /answer/api/v1/tags/page:
    get:
      description: get tag page
      parameters:
      - description: page size
        in: query
        name: page
        type: integer
      - description: page size
        in: query
        name: page_size
        type: integer
      - description: slug_name
        in: query
        name: slug_name
        type: string
      - description: query condition
        enum:
        - popular
        - name
        - newest
        in: query
        name: query_cond
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  allOf:
                  - $ref: '#/definitions/pager.PageModel'
                  - properties:
                      list:
                        items:
                          $ref: '#/definitions/schema.GetTagPageResp'
                        type: array
                    type: object
              type: object
      summary: get tag page
      tags:
      - Tag
  /answer/api/v1/user/action/record:
    get:
      description: ActionRecord
      parameters:
      - description: action
        enum:
        - login
        - e_mail
        - find_pass
        in: query
        name: action
        required: true
        type: string
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.ActionRecordResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: ActionRecord
      tags:
      - User
  /answer/api/v1/user/email:
    put:
      consumes:
      - application/json
      description: user change email verification
      parameters:
      - description: UserChangeEmailVerifyReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UserChangeEmailVerifyReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: user change email verification
      tags:
      - User
  /answer/api/v1/user/email/change/code:
    post:
      consumes:
      - application/json
      description: send email to the user email then change their email
      parameters:
      - description: UserChangeEmailSendCodeReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UserChangeEmailSendCodeReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: send email to the user email then change their email
      tags:
      - User
  /answer/api/v1/user/email/verification:
    post:
      consumes:
      - application/json
      description: UserVerifyEmail
      parameters:
      - default: ""
        description: code
        in: query
        name: code
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.UserLoginResp'
              type: object
      summary: UserVerifyEmail
      tags:
      - User
  /answer/api/v1/user/email/verification/send:
    post:
      consumes:
      - application/json
      description: UserVerifyEmailSend
      parameters:
      - default: ""
        description: captcha_id
        in: query
        name: captcha_id
        type: string
      - default: ""
        description: captcha_code
        in: query
        name: captcha_code
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            type: string
      security:
      - ApiKeyAuth: []
      summary: UserVerifyEmailSend
      tags:
      - User
  /answer/api/v1/user/info:
    get:
      consumes:
      - application/json
      description: get user info, if user no login response http code is 200, but
        user info is null
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetCurrentLoginUserInfoResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: GetUserInfoByUserID
      tags:
      - User
    put:
      consumes:
      - application/json
      description: UserUpdateInfo update user info
      parameters:
      - description: access-token
        in: header
        name: Authorization
        required: true
        type: string
      - description: UpdateInfoRequest
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateInfoRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: UserUpdateInfo update user info
      tags:
      - User
  /answer/api/v1/user/info/search:
    get:
      consumes:
      - application/json
      description: SearchUserListByName
      parameters:
      - description: username
        in: query
        name: username
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetOtherUserInfoResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: SearchUserListByName
      tags:
      - User
  /answer/api/v1/user/interface:
    put:
      consumes:
      - application/json
      description: UserUpdateInterface update user interface config
      parameters:
      - description: access-token
        in: header
        name: Authorization
        required: true
        type: string
      - description: UpdateInfoRequest
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateUserInterfaceRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: UserUpdateInterface update user interface config
      tags:
      - User
  /answer/api/v1/user/login/email:
    post:
      consumes:
      - application/json
      description: UserEmailLogin
      parameters:
      - description: UserEmailLogin
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UserEmailLoginReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.UserLoginResp'
              type: object
      summary: UserEmailLogin
      tags:
      - User
  /answer/api/v1/user/logout:
    get:
      consumes:
      - application/json
      description: user logout
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: user logout
      tags:
      - User
  /answer/api/v1/user/notification/config:
    post:
      consumes:
      - application/json
      description: get user's notification config
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetUserNotificationConfigResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get user's notification config
      tags:
      - User
    put:
      consumes:
      - application/json
      description: update user's notification config
      parameters:
      - description: UpdateUserNotificationConfigReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateUserNotificationConfigReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update user's notification config
      tags:
      - User
  /answer/api/v1/user/notification/unsubscribe:
    put:
      consumes:
      - application/json
      description: unsubscribe notification
      parameters:
      - description: UserUnsubscribeNotificationReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UserUnsubscribeNotificationReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      summary: unsubscribe notification
      tags:
      - User
  /answer/api/v1/user/password:
    put:
      consumes:
      - application/json
      description: UserModifyPassWord
      parameters:
      - description: UserModifyPasswordReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UserModifyPasswordReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: UserModifyPassWord
      tags:
      - User
  /answer/api/v1/user/password/replacement:
    post:
      consumes:
      - application/json
      description: UseRePassWord
      parameters:
      - description: UserRePassWordRequest
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UserRePassWordRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            type: string
      summary: UseRePassWord
      tags:
      - User
  /answer/api/v1/user/password/reset:
    post:
      consumes:
      - application/json
      description: RetrievePassWord
      parameters:
      - description: UserRetrievePassWordRequest
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UserRetrievePassWordRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            type: string
      summary: RetrievePassWord
      tags:
      - User
  /answer/api/v1/user/plugin/config:
    get:
      description: get user plugin config
      parameters:
      - description: plugin_slug_name
        in: query
        name: plugin_slug_name
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetPluginConfigResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: get user plugin config
      tags:
      - UserPlugin
    put:
      consumes:
      - application/json
      description: update user plugin config
      parameters:
      - description: UpdatePluginConfigReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UpdateUserPluginConfigReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: update user plugin config
      tags:
      - UserPlugin
  /answer/api/v1/user/plugin/configs:
    get:
      consumes:
      - application/json
      description: get plugin list that used for user.
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/schema.GetUserPluginListResp'
                  type: array
              type: object
      security:
      - ApiKeyAuth: []
      summary: get plugin list that used for user.
      tags:
      - UserPlugin
  /answer/api/v1/user/ranking:
    get:
      consumes:
      - application/json
      description: get user ranking
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.UserRankingResp'
              type: object
      summary: get user ranking
      tags:
      - User
  /answer/api/v1/user/register/email:
    post:
      consumes:
      - application/json
      description: UserRegisterByEmail
      parameters:
      - description: UserRegisterReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.UserRegisterReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.UserLoginResp'
              type: object
      summary: UserRegisterByEmail
      tags:
      - User
  /answer/api/v1/user/staff:
    get:
      consumes:
      - application/json
      description: get user staff
      parameters:
      - description: username
        in: query
        name: username
        required: true
        type: string
      - description: page_size
        in: query
        name: page_size
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.GetUserStaffResp'
              type: object
      summary: get user staff
      tags:
      - User
  /answer/api/v1/vote/down:
    post:
      consumes:
      - application/json
      description: add vote
      parameters:
      - description: vote
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.VoteReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.VoteResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: vote down
      tags:
      - Activity
  /answer/api/v1/vote/up:
    post:
      consumes:
      - application/json
      description: add vote
      parameters:
      - description: vote
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/schema.VoteReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/schema.VoteResp'
              type: object
      security:
      - ApiKeyAuth: []
      summary: vote up
      tags:
      - Activity
  /custom.css:
    get:
      description: get site custom CSS
      produces:
      - text/css
      responses:
        "200":
          description: OK
          schema:
            type: string
      summary: get site custom CSS
      tags:
      - site
  /installation/base-info:
    post:
      consumes:
      - application/json
      description: init base info
      parameters:
      - description: InitBaseInfoReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/install.InitBaseInfoReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      summary: init base info
      tags:
      - installation
  /installation/config-file/check:
    post:
      consumes:
      - application/json
      description: check config file if exist when installation
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/install.CheckConfigFileResp'
              type: object
      summary: check config file if exist when installation
      tags:
      - installation
  /installation/db/check:
    post:
      consumes:
      - application/json
      description: check database if exist when installation
      parameters:
      - description: CheckDatabaseReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/install.CheckDatabaseReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  $ref: '#/definitions/install.CheckConfigFileResp'
              type: object
      summary: check database if exist when installation
      tags:
      - installation
  /installation/init:
    post:
      consumes:
      - application/json
      description: init environment
      parameters:
      - description: CheckDatabaseReq
        in: body
        name: data
        required: true
        schema:
          $ref: '#/definitions/install.CheckDatabaseReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      summary: init environment
      tags:
      - installation
  /installation/language/config:
    get:
      description: get installation language config mapping
      parameters:
      - description: installation language
        in: query
        name: lang
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      summary: get installation language config mapping
      tags:
      - Lang
  /installation/language/options:
    get:
      description: get installation language options
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/handler.RespBody'
            - properties:
                data:
                  items:
                    $ref: '#/definitions/translator.LangOption'
                  type: array
              type: object
      summary: get installation language options
      tags:
      - Lang
  /personal/question/page:
    get:
      consumes:
      - application/json
      description: list personal questions
      parameters:
      - default: string
        description: username
        in: query
        name: username
        required: true
        type: string
      - description: order
        enum:
        - newest
        - score
        in: query
        name: order
        required: true
        type: string
      - default: "0"
        description: page
        in: query
        name: page
        required: true
        type: string
      - default: "20"
        description: page_size
        in: query
        name: page_size
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handler.RespBody'
      security:
      - ApiKeyAuth: []
      summary: list personal questions
      tags:
      - Personal
  /robots.txt:
    get:
      description: get site robots information
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            type: string
      summary: get site robots information
      tags:
      - site
securityDefinitions:
  ApiKeyAuth:
    in: header
    name: Authorization
    type: apiKey
swagger: "2.0"
