basePath: /
definitions:
  activity.CardTypeConfig:
    properties:
      code:
        type: string
      image_url:
        type: string
      name:
        type: string
      quantity:
        type: integer
    type: object
  activity.MatchingCard:
    properties:
      id:
        type: string
      type:
        type: string
    type: object
  activity.MatchingGame:
    properties:
      activity_id:
        type: integer
      board:
        items:
          $ref: '#/definitions/activity.MatchingCard'
        type: array
      card_configs:
        items:
          $ref: '#/definitions/activity.CardTypeConfig'
        type: array
      card_id_counter:
        type: integer
      created_at:
        description: 游戏创建时间，用于自动开奖超时判断
        type: string
      deck:
        items:
          $ref: '#/definitions/activity.MatchingCard'
        type: array
      issue_id:
        type: integer
      last_activity:
        type: string
      max_possible_pairs:
        type: integer
      nonce:
        type: integer
      order_id:
        type: integer
      position:
        description: 用户选择的类型，用于服务端验证
        type: string
      server_seed:
        items:
          type: integer
        type: array
      server_seed_hash:
        type: string
      total_pairs:
        type: integer
      user_id:
        type: integer
    type: object
  admin.GrantRewardRequest:
    properties:
      activity_id:
        description: 活动ID（可选）
        type: integer
      address_id:
        description: 收货地址ID（可选，实物商品需要）
        type: integer
      points_amount:
        description: 消耗积分
        type: integer
      product_id:
        description: 商品ID
        type: integer
      quantity:
        description: 发放数量
        minimum: 1
        type: integer
      remark:
        description: 备注
        type: string
      reward_id:
        description: 奖励配置ID（可选）
        type: integer
    required:
    - product_id
    type: object
  admin.GrantRewardResponse:
    properties:
      inventory_ids:
        items:
          type: integer
        type: array
      message:
        type: string
      order_id:
        type: integer
      success:
        type: boolean
    type: object
  admin.ShippingOrderGroup:
    properties:
      address_id:
        description: 地址ID
        type: integer
      address_info:
        description: 地址信息
        type: string
      batch_no:
        description: 批次号
        type: string
      count:
        description: 商品数量
        type: integer
      created_at:
        type: string
      express_code:
        description: 快递公司编码
        type: string
      express_no:
        description: 运单号
        type: string
      group_key:
        description: 分组键（用于批量操作）
        type: string
      inventory_ids:
        description: 资产ID列表
        items:
          type: integer
        type: array
      product_ids:
        description: 商品ID列表
        items:
          type: integer
        type: array
      products:
        description: 商品详情列表
        items:
          properties:
            id:
              type: integer
            image:
              type: string
            name:
              type: string
            price:
              type: integer
          type: object
        type: array
      received_at:
        type: string
      record_ids:
        description: 发货记录ID列表
        items:
          type: integer
        type: array
      shipped_at:
        type: string
      status:
        description: 状态（取最大值）
        type: integer
      total_price:
        description: 总价格
        type: integer
      user_id:
        description: 用户ID
        type: integer
      user_nickname:
        description: 用户昵称
        type: string
    type: object
  admin.UserProfileResponse:
    properties:
      avatar:
        type: string
      channel_id:
        type: integer
      created_at:
        type: string
      current_assets:
        description: 当前资产快照
        properties:
          coupon_count:
            description: 持有优惠券数
            type: integer
          coupon_value:
            description: 持有优惠券价值
            type: integer
          inventory_count:
            description: 持有商品数
            type: integer
          inventory_value:
            description: 持有商品价值
            type: integer
          item_card_count:
            description: 持有道具卡数
            type: integer
          item_card_value:
            description: 持有道具卡价值
            type: integer
          points_balance:
            description: 积分余额
            type: integer
          profit_loss_ratio:
            description: 累计盈亏比
            type: number
          total_asset_value:
            description: 总资产估值
            type: integer
        type: object
      douyin_id:
        type: string
      id:
        description: 基本信息
        type: integer
      invite_code:
        type: string
      invite_count:
        description: 邀请统计
        type: integer
      inviter_id:
        type: integer
      lifetime_stats:
        description: 生命周期财务指标
        properties:
          net_cash_cost:
            description: 净现金支出
            type: integer
          order_count:
            description: 订单数
            type: integer
          total_paid:
            description: 累计支付
            type: integer
          total_refunded:
            description: 累计退款
            type: integer
        type: object
      mobile:
        type: string
      nickname:
        type: string
    type: object
  admin.activityDetailResponse:
    properties:
      activity_category_id:
        type: integer
      allow_coupons:
        type: boolean
      allow_item_cards:
        type: boolean
      banner:
        type: string
      created_at:
        type: string
      draw_mode:
        type: string
      end_time:
        type: string
      gameplay_intro:
        type: string
      id:
        type: integer
      image:
        type: string
      interval_minutes:
        type: integer
      is_boss:
        type: integer
      last_settled_at:
        type: string
      min_participants:
        type: integer
      name:
        type: string
      play_type:
        type: string
      price_draw:
        type: integer
      refund_coupon_id:
        type: integer
      scheduled_time:
        type: string
      start_time:
        type: string
      status:
        type: integer
      updated_at:
        type: string
    type: object
  admin.activityItem:
    properties:
      activity_category_id:
        type: integer
      banner:
        type: string
      category_name:
        type: string
      id:
        type: integer
      image:
        type: string
      is_boss:
        type: integer
      name:
        type: string
      price_draw:
        type: integer
      status:
        type: integer
    type: object
  admin.activitysvcIssueData:
    properties:
      id:
        type: integer
      issue_number:
        type: string
      prize_count:
        type: integer
      sort:
        type: integer
      status:
        type: integer
    type: object
  admin.addCouponRequest:
    properties:
      coupon_id:
        type: integer
    required:
    - coupon_id
    type: object
  admin.addCouponResponse:
    properties:
      success:
        type: boolean
    type: object
  admin.addPointsRequest:
    properties:
      kind:
        type: string
      points:
        description: 正数=增加，负数=扣减
        type: integer
      remark:
        type: string
      valid_days:
        type: integer
    type: object
  admin.addPointsResponse:
    properties:
      success:
        type: boolean
    type: object
  admin.adminUserCouponItem:
    properties:
      balance_amount:
        type: integer
      coupon_id:
        type: integer
      discount_type:
        type: integer
      discount_value:
        type: integer
      id:
        type: integer
      min_spend:
        type: integer
      name:
        type: string
      scope_type:
        type: integer
      status:
        type: integer
      used_at:
        type: string
      used_order_id:
        type: integer
      valid_end:
        type: string
      valid_start:
        type: string
    type: object
  admin.adminUserItem:
    properties:
      avatar:
        type: string
      channel_code:
        type: string
      channel_name:
        type: string
      coupons_count:
        type: integer
      created_at:
        type: string
      douyin_id:
        type: string
      id:
        type: integer
      invite_code:
        type: string
      inviter_id:
        type: integer
      item_cards_count:
        type: integer
      nickname:
        type: string
      points_balance:
        type: integer
      seven_day_consume:
        type: integer
      today_consume:
        type: integer
    type: object
  admin.assignItemCardRequest:
    properties:
      card_id:
        type: integer
      quantity:
        type: integer
    required:
    - card_id
    type: object
  admin.bannerItem:
    properties:
      id:
        type: integer
      image_url:
        type: string
      link_url:
        type: string
      sort:
        type: integer
      status:
        type: integer
      title:
        type: string
    type: object
  admin.batchModifyRewardItem:
    properties:
      reward_id:
        type: integer
      weight:
        minimum: 0
        type: number
    required:
    - reward_id
    type: object
  admin.batchModifyRewardsRequest:
    properties:
      rewards:
        items:
          $ref: '#/definitions/admin.batchModifyRewardItem'
        type: array
    required:
    - rewards
    type: object
  admin.batchUpdateProductsRequest:
    properties:
      ids:
        items:
          type: integer
        type: array
      status:
        type: integer
      stock:
        type: integer
    required:
    - ids
    type: object
  admin.batchUpdateProductsResponse:
    properties:
      message:
        type: string
      updated_count:
        type: integer
    type: object
  admin.categoryItem:
    properties:
      id:
        type: integer
      name:
        type: string
    type: object
  admin.checkActivityGamePassesResponse:
    properties:
      activity_id:
        type: integer
      can_delete:
        type: boolean
      message:
        type: string
      total_remaining:
        type: integer
      user_count:
        type: integer
    type: object
  admin.copyActivityResponse:
    properties:
      new_activity_id:
        type: integer
      status:
        type: string
    type: object
  admin.createActivityRequest:
    properties:
      activity_category_id:
        type: integer
      allow_coupons:
        type: integer
      allow_item_cards:
        type: integer
      banner:
        type: string
      draw_mode:
        type: string
      end_time:
        type: string
      gameplay_intro:
        type: string
      image:
        type: string
      interval_minutes:
        type: integer
      is_boss:
        type: integer
      min_participants:
        type: integer
      name:
        type: string
      play_type:
        type: string
      price_draw:
        type: integer
      refund_coupon_amount:
        type: number
      refund_coupon_id:
        type: integer
      refund_coupon_type:
        type: string
      scheduled_delay_minutes:
        type: integer
      scheduled_time:
        type: string
      start_time:
        type: string
      status:
        type: integer
    required:
    - activity_category_id
    - name
    type: object
  admin.createBannerRequest:
    properties:
      image_url:
        type: string
      link_url:
        type: string
      sort:
        type: integer
      status:
        type: integer
      title:
        type: string
    required:
    - image_url
    - title
    type: object
  admin.createBannerResponse:
    properties:
      id:
        type: integer
      message:
        type: string
    type: object
  admin.createGamePassPackageRequest:
    properties:
      activity_id:
        type: integer
      name:
        type: string
      original_price:
        type: integer
      pass_count:
        minimum: 1
        type: integer
      price:
        minimum: 0
        type: integer
      sort_order:
        type: integer
      status:
        description: 1=上架 2=下架
        type: integer
      valid_days:
        type: integer
    required:
    - name
    - pass_count
    - price
    type: object
  admin.createGamePassPackageResponse:
    properties:
      id:
        type: integer
      message:
        type: string
    type: object
  admin.createIssueRequest:
    properties:
      issue_number:
        type: string
      sort:
        type: integer
      status:
        type: integer
    required:
    - issue_number
    type: object
  admin.createItemCardRequest:
    properties:
      activity_category_id:
        type: integer
      activity_id:
        type: integer
      boost_rate_x1000:
        type: integer
      card_type:
        type: integer
      effect_type:
        type: integer
      issue_id:
        type: integer
      max_effect_value_x1000:
        type: integer
      name:
        type: string
      price:
        type: integer
      remark:
        type: string
      reward_multiplier_x1000:
        type: integer
      scope_type:
        type: integer
      stacking_strategy:
        type: integer
      status:
        type: integer
      valid_end_unix:
        type: integer
      valid_start_unix:
        type: integer
    required:
    - card_type
    - effect_type
    - name
    - price
    - scope_type
    type: object
  admin.createItemCardResponse:
    properties:
      id:
        type: integer
      message:
        type: string
    type: object
  admin.createProductCategoryRequest:
    properties:
      name:
        type: string
      parent_id:
        type: integer
      status:
        type: integer
    required:
    - name
    type: object
  admin.createProductCategoryResponse:
    properties:
      id:
        type: integer
      message:
        type: string
    type: object
  admin.createProductRequest:
    properties:
      category_id:
        type: integer
      description:
        type: string
      images_json:
        type: string
      name:
        type: string
      price:
        type: integer
      status:
        type: integer
      stock:
        type: integer
    required:
    - category_id
    - name
    - price
    - stock
    type: object
  admin.createProductResponse:
    properties:
      id:
        type: integer
      message:
        type: string
    type: object
  admin.createRewardsRequest:
    properties:
      rewards:
        items:
          $ref: '#/definitions/admin.rewardItem'
        type: array
    required:
    - rewards
    type: object
  admin.createUserRequest:
    properties:
      avatar:
        type: string
      mobile:
        type: string
      nickname:
        type: string
      password:
        type: string
      username:
        type: string
    required:
    - password
    - username
    type: object
  admin.createUserResponse:
    properties:
      message:
        type: string
      success:
        type: boolean
    type: object
  admin.gamePassItem:
    properties:
      activity_id:
        type: integer
      activity_name:
        type: string
      created_at:
        type: string
      expired_at:
        type: string
      id:
        type: integer
      remaining:
        type: integer
      remark:
        type: string
      source:
        type: string
      total_granted:
        type: integer
      total_used:
        type: integer
      user_id:
        type: integer
      user_name:
        type: string
    type: object
  admin.gamePassPackageItem:
    properties:
      activity_id:
        type: integer
      activity_name:
        type: string
      created_at:
        type: string
      id:
        type: integer
      name:
        type: string
      original_price:
        type: integer
      pass_count:
        type: integer
      price:
        type: integer
      sort_order:
        type: integer
      status:
        type: integer
      valid_days:
        type: integer
    type: object
  admin.getOrderSnapshotsResponse:
    properties:
      after_snapshot:
        $ref: '#/definitions/snapshot.UserStateSnapshot'
      before_snapshot:
        $ref: '#/definitions/snapshot.UserStateSnapshot'
      diff:
        $ref: '#/definitions/snapshot.SnapshotDiff'
      has_snapshots:
        type: boolean
      order:
        properties:
          actual_amount:
            type: integer
          id:
            type: integer
          order_no:
            type: string
          paid_at:
            type: string
          status:
            type: integer
          user_id:
            type: integer
        type: object
    type: object
  admin.getUserGamePassesResponse:
    properties:
      activity_passes:
        items:
          $ref: '#/definitions/admin.gamePassItem'
        type: array
      global_remaining:
        type: integer
      total_remaining:
        type: integer
      user_id:
        type: integer
    type: object
  admin.grantGamePassRequest:
    properties:
      activity_id:
        description: 可选，NULL表示全局通用
        type: integer
      count:
        minimum: 1
        type: integer
      remark:
        type: string
      user_id:
        type: integer
      valid_days:
        description: 可选，NULL表示永久有效
        type: integer
    required:
    - count
    - user_id
    type: object
  admin.grantGamePassResponse:
    properties:
      id:
        type: integer
      message:
        type: string
    type: object
  admin.issueUserTokenResponse:
    properties:
      expires_in:
        type: integer
      token:
        type: string
    type: object
  admin.itemCardListItem:
    properties:
      activity_category_id:
        type: integer
      activity_id:
        type: integer
      boost_rate_x1000:
        type: integer
      card_type:
        type: integer
      created_at:
        type: string
      effect_type:
        type: integer
      id:
        type: integer
      issue_id:
        type: integer
      max_effect_value_x1000:
        type: integer
      name:
        type: string
      price:
        type: integer
      remark:
        type: string
      reward_multiplier_x1000:
        type: integer
      scope_type:
        type: integer
      stacking_strategy:
        type: integer
      status:
        type: integer
      updated_at:
        type: string
      valid_end:
        type: string
      valid_start:
        type: string
    type: object
  admin.listActivitiesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.activityItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listBannersResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.bannerItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listCategoriesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.categoryItem'
        type: array
    type: object
  admin.listCouponsResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.adminUserCouponItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listGamePassPackagesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.gamePassPackageItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listGamePassesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.gamePassItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listInventoryResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/user.InventoryWithProduct'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listInvitesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.adminUserItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listIssuesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.activitysvcIssueData'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listItemCardsResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.itemCardListItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listMatchingCardTypesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.matchingCardTypeResponse'
        type: array
      total:
        type: integer
    type: object
  admin.listOrdersResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/user.OrderWithItems'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listPointsResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/model.UserPointsLedger'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listProductCategoriesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.productCategoryListItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listProductsResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.productItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listRewardsResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.rewardItem'
        type: array
    type: object
  admin.listShippingOrdersResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.ShippingOrderGroup'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listUserItemCardsResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/user.ItemCardWithTemplate'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.listUsersResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/admin.adminUserItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  admin.loginRequest:
    properties:
      password:
        description: 密码 (MD5加密后的密码)
        type: string
      username:
        description: 用户名
        type: string
    required:
    - password
    - username
    type: object
  admin.loginResponse:
    properties:
      is_super:
        description: 是否是超级管理员(1:是 0:否)
        type: integer
      token:
        description: 登录成功后颁发的 Token
        type: string
    type: object
  admin.matchingCardTypeRequest:
    properties:
      code:
        type: string
      image_url:
        type: string
      name:
        type: string
      quantity:
        type: integer
      sort:
        type: integer
      status:
        type: integer
    required:
    - code
    - name
    type: object
  admin.matchingCardTypeResponse:
    properties:
      code:
        type: string
      created_at:
        type: string
      id:
        type: integer
      image_url:
        type: string
      name:
        type: string
      quantity:
        type: integer
      sort:
        type: integer
      status:
        type: integer
    type: object
  admin.modifyActivityRequest:
    properties:
      activity_category_id:
        type: integer
      allow_coupons:
        type: integer
      allow_item_cards:
        type: integer
      banner:
        type: string
      draw_mode:
        type: string
      end_time:
        type: string
      force:
        type: boolean
      gameplay_intro:
        type: string
      image:
        type: string
      interval_minutes:
        type: integer
      is_boss:
        type: integer
      min_participants:
        type: integer
      name:
        type: string
      play_type:
        type: string
      price_draw:
        type: integer
      refund_coupon_amount:
        type: number
      refund_coupon_id:
        type: integer
      refund_coupon_type:
        type: string
      scheduled_delay_minutes:
        type: integer
      scheduled_time:
        type: string
      start_time:
        type: string
      status:
        type: integer
    type: object
  admin.modifyBannerRequest:
    properties:
      image_url:
        type: string
      link_url:
        type: string
      sort:
        type: integer
      status:
        type: integer
      title:
        type: string
    type: object
  admin.modifyGamePassPackageRequest:
    properties:
      activity_id:
        type: integer
      name:
        type: string
      original_price:
        type: integer
      pass_count:
        type: integer
      price:
        type: integer
      sort_order:
        type: integer
      status:
        type: integer
      valid_days:
        type: integer
    type: object
  admin.modifyIssueRequest:
    properties:
      issue_number:
        type: string
      sort:
        type: integer
      status:
        type: integer
    type: object
  admin.modifyItemCardRequest:
    properties:
      activity_category_id:
        type: integer
      activity_id:
        type: integer
      boost_rate_x1000:
        type: integer
      card_type:
        type: integer
      effect_type:
        type: integer
      issue_id:
        type: integer
      max_effect_value_x1000:
        type: integer
      name:
        type: string
      price:
        type: integer
      remark:
        type: string
      reward_multiplier_x1000:
        type: integer
      scope_type:
        type: integer
      stacking_strategy:
        type: integer
      status:
        type: integer
      valid_end_unix:
        type: integer
      valid_start_unix:
        type: integer
    type: object
  admin.modifyProductCategoryRequest:
    properties:
      name:
        type: string
      parent_id:
        type: integer
      status:
        type: integer
    type: object
  admin.modifyProductRequest:
    properties:
      category_id:
        type: integer
      description:
        type: string
      images_json:
        type: string
      name:
        type: string
      price:
        type: integer
      status:
        type: integer
      stock:
        type: integer
    type: object
  admin.modifyRewardRequest:
    properties:
      is_boss:
        type: integer
      level:
        type: integer
      min_score:
        type: integer
      original_qty:
        type: integer
      product_id:
        type: integer
      quantity:
        type: integer
      sort:
        type: integer
      weight:
        type: number
    type: object
  admin.pcSimpleMessage:
    properties:
      message:
        type: string
    type: object
  admin.pointsBalanceResponse:
    properties:
      balance:
        type: integer
    type: object
  admin.productCategoryListItem:
    properties:
      id:
        type: integer
      name:
        type: string
      parent_id:
        type: integer
      status:
        type: integer
    type: object
  admin.productItem:
    properties:
      category_id:
        type: integer
      description:
        type: string
      id:
        type: integer
      images_json:
        type: string
      name:
        type: string
      price:
        type: integer
      sales:
        type: integer
      status:
        type: integer
      stock:
        type: integer
    type: object
  admin.refreshResponse:
    properties:
      expires_in:
        type: integer
      token:
        type: string
    type: object
  admin.rewardItem:
    properties:
      id:
        type: integer
      is_boss:
        type: integer
      level:
        type: integer
      min_score:
        type: integer
      original_qty:
        type: integer
      product_id:
        type: integer
      product_image_url:
        type: string
      product_name:
        type: string
      product_price:
        type: number
      quantity:
        type: integer
      sort:
        type: integer
      weight:
        type: number
    required:
    - level
    - original_qty
    - quantity
    - weight
    type: object
  admin.roleItem:
    properties:
      createTime:
        type: string
      description:
        type: string
      enabled:
        type: boolean
      roleCode:
        type: string
      roleId:
        type: integer
      roleName:
        type: string
    type: object
  admin.roleListResponse:
    properties:
      current:
        type: integer
      records:
        items:
          $ref: '#/definitions/admin.roleItem'
        type: array
      size:
        type: integer
      total:
        type: integer
    type: object
  admin.rollbackOrderRequest:
    properties:
      confirm:
        type: boolean
      reason:
        type: string
    type: object
  admin.rollbackOrderResponse:
    properties:
      coupons_restored:
        type: integer
      error_msg:
        type: string
      inventory_revoked:
        type: integer
      item_cards_restored:
        type: integer
      points_restored:
        type: integer
      refund_amount:
        type: integer
      rollback_log_id:
        type: integer
      success:
        type: boolean
    type: object
  admin.simpleMessage:
    properties:
      message:
        type: string
    type: object
  admin.simpleMessageResponse:
    properties:
      message:
        type: string
    type: object
  admin.updateShippingRequest:
    properties:
      express_code:
        description: 快递公司编码
        type: string
      express_no:
        description: 运单号
        type: string
      record_ids:
        description: 发货记录ID列表
        items:
          type: integer
        type: array
      status:
        description: 状态
        type: integer
    type: object
  admin.updateShippingResponse:
    properties:
      success:
        type: boolean
      updated_count:
        type: integer
    type: object
  admin.userListItem:
    properties:
      avatar:
        type: string
      createBy:
        type: string
      createTime:
        type: string
      id:
        type: integer
      nickName:
        type: string
      status:
        type: string
      updateBy:
        type: string
      updateTime:
        type: string
      userEmail:
        type: string
      userGender:
        type: string
      userName:
        type: string
      userPhone:
        type: string
      userRoles:
        items:
          type: string
        type: array
    type: object
  admin.userListResponse:
    properties:
      current:
        type: integer
      records:
        items:
          $ref: '#/definitions/admin.userListItem'
        type: array
      size:
        type: integer
      total:
        type: integer
    type: object
  app.MatchingRewardInfo:
    properties:
      level:
        type: integer
      name:
        type: string
      product_image:
        description: 商品图片
        type: string
      product_name:
        description: 商品原始名称
        type: string
      reward_id:
        type: integer
    type: object
  app.activityDetailResponse:
    properties:
      activity_category_id:
        type: integer
      allow_coupons:
        type: boolean
      allow_item_cards:
        type: boolean
      banner:
        type: string
      created_at:
        type: string
      draw_mode:
        type: string
      end_time:
        type: string
      gameplay_intro:
        type: string
      id:
        type: integer
      image:
        type: string
      interval_minutes:
        type: integer
      is_boss:
        type: integer
      last_settled_at:
        type: string
      min_participants:
        type: integer
      name:
        type: string
      play_type:
        type: string
      price_draw:
        type: integer
      refund_coupon_id:
        type: integer
      scheduled_time:
        type: string
      start_time:
        type: string
      status:
        type: integer
      updated_at:
        type: string
    type: object
  app.activityItem:
    properties:
      activity_category_id:
        type: integer
      banner:
        type: string
      category_name:
        type: string
      id:
        type: integer
      image:
        type: string
      is_boss:
        type: integer
      name:
        type: string
      price_draw:
        type: integer
      status:
        type: integer
    type: object
  app.addAddressRequest:
    properties:
      address:
        type: string
      city:
        type: string
      district:
        type: string
      is_default:
        type: boolean
      mobile:
        type: string
      name:
        type: string
      province:
        type: string
    type: object
  app.addAddressResponse:
    properties:
      id:
        type: integer
    type: object
  app.addressShareCreateRequest:
    properties:
      expires_at:
        type: string
      expires_in_minutes:
        type: integer
      inventory_id:
        type: integer
    type: object
  app.addressShareCreateResponse:
    properties:
      expires_at:
        type: string
      share_token:
        type: string
      share_url:
        type: string
      short_link:
        type: string
    type: object
  app.addressShareRevokeRequest:
    properties:
      inventory_id:
        type: integer
    type: object
  app.addressShareSubmitRequest:
    properties:
      address:
        type: string
      city:
        type: string
      district:
        type: string
      mobile:
        type: string
      name:
        type: string
      province:
        type: string
      share_token:
        type: string
    type: object
  app.addressShareSubmitResponse:
    properties:
      address_id:
        type: integer
    type: object
  app.appBannerItem:
    properties:
      id:
        type: integer
      image_url:
        type: string
      link_url:
        type: string
      sort:
        type: integer
      title:
        type: string
    type: object
  app.appCategoryItem:
    properties:
      id:
        type: integer
      name:
        type: string
    type: object
  app.appNoticeItem:
    properties:
      content:
        type: string
    type: object
  app.bindDouyinPhoneRequest:
    properties:
      code:
        type: string
    type: object
  app.bindDouyinPhoneResponse:
    properties:
      mobile:
        type: string
      success:
        type: boolean
    type: object
  app.bindPhoneRequest:
    properties:
      code:
        type: string
    type: object
  app.bindPhoneResponse:
    properties:
      mobile:
        type: string
      success:
        type: boolean
    type: object
  app.cancelOrderRequest:
    properties:
      reason:
        type: string
    type: object
  app.cancelOrderResponse:
    properties:
      cancelled_at:
        type: string
      order_id:
        type: integer
      order_no:
        type: string
      status:
        type: integer
    type: object
  app.cancelShippingRequest:
    properties:
      batch_no:
        description: 批次号（与inventory_id二选一，取消整批）
        type: string
      inventory_id:
        description: 单个资产ID（与batch_no二选一）
        type: integer
    type: object
  app.cancelShippingResponse:
    properties:
      cancelled_count:
        description: 成功取消的数量
        type: integer
    type: object
  app.couponDetail:
    properties:
      amount:
        description: 原始面值
        type: integer
      id:
        type: integer
      name:
        type: string
      remaining:
        description: 剩余额度
        type: integer
      status:
        type: integer
      use_count:
        description: 使用次数
        type: integer
      used_amount:
        description: 累计已使用金额
        type: integer
      valid_end:
        type: string
      valid_start:
        type: string
    type: object
  app.couponItem:
    properties:
      amount:
        type: integer
      id:
        type: integer
      name:
        type: string
      remaining:
        type: integer
      rules:
        type: string
      status:
        type: integer
      used_at:
        description: 使用时间（已使用时返回）
        type: string
      valid_end:
        type: string
      valid_start:
        type: string
    type: object
  app.couponStatsResponse:
    properties:
      expired_count:
        description: 已过期优惠券数量
        type: integer
      total_remaining:
        description: 可用优惠券总余额（分）
        type: integer
      total_saved:
        description: 累计节省金额（分）
        type: integer
      unused_count:
        description: 可用优惠券数量
        type: integer
      used_count:
        description: 已使用优惠券数量
        type: integer
    type: object
  app.couponUsageItem:
    properties:
      activity_name:
        description: 活动名称
        type: string
      amount:
        description: 本次使用金额（正数）
        type: integer
      created_at:
        type: string
      id:
        type: integer
      order_no:
        description: 订单号
        type: string
    type: object
  app.douyinLoginRequest:
    properties:
      anonymous_code:
        type: string
      channel_code:
        type: string
      code:
        type: string
      invite_code:
        type: string
    type: object
  app.douyinLoginResponse:
    properties:
      avatar:
        type: string
      invite_code:
        type: string
      nickname:
        type: string
      token:
        type: string
      user_id:
        type: integer
    type: object
  app.drawLogGroup:
    properties:
      level:
        type: integer
      level_name:
        type: string
      list:
        items:
          $ref: '#/definitions/app.drawLogItem'
        type: array
    type: object
  app.drawLogItem:
    properties:
      avatar:
        type: string
      created_at:
        type: string
      current_level:
        type: integer
      id:
        type: integer
      is_winner:
        type: integer
      issue_id:
        type: integer
      level:
        type: integer
      order_id:
        type: integer
      reward_id:
        type: integer
      reward_image:
        type: string
      reward_name:
        type: string
      user_id:
        type: integer
      user_name:
        type: string
    type: object
  app.getAppProductDetailResponse:
    properties:
      album:
        items:
          type: string
        type: array
      description:
        type: string
      id:
        type: integer
      name:
        type: string
      points_required:
        type: integer
      price:
        type: integer
      recommendations:
        items:
          $ref: '#/definitions/app.listAppProductsItem'
        type: array
      sales:
        type: integer
      service:
        items:
          type: string
        type: array
      stock:
        type: integer
    type: object
  app.getGamePassesResponse:
    properties:
      global_remaining:
        description: 全局通用次数
        type: integer
      passes:
        items:
          $ref: '#/definitions/app.userGamePassItem'
        type: array
      total_remaining:
        type: integer
    type: object
  app.getPackagesResponse:
    properties:
      packages:
        items:
          $ref: '#/definitions/app.packageItem'
        type: array
    type: object
  app.inviteUserItem:
    properties:
      avatar:
        type: string
      id:
        type: integer
      invite_code:
        type: string
      nickname:
        type: string
    type: object
  app.issueItem:
    properties:
      id:
        type: integer
      issue_number:
        type: string
      remaining_prize_quantity:
        type: integer
      sort:
        type: integer
      status:
        type: integer
      total_prize_quantity:
        type: integer
    type: object
  app.joinLotteryRequest:
    properties:
      activity_id:
        type: integer
      channel:
        type: string
      count:
        type: integer
      coupon_id:
        type: integer
      issue_id:
        type: integer
      item_card_id:
        type: integer
      slot_index:
        items:
          type: integer
        type: array
      use_game_pass:
        type: boolean
      use_points:
        type: integer
    type: object
  app.joinLotteryResponse:
    properties:
      actual_amount:
        type: integer
      draw_mode:
        type: string
      join_id:
        type: string
      order_no:
        type: string
      queued:
        type: boolean
      reward_id:
        type: integer
      reward_name:
        type: string
      status:
        type: integer
    type: object
  app.jsapiPreorderRequest:
    properties:
      openid:
        type: string
      order_no:
        type: string
    type: object
  app.jsapiPreorderResponse:
    properties:
      nonceStr:
        type: string
      package:
        type: string
      paySign:
        type: string
      signType:
        type: string
      timeStamp:
        type: string
    type: object
  app.listActivitiesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/app.activityItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  app.listAddressesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/model.UserAddresses'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  app.listAppBannersResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/app.appBannerItem'
        type: array
    type: object
  app.listAppCategoriesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/app.appCategoryItem'
        type: array
    type: object
  app.listAppNoticesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/app.appNoticeItem'
        type: array
    type: object
  app.listAppProductsItem:
    properties:
      id:
        type: integer
      in_stock:
        type: boolean
      main_image:
        type: string
      name:
        type: string
      points_required:
        type: integer
      price:
        type: integer
      sales:
        type: integer
    type: object
  app.listAppProductsResponse:
    properties:
      currentPage:
        type: integer
      list:
        items:
          $ref: '#/definitions/app.listAppProductsItem'
        type: array
      pageSize:
        type: integer
      total:
        type: integer
    type: object
  app.listCouponUsageResponse:
    properties:
      coupon:
        $ref: '#/definitions/app.couponDetail'
      page:
        type: integer
      page_size:
        type: integer
      records:
        items:
          $ref: '#/definitions/app.couponUsageItem'
        type: array
      total:
        type: integer
    type: object
  app.listCouponsResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/app.couponItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  app.listDrawLogsByLevelResponse:
    properties:
      groups:
        items:
          $ref: '#/definitions/app.drawLogGroup'
        type: array
    type: object
  app.listDrawLogsResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/app.drawLogItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  app.listInventoryResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/user.AggregatedInventory'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  app.listInvitesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/app.inviteUserItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  app.listIssueChoicesResponse:
    properties:
      available:
        items:
          type: integer
        type: array
      claimed:
        items:
          type: integer
        type: array
      total_slots:
        type: integer
    type: object
  app.listIssuesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/app.issueItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  app.listOrdersResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/user.OrderWithItems'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  app.listPointsResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/model.UserPointsLedger'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  app.listRewardsResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/app.rewardItem'
        type: array
      play_type:
        description: 活动类型
        type: string
    type: object
  app.listShipmentsResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/user.ShipmentGroup'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  app.listStoreItem:
    properties:
      discount_type:
        type: integer
      discount_value:
        type: integer
      id:
        type: integer
      in_stock:
        type: boolean
      kind:
        type: string
      main_image:
        type: string
      min_spend:
        type: integer
      name:
        type: string
      points_required:
        type: integer
      price:
        type: integer
      status:
        type: integer
      supported:
        type: boolean
    type: object
  app.listStoreItemsResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/app.listStoreItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  app.listUserItemCardUsesResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/model.ActivityDrawEffects'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  app.listUserItemCardsResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/user.ItemCardWithTemplate'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  app.matchingGameCardsResponse:
    properties:
      all_cards:
        items:
          $ref: '#/definitions/activity.MatchingCard'
        type: array
      game_id:
        type: string
    type: object
  app.matchingGameCheckRequest:
    properties:
      game_id:
        type: string
      total_pairs:
        description: 客户端上报的消除总对数
        type: integer
    required:
    - game_id
    type: object
  app.matchingGameCheckResponse:
    properties:
      finished:
        type: boolean
      game_id:
        type: string
      reward:
        $ref: '#/definitions/app.MatchingRewardInfo'
      total_pairs:
        type: integer
    type: object
  app.matchingGamePreOrderRequest:
    properties:
      coupon_id:
        type: integer
      issue_id:
        type: integer
      item_card_id:
        type: integer
      position:
        type: string
      use_game_pass:
        description: 新增：是否使用次数卡
        type: boolean
    type: object
  app.matchingGamePreOrderResponse:
    properties:
      game_id:
        type: string
      order_no:
        type: string
      pay_status:
        description: 1=Pending, 2=Paid
        type: integer
      server_seed_hash:
        type: string
    type: object
  app.modifyUserRequest:
    properties:
      avatar:
        type: string
      nickname:
        type: string
    type: object
  app.modifyUserResponse:
    properties:
      user:
        $ref: '#/definitions/app.userItem'
    type: object
  app.okDeleteResponse:
    properties:
      ok:
        type: boolean
    type: object
  app.okResponse:
    properties:
      ok:
        type: boolean
    type: object
  app.orderResultItem:
    properties:
      draw_index:
        type: integer
      image:
        type: string
      level:
        type: integer
      reward_id:
        type: integer
      reward_name:
        type: string
    type: object
  app.orderResultResponse:
    properties:
      completed:
        type: integer
      count:
        type: integer
      draw_mode:
        type: string
      next_draw_time:
        type: string
      nextPollMs:
        type: integer
      receipt:
        additionalProperties: {}
        type: object
      results:
        items:
          $ref: '#/definitions/app.orderResultItem'
        type: array
      seed_hex:
        type: string
      status:
        type: string
    type: object
  app.packageItem:
    properties:
      activity_id:
        type: integer
      id:
        type: integer
      name:
        type: string
      original_price:
        type: integer
      pass_count:
        type: integer
      price:
        type: integer
      valid_days:
        type: integer
    type: object
  app.pointsBalanceResponse:
    properties:
      balance:
        type: integer
    type: object
  app.purchasePackageRequest:
    properties:
      count:
        description: 购买数量
        type: integer
      package_id:
        type: integer
    required:
    - package_id
    type: object
  app.purchasePackageResponse:
    properties:
      message:
        type: string
      order_no:
        type: string
    type: object
  app.redeemCouponRequest:
    properties:
      coupon_id:
        type: integer
    type: object
  app.redeemCouponResponse:
    properties:
      coupon_id:
        type: integer
      ledger_id:
        type: integer
      message:
        type: string
      success:
        type: boolean
    type: object
  app.redeemInventoryRequest:
    properties:
      inventory_ids:
        items:
          type: integer
        type: array
    type: object
  app.redeemInventoryResponse:
    properties:
      points:
        type: integer
    type: object
  app.redeemItemCardRequest:
    properties:
      card_id:
        type: integer
      quantity:
        type: integer
    type: object
  app.redeemItemCardResponse:
    properties:
      card_id:
        type: integer
      ledger_id:
        type: integer
      message:
        type: string
      success:
        type: boolean
    type: object
  app.redeemProductRequest:
    properties:
      product_id:
        type: integer
      quantity:
        type: integer
    type: object
  app.redeemProductResponse:
    properties:
      inventory_ids:
        items:
          type: integer
        type: array
      ledger_id:
        type: integer
      message:
        type: string
      order_id:
        type: integer
      success:
        type: boolean
    type: object
  app.requestShippingBatchRequest:
    properties:
      address_id:
        type: integer
      inventory_ids:
        items:
          type: integer
        type: array
    type: object
  app.requestShippingBatchResponse:
    properties:
      address_id:
        type: integer
      batch_no:
        type: string
      failed:
        items:
          additionalProperties: {}
          type: object
        type: array
      skipped:
        items:
          additionalProperties: {}
          type: object
        type: array
      success_ids:
        items:
          type: integer
        type: array
    type: object
  app.requestShippingRequest:
    properties:
      inventory_id:
        type: integer
    type: object
  app.requestShippingResponse:
    properties:
      address_id:
        type: integer
    type: object
  app.resultResponse:
    properties:
      receipt:
        additionalProperties: {}
        type: object
      result:
        additionalProperties: {}
        type: object
      results:
        items:
          additionalProperties: {}
          type: object
        type: array
    type: object
  app.rewardItem:
    properties:
      id:
        type: integer
      is_boss:
        type: integer
      level:
        type: integer
      min_score:
        type: integer
      name:
        type: string
      original_qty:
        type: integer
      prize_level:
        description: 兼容部分前端逻辑
        type: integer
      product_id:
        type: integer
      product_image:
        type: string
      quantity:
        type: integer
      sort:
        type: integer
      weight:
        type: integer
    type: object
  app.sendSmsCodeRequest:
    properties:
      mobile:
        type: string
    required:
    - mobile
    type: object
  app.sendSmsCodeResponse:
    properties:
      expire_seconds:
        type: integer
      success:
        type: boolean
    type: object
  app.smsLoginRequest:
    properties:
      code:
        type: string
      invite_code:
        type: string
      mobile:
        type: string
    required:
    - code
    - mobile
    type: object
  app.smsLoginResponse:
    properties:
      avatar:
        type: string
      invite_code:
        type: string
      is_new_user:
        type: boolean
      mobile:
        type: string
      nickname:
        type: string
      openid:
        type: string
      token:
        type: string
      user_id:
        type: integer
    type: object
  app.updateAddressRequest:
    properties:
      address:
        type: string
      city:
        type: string
      district:
        type: string
      is_default:
        type: boolean
      mobile:
        type: string
      name:
        type: string
      province:
        type: string
    type: object
  app.userGamePassItem:
    properties:
      activity_id:
        type: integer
      activity_name:
        type: string
      expired_at:
        type: string
      id:
        type: integer
      remaining:
        type: integer
      source:
        type: string
    type: object
  app.userItem:
    properties:
      avatar:
        type: string
      balance:
        description: Points
        type: integer
      id:
        type: integer
      invite_code:
        type: string
      inviter_id:
        type: integer
      mobile:
        type: string
      nickname:
        type: string
    type: object
  app.userStatsResponse:
    properties:
      coupon_count:
        type: integer
      item_card_count:
        type: integer
      points_balance:
        type: integer
    type: object
  app.weixinLoginRequest:
    properties:
      code:
        type: string
      douyin_id:
        type: string
      invite_code:
        type: string
    type: object
  app.weixinLoginResponse:
    properties:
      avatar:
        type: string
      invite_code:
        type: string
      nickname:
        type: string
      openid:
        type: string
      token:
        type: string
      user_id:
        type: integer
    type: object
  code.Failure:
    properties:
      code:
        description: 业务码
        type: integer
      message:
        description: 描述信息
        type: string
    type: object
  game.consumeTicketRequest:
    properties:
      game_code:
        type: string
      ticket:
        type: string
      user_id:
        type: string
    type: object
  game.consumeTicketResponse:
    properties:
      error:
        type: string
      success:
        type: boolean
    type: object
  game.enterGameRequest:
    properties:
      game_code:
        type: string
    required:
    - game_code
    type: object
  game.enterGameResponse:
    properties:
      client_url:
        type: string
      expires_at:
        type: string
      game_token:
        type: string
      nakama_key:
        type: string
      nakama_server:
        type: string
      remaining_times:
        type: integer
    type: object
  game.grantTicketRequest:
    properties:
      amount:
        minimum: 1
        type: integer
      game_code:
        type: string
      remark:
        type: string
    required:
    - amount
    - game_code
    type: object
  game.settleRequest:
    properties:
      match_id:
        type: string
      score:
        type: integer
      ticket:
        type: string
      user_id:
        type: string
      win:
        type: boolean
    type: object
  game.settleResponse:
    properties:
      reward:
        type: string
      success:
        type: boolean
    type: object
  game.validateTokenRequest:
    properties:
      game_token:
        type: string
    required:
    - game_token
    type: object
  game.validateTokenResponse:
    properties:
      avatar:
        type: string
      error:
        type: string
      game_type:
        type: string
      ticket:
        type: string
      user_id:
        type: integer
      username:
        type: string
      valid:
        type: boolean
    type: object
  game.verifyRequest:
    properties:
      ticket:
        type: string
      user_id:
        type: string
    type: object
  game.verifyResponse:
    properties:
      game_config:
        additionalProperties: {}
        type: object
      user_id:
        type: string
      valid:
        type: boolean
    type: object
  minesweeper.SettleGameRequest:
    properties:
      match_id:
        type: string
      metadata:
        type: string
      score:
        type: integer
      ticket:
        type: string
      user_id:
        type: string
      win:
        type: boolean
    type: object
  minesweeper.SettleGameResponse:
    properties:
      reward:
        type: string
      success:
        type: boolean
    type: object
  minesweeper.VerifyTicketRequest:
    properties:
      ticket:
        type: string
      user_id:
        type: string
    type: object
  minesweeper.VerifyTicketResponse:
    properties:
      remaining_times:
        type: integer
      user_id:
        type: string
      valid:
        type: boolean
    type: object
  model.ActivityDrawEffects:
    properties:
      activity_category_id:
        description: 范围快照-活动分类ID
        type: integer
      activity_id:
        description: 范围快照-活动ID
        type: integer
      applied:
        description: 是否生效：0否 1是
        type: integer
      card_type:
        description: 卡类型快照
        type: integer
      created_at:
        description: 创建时间
        type: string
      draw_log_id:
        description: 抽奖日志ID（activity_draw_logs.id）
        type: integer
      effect_type:
        description: 效果类型快照
        type: integer
      id:
        description: 主键ID
        type: integer
      issue_id:
        description: 范围快照-期ID
        type: integer
      probability_delta_x1000:
        description: 概率相对增益（千分比）
        type: integer
      remark:
        description: 备注
        type: string
      reward_multiplier_x1000:
        description: 奖励倍数（千分比）
        type: integer
      scope_type:
        description: 适用范围快照
        type: integer
      system_item_card_id:
        description: 卡模板ID（system_item_cards.id）
        type: integer
      user_id:
        description: 用户ID（users.id）
        type: integer
      user_item_card_id:
        description: 用户卡实例ID（user_item_cards.id）
        type: integer
    type: object
  model.OrderItems:
    properties:
      created_at:
        description: 创建时间
        type: string
      id:
        description: 主键ID
        type: integer
      order_id:
        description: 订单ID（orders.id）
        type: integer
      price:
        description: 成交单价（分）
        type: integer
      product_id:
        description: 商品ID（products.id）
        type: integer
      product_images:
        description: 商品图片快照（JSON）
        type: string
      quantity:
        description: 购买数量
        type: integer
      status:
        description: 行状态：1正常 2取消
        type: integer
      title:
        description: 商品标题快照
        type: string
      total_amount:
        description: 行应付总额（分）
        type: integer
    type: object
  model.ShippingRecords:
    properties:
      address_id:
        description: 收货地址ID（user_addresses.id）
        type: integer
      batch_no:
        description: 批次号（批量发货时用于聚合）
        type: string
      created_at:
        description: 创建时间
        type: string
      express_code:
        description: 快递公司编码
        type: string
      express_no:
        description: 运单号
        type: string
      id:
        description: 主键ID
        type: integer
      inventory_id:
        description: 资产ID（抽奖产物发货时使用）
        type: integer
      order_id:
        description: 关联订单ID（orders.id，抽奖产物可为空）
        type: integer
      order_item_id:
        description: 订单行ID（商城直发时使用）
        type: integer
      price:
        description: 行价格（分，可选）
        type: integer
      product_id:
        description: 商品ID（统计/冗余）
        type: integer
      quantity:
        description: 发货数量
        type: integer
      received_at:
        description: 签收时间
        type: string
      remark:
        description: 备注
        type: string
      shipped_at:
        description: 发货时间
        type: string
      status:
        description: 发货状态：1待发货 2已发货 3已签收 4异常
        type: integer
      updated_at:
        description: 更新时间
        type: string
      user_id:
        description: 收件用户ID（user_members.id）
        type: integer
    type: object
  model.UserAddresses:
    properties:
      address:
        description: 详细地址
        type: string
      city:
        description: 市
        type: string
      created_at:
        description: 创建时间
        type: string
      default_user_unique:
        description: 用于唯一约束的生成列：默认地址→user_id
        type: integer
      district:
        description: 区/县
        type: string
      id:
        description: 主键ID
        type: integer
      is_default:
        description: 是否默认地址：0否 1是
        type: integer
      mobile:
        description: 收件人手机号
        type: string
      name:
        description: 收件人姓名
        type: string
      province:
        description: 省
        type: string
      updated_at:
        description: 更新时间
        type: string
      user_id:
        description: 用户ID（user_members.id）
        type: integer
    type: object
  model.UserPointsLedger:
    properties:
      action:
        description: 变更动作：signin/order_deduct/refund_restore/manual
        type: string
      created_at:
        description: 创建时间
        type: string
      id:
        description: 主键ID
        type: integer
      points:
        description: 积分变动值（正增负减）
        type: integer
      ref_id:
        description: 关联ID（如订单号/记录ID）
        type: string
      ref_table:
        description: 关联表名（如orders/payment_refund）
        type: string
      remark:
        description: 备注
        type: string
      user_id:
        description: 用户ID（user_members.id）
        type: integer
    type: object
  pay.notifyAck:
    properties:
      code:
        type: string
      message:
        type: string
    type: object
  snapshot.CouponInfo:
    properties:
      balance_amount:
        type: integer
      coupon_id:
        type: integer
      coupon_name:
        type: string
      status:
        type: integer
      user_coupon_id:
        type: integer
      valid_end:
        type: string
    type: object
  snapshot.ItemCardInfo:
    properties:
      card_id:
        type: integer
      card_name:
        type: string
      status:
        type: integer
      user_item_card_id:
        type: integer
      valid_end:
        type: string
    type: object
  snapshot.PointsInfo:
    properties:
      balance:
        type: integer
      version:
        type: integer
    type: object
  snapshot.SnapshotDiff:
    properties:
      coupons_used:
        items:
          $ref: '#/definitions/snapshot.CouponInfo'
        type: array
      inventory_added:
        type: integer
      item_cards_used:
        items:
          $ref: '#/definitions/snapshot.ItemCardInfo'
        type: array
      points_changed:
        type: integer
    type: object
  snapshot.UserInfo:
    properties:
      id:
        type: integer
      mobile:
        type: string
      nickname:
        type: string
    type: object
  snapshot.UserStateSnapshot:
    properties:
      coupons:
        items:
          $ref: '#/definitions/snapshot.CouponInfo'
        type: array
      inventory_count:
        type: integer
      item_cards:
        items:
          $ref: '#/definitions/snapshot.ItemCardInfo'
        type: array
      points:
        $ref: '#/definitions/snapshot.PointsInfo'
      snapshot_time:
        type: string
      user:
        $ref: '#/definitions/snapshot.UserInfo'
    type: object
  taskcenter.claimTaskRequest:
    properties:
      tier_id:
        type: integer
    type: object
  taskcenter.createTaskRequest:
    properties:
      description:
        type: string
      end_time:
        type: string
      name:
        type: string
      start_time:
        type: string
      status:
        type: integer
      visibility:
        type: integer
    type: object
  taskcenter.listTasksResponse:
    properties:
      list:
        items:
          $ref: '#/definitions/taskcenter.taskItem'
        type: array
      page:
        type: integer
      page_size:
        type: integer
      total:
        type: integer
    type: object
  taskcenter.modifyTaskRequest:
    properties:
      description:
        type: string
      end_time:
        type: string
      name:
        type: string
      start_time:
        type: string
      status:
        type: integer
      visibility:
        type: integer
    type: object
  taskcenter.simulateInviteSuccessRequest:
    properties:
      invitee_id:
        type: integer
      inviter_id:
        type: integer
    type: object
  taskcenter.simulateOrderPaidRequest:
    properties:
      order_id:
        type: integer
      user_id:
        type: integer
    type: object
  taskcenter.taskItem:
    properties:
      description:
        type: string
      end_time:
        type: integer
      id:
        type: integer
      name:
        type: string
      rewards:
        items:
          $ref: '#/definitions/taskcenter.taskRewardItem'
        type: array
      start_time:
        type: integer
      status:
        type: integer
      tiers:
        items:
          $ref: '#/definitions/taskcenter.taskTierItem'
        type: array
    type: object
  taskcenter.taskProgressResponse:
    properties:
      claimed_tiers:
        items:
          type: integer
        type: array
      first_order:
        type: boolean
      invite_count:
        type: integer
      order_amount:
        type: integer
      order_count:
        type: integer
      task_id:
        type: integer
      user_id:
        type: integer
    type: object
  taskcenter.taskRewardItem:
    properties:
      id:
        type: integer
      quantity:
        type: integer
      reward_name:
        type: string
      reward_payload:
        additionalProperties: {}
        type: object
      reward_type:
        type: string
      tier_id:
        type: integer
    type: object
  taskcenter.taskTierItem:
    properties:
      id:
        type: integer
      metric:
        type: string
      operator:
        type: string
      priority:
        type: integer
      repeatable:
        type: integer
      threshold:
        type: integer
      window:
        type: string
    type: object
  taskcenter.upsertRewardsRequest:
    properties:
      rewards:
        items:
          properties:
            quantity:
              type: integer
            reward_payload:
              items:
                type: integer
              type: array
            reward_type:
              type: string
            tier_id:
              type: integer
          type: object
        type: array
    type: object
  taskcenter.upsertTiersRequest:
    properties:
      tiers:
        items:
          properties:
            activity_id:
              type: integer
            extra_params:
              items:
                type: integer
              type: array
            metric:
              type: string
            operator:
              type: string
            priority:
              type: integer
            repeatable:
              type: integer
            threshold:
              type: integer
            window:
              type: string
          type: object
        type: array
    type: object
  user.AggregatedInventory:
    properties:
      count:
        type: integer
      has_shipment:
        type: boolean
      inventory_ids:
        items:
          type: integer
        type: array
      product_id:
        type: integer
      product_images:
        type: string
      product_name:
        type: string
      product_price:
        type: integer
      shipping_status:
        type: integer
      status:
        description: 用于区分 1持有 3已处理
        type: integer
      updated_at:
        type: string
    type: object
  user.CouponSimpleInfo:
    properties:
      name:
        type: string
      type:
        description: 1:满减 2:折扣
        type: integer
      user_coupon_id:
        type: integer
      value:
        type: integer
    type: object
  user.DrawReceiptInfo:
    properties:
      algo_version:
        type: string
      client_id:
        type: integer
      client_seed:
        type: string
      draw_id:
        type: integer
      draw_index:
        type: integer
      draw_log_id:
        type: integer
      items_root:
        type: string
      items_snapshot:
        type: string
      nonce:
        type: integer
      rand_proof:
        type: string
      reward_id:
        type: integer
      round_id:
        type: integer
      selected_index:
        type: integer
      server_seed_hash:
        type: string
      server_sub_seed:
        type: string
      signature:
        type: string
      timestamp:
        type: integer
      weights_total:
        type: integer
    type: object
  user.InventoryWithProduct:
    properties:
      activity_id:
        description: 来源活动ID
        type: integer
      created_at:
        description: 创建时间
        type: string
      has_shipment:
        type: boolean
      id:
        description: 主键ID
        type: integer
      order_id:
        description: 来源订单ID
        type: integer
      product_id:
        description: 资产对应商品ID（实物奖/商品）
        type: integer
      product_images:
        type: string
      product_name:
        type: string
      product_price:
        description: 新增价格字段
        type: integer
      remark:
        description: 备注
        type: string
      reward_id:
        description: 来源奖励ID（activity_reward_settings.id）
        type: integer
      shipping_no:
        description: 发货单号
        type: string
      shipping_status:
        type: integer
      status:
        description: 状态：1持有 2作废 3已使用/发货
        type: integer
      updated_at:
        description: 更新时间
        type: string
      user_id:
        description: 资产归属用户ID
        type: integer
    type: object
  user.ItemCardSimpleInfo:
    properties:
      effect_type:
        type: integer
      name:
        type: string
      user_card_id:
        type: integer
    type: object
  user.ItemCardWithTemplate:
    properties:
      card_id:
        description: 卡模板ID（system_item_cards.id）
        type: integer
      card_type:
        type: integer
      count:
        type: integer
      created_at:
        description: 创建时间
        type: string
      effect_type:
        type: integer
      id:
        description: 主键ID
        type: integer
      name:
        type: string
      remark:
        type: string
      scope_type:
        type: integer
      stacking_strategy:
        type: integer
      status:
        description: 状态：1未使用 2已使用 3已过期
        type: integer
      updated_at:
        description: 更新时间
        type: string
      used_activity_id:
        description: 使用时活动ID
        type: integer
      used_activity_name:
        type: string
      used_at:
        description: 使用时间
        type: string
      used_draw_log_id:
        description: 使用关联抽奖日志ID（activity_draw_logs.id）
        type: integer
      used_issue_id:
        description: 使用时期ID
        type: integer
      used_issue_number:
        type: string
      used_reward_name:
        type: string
      user_id:
        description: 用户ID（users.id）
        type: integer
      valid_end:
        description: 有效期结束
        type: string
      valid_start:
        description: 有效期开始
        type: string
    type: object
  user.OrderWithItems:
    properties:
      activity_id:
        type: integer
      activity_name:
        type: string
      actual_amount:
        description: 实际支付金额（分）
        type: integer
      cancelled_at:
        description: 取消时间
        type: string
      category_id:
        type: integer
      category_name:
        type: string
      coupon_id:
        description: 使用的优惠券ID
        type: integer
      coupon_info:
        $ref: '#/definitions/user.CouponSimpleInfo'
      created_at:
        description: 创建时间
        type: string
      discount_amount:
        description: 优惠券抵扣金额（分）
        type: integer
      draw_receipts:
        items:
          $ref: '#/definitions/user.DrawReceiptInfo'
        type: array
      id:
        description: 主键ID
        type: integer
      is_consumed:
        description: 是否已履约/消耗（对虚拟资产）
        type: integer
      is_draw:
        type: boolean
      is_winner:
        type: boolean
      issue_number:
        type: string
      item_card_id:
        description: 使用的道具卡ID
        type: integer
      item_card_info:
        $ref: '#/definitions/user.ItemCardSimpleInfo'
      items:
        items:
          $ref: '#/definitions/model.OrderItems'
        type: array
      order_no:
        description: 业务订单号（唯一）
        type: string
      paid_at:
        description: 支付完成时间
        type: string
      pay_preorder_id:
        description: 关联预支付单ID（payment_preorder.id）
        type: integer
      play_type:
        type: string
      points_amount:
        description: 积分抵扣金额（分）
        type: integer
      points_ledger_id:
        description: 积分扣减流水ID（user_points_ledger.id）
        type: integer
      remark:
        description: 备注
        type: string
      reward_level:
        type: integer
      source_type:
        description: 来源：1商城直购 2抽奖票据 3其他
        type: integer
      status:
        description: 订单状态：1待支付 2已支付 3已取消 4已退款
        type: integer
      total_amount:
        description: 订单总金额（分）
        type: integer
      updated_at:
        description: 更新时间
        type: string
      user_address_id:
        description: 收货地址ID（user_addresses.id）
        type: integer
      user_id:
        description: 下单用户ID（user_members.id）
        type: integer
    type: object
  user.ProductInfo:
    properties:
      id:
        type: integer
      image:
        type: string
      name:
        type: string
      price:
        type: integer
    type: object
  user.ShipmentGroup:
    properties:
      batch_no:
        type: string
      count:
        type: integer
      express_code:
        type: string
      express_no:
        type: string
      inventory_ids:
        items:
          type: integer
        type: array
      product_ids:
        items:
          type: integer
        type: array
      products:
        items:
          $ref: '#/definitions/user.ProductInfo'
        type: array
      received_at:
        type: string
      shipped_at:
        type: string
      status:
        type: integer
    type: object
info:
  contact: {}
  title: mini-chat 接口文档
  version: v0.0.1
paths:
  /admin/task_center/simulate/invite_success:
    post:
      consumes:
      - application/json
      description: 模拟用户邀请成功，触发任务进度更新
      parameters:
      - description: 模拟请求
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/taskcenter.simulateInviteSuccessRequest'
      produces:
      - application/json
      responses:
        "200":
          description: 操作成功
          schema:
            additionalProperties: true
            type: object
      summary: 模拟邀请成功(Admin)
      tags:
      - TaskCenter(Admin)
  /admin/task_center/simulate/order_paid:
    post:
      consumes:
      - application/json
      description: 模拟用户支付订单，触发任务进度更新
      parameters:
      - description: 模拟请求
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/taskcenter.simulateOrderPaidRequest'
      produces:
      - application/json
      responses:
        "200":
          description: 操作成功
          schema:
            additionalProperties: true
            type: object
      summary: 模拟订单支付(Admin)
      tags:
      - TaskCenter(Admin)
  /admin/task_center/tasks:
    get:
      consumes:
      - application/json
      description: 获取任务管理列表
      produces:
      - application/json
      responses:
        "200":
          description: 任务列表
          schema:
            additionalProperties: true
            type: object
      summary: 任务列表(Admin)
      tags:
      - TaskCenter(Admin)
    post:
      consumes:
      - application/json
      description: 创建一个新的任务
      parameters:
      - description: 创建任务请求
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/taskcenter.createTaskRequest'
      produces:
      - application/json
      responses:
        "200":
          description: 创建成功
          schema:
            additionalProperties: true
            type: object
      summary: 创建任务(Admin)
      tags:
      - TaskCenter(Admin)
  /admin/task_center/tasks/{id}:
    delete:
      consumes:
      - application/json
      description: 删除指定的任务
      parameters:
      - description: 任务ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: 删除成功
          schema:
            additionalProperties: true
            type: object
      summary: 删除任务(Admin)
      tags:
      - TaskCenter(Admin)
    put:
      consumes:
      - application/json
      description: 修改指定任务的信息
      parameters:
      - description: 任务ID
        in: path
        name: id
        required: true
        type: integer
      - description: 修改任务请求
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/taskcenter.modifyTaskRequest'
      produces:
      - application/json
      responses:
        "200":
          description: 修改成功
          schema:
            additionalProperties: true
            type: object
      summary: 修改任务(Admin)
      tags:
      - TaskCenter(Admin)
  /admin/task_center/tasks/{id}/rewards:
    get:
      consumes:
      - application/json
      description: 获取任务层级对应的奖励列表
      parameters:
      - description: 任务ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: 奖励列表
          schema:
            additionalProperties: true
            type: object
      summary: 获取任务奖励(Admin)
      tags:
      - TaskCenter(Admin)
    post:
      consumes:
      - application/json
      description: 设置任务层级对应的奖励
      parameters:
      - description: 任务ID
        in: path
        name: id
        required: true
        type: integer
      - description: 设置奖励请求
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/taskcenter.upsertRewardsRequest'
      produces:
      - application/json
      responses:
        "200":
          description: 设置成功
          schema:
            additionalProperties: true
            type: object
      summary: 设置任务奖励(Admin)
      tags:
      - TaskCenter(Admin)
  /admin/task_center/tasks/{id}/tiers:
    get:
      consumes:
      - application/json
      description: 获取任务的完成条件层级列表
      parameters:
      - description: 任务ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: 层级列表
          schema:
            additionalProperties: true
            type: object
      summary: 获取任务层级(Admin)
      tags:
      - TaskCenter(Admin)
    post:
      consumes:
      - application/json
      description: 设置任务的完成条件层级
      parameters:
      - description: 任务ID
        in: path
        name: id
        required: true
        type: integer
      - description: 设置层级请求
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/taskcenter.upsertTiersRequest'
      produces:
      - application/json
      responses:
        "200":
          description: 设置成功
          schema:
            additionalProperties: true
            type: object
      summary: 设置任务层级(Admin)
      tags:
      - TaskCenter(Admin)
  /api/admin/activities:
    get:
      consumes:
      - application/json
      description: 获取活动列表，支持分类、Boss、状态过滤与分页
      parameters:
      - description: 活动名称(模糊)
        in: query
        name: name
        type: string
      - description: 活动分类ID
        in: query
        name: category_id
        type: integer
      - description: 是否Boss(0/1)
        in: query
        name: is_boss
        type: integer
      - description: 状态(1进行中 2下线)
        in: query
        name: status
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listActivitiesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 活动列表
      tags:
      - 管理端.活动
    post:
      consumes:
      - application/json
      description: 创建活动，配置基本信息与分类、Boss标签
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.createActivityRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessageResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 创建活动
      tags:
      - 管理端.活动
  /api/admin/activities/{activity_id}:
    delete:
      consumes:
      - application/json
      description: 删除指定活动
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessageResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 删除活动
      tags:
      - 管理端.活动
    get:
      consumes:
      - application/json
      description: 查看指定活动的详细信息
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.activityDetailResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看活动详情
      tags:
      - 管理端.活动
    put:
      consumes:
      - application/json
      description: 修改活动基本信息、分类、Boss标签等
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.modifyActivityRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessageResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 修改活动
      tags:
      - 管理端.活动
  /api/admin/activities/{activity_id}/copy:
    post:
      consumes:
      - application/json
      description: 根据活动ID深度复制期次与奖品，生成新的活动
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.copyActivityResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 复制活动
      tags:
      - 管理端.活动
  /api/admin/activities/{activity_id}/game-passes/check:
    get:
      consumes:
      - application/json
      description: 检查指定活动是否有用户持有未使用的次数卡，用于下架/删除前校验
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.checkActivityGamePassesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 检查活动次数卡
      tags:
      - 管理端.次数卡
  /api/admin/activities/{activity_id}/issues:
    get:
      consumes:
      - application/json
      description: 获取指定活动的期数列表，支持分页
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listIssuesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看活动期数
      tags:
      - 管理端.活动
    post:
      consumes:
      - application/json
      description: 为指定活动创建一个新的期数
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.createIssueRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessage'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 创建活动期数
      tags:
      - 管理端.活动
  /api/admin/activities/{activity_id}/issues/{issue_id}:
    delete:
      consumes:
      - application/json
      description: 删除指定期数
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - description: 期ID
        in: path
        name: issue_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessage'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 删除活动期数
      tags:
      - 管理端.活动
    put:
      consumes:
      - application/json
      description: 修改指定期数的信息
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - description: 期ID
        in: path
        name: issue_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.modifyIssueRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessage'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 修改活动期数
      tags:
      - 管理端.活动
  /api/admin/activities/{activity_id}/issues/{issue_id}/rewards:
    get:
      consumes:
      - application/json
      description: 查看指定期数的奖励配置列表
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - description: 期ID
        in: path
        name: issue_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listRewardsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看期数奖品
      tags:
      - 管理端.活动
    post:
      consumes:
      - application/json
      description: 为指定期数批量创建奖励配置
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - description: 期ID
        in: path
        name: issue_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.createRewardsRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessageResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 创建期数奖品
      tags:
      - 管理端.活动
  /api/admin/activities/{activity_id}/issues/{issue_id}/rewards/{reward_id}:
    delete:
      consumes:
      - application/json
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - description: 期ID
        in: path
        name: issue_id
        required: true
        type: integer
      - description: 奖励ID
        in: path
        name: reward_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessageResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 删除期数奖励
      tags:
      - 管理端.活动
    put:
      consumes:
      - application/json
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - description: 期ID
        in: path
        name: issue_id
        required: true
        type: integer
      - description: 奖励ID
        in: path
        name: reward_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.modifyRewardRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessageResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 更新期数奖励
      tags:
      - 管理端.活动
  /api/admin/activities/{activity_id}/issues/{issue_id}/rewards/batch:
    put:
      consumes:
      - application/json
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - description: 期ID
        in: path
        name: issue_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.batchModifyRewardsRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessageResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 批量更新期数奖励
      tags:
      - 管理端.活动
  /api/admin/activity_categories:
    get:
      consumes:
      - application/json
      description: 获取启用状态的活动分类列表
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listCategoriesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 活动分类列表
      tags:
      - 管理端.活动
  /api/admin/auth/refresh:
    post:
      consumes:
      - application/json
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.refreshResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 管理端令牌刷新
      tags:
      - 管理端.登录
  /api/admin/banners:
    get:
      consumes:
      - application/json
      parameters:
      - description: 状态
        in: query
        name: status
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listBannersResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看轮播图列表
      tags:
      - 管理端.运营
    post:
      consumes:
      - application/json
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.createBannerRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.createBannerResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 创建轮播图
      tags:
      - 管理端.运营
  /api/admin/banners/{banner_id}:
    delete:
      consumes:
      - application/json
      parameters:
      - description: 轮播图ID
        in: path
        name: banner_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.pcSimpleMessage'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 删除轮播图
      tags:
      - 管理端.运营
    put:
      consumes:
      - application/json
      parameters:
      - description: 轮播图ID
        in: path
        name: banner_id
        required: true
        type: string
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.modifyBannerRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.pcSimpleMessage'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 修改轮播图
      tags:
      - 管理端.运营
  /api/admin/game-pass-packages:
    get:
      consumes:
      - application/json
      description: 查询次数卡套餐列表
      parameters:
      - description: 活动ID
        in: query
        name: activity_id
        type: integer
      - description: '状态: 1=上架 2=下架'
        in: query
        name: status
        type: integer
      - description: 页码
        in: query
        name: page
        type: integer
      - description: 每页条数
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listGamePassPackagesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 次数卡套餐列表
      tags:
      - 管理端.次数卡套餐
    post:
      consumes:
      - application/json
      description: 创建可购买的次数卡套餐
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.createGamePassPackageRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.createGamePassPackageResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 创建次数卡套餐
      tags:
      - 管理端.次数卡套餐
  /api/admin/game-pass-packages/{package_id}:
    delete:
      consumes:
      - application/json
      description: 软删除次数卡套餐
      parameters:
      - description: 套餐ID
        in: path
        name: package_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessageResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 删除次数卡套餐
      tags:
      - 管理端.次数卡套餐
    put:
      consumes:
      - application/json
      description: 修改次数卡套餐配置
      parameters:
      - description: 套餐ID
        in: path
        name: package_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.modifyGamePassPackageRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessageResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 修改次数卡套餐
      tags:
      - 管理端.次数卡套餐
  /api/admin/game-passes/grant:
    post:
      consumes:
      - application/json
      description: 管理员为用户发放游戏次数卡
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.grantGamePassRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.grantGamePassResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 发放次数卡
      tags:
      - 管理端.次数卡
  /api/admin/game-passes/list:
    get:
      consumes:
      - application/json
      description: 查询用户次数卡列表，支持按用户、活动过滤
      parameters:
      - description: 用户ID
        in: query
        name: user_id
        type: integer
      - description: 活动ID
        in: query
        name: activity_id
        type: integer
      - description: 页码
        in: query
        name: page
        type: integer
      - description: 每页条数
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listGamePassesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 次数卡列表
      tags:
      - 管理端.次数卡
  /api/admin/login:
    post:
      consumes:
      - application/json
      description: 管理员登录
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.loginRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.loginResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 管理员登录
      tags:
      - 管理端.登录
  /api/admin/matching/audit/{order_no}:
    get:
      consumes:
      - application/json
      description: 运营通过单号查询发牌过程
      parameters:
      - description: 订单号
        in: path
        name: order_no
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/activity.MatchingGame'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - AdminAuth: []
      summary: 获取对对碰审计数据
      tags:
      - 管理端.对对碰
  /api/admin/matching_card_types:
    get:
      consumes:
      - application/json
      description: 获取所有卡牌类型配置
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listMatchingCardTypesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - AdminAuth: []
      summary: 列出对对碰卡牌类型
      tags:
      - 管理端.对对碰
    post:
      consumes:
      - application/json
      description: 创建新的卡牌类型
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.matchingCardTypeRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.matchingCardTypeResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - AdminAuth: []
      summary: 创建卡牌类型
      tags:
      - 管理端.对对碰
  /api/admin/matching_card_types/{id}:
    delete:
      consumes:
      - application/json
      description: 删除指定的卡牌类型
      parameters:
      - description: 卡牌类型ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - AdminAuth: []
      summary: 删除卡牌类型
      tags:
      - 管理端.对对碰
    put:
      consumes:
      - application/json
      description: 修改已有的卡牌类型
      parameters:
      - description: 卡牌类型ID
        in: path
        name: id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.matchingCardTypeRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.matchingCardTypeResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - AdminAuth: []
      summary: 修改卡牌类型
      tags:
      - 管理端.对对碰
  /api/admin/orders/{order_id}/rollback:
    post:
      consumes:
      - application/json
      description: 基于快照将用户数据回滚到消费前状态，包括恢复积分、优惠券、道具卡，作废资产，调用微信退款
      parameters:
      - description: 订单ID
        in: path
        name: order_id
        required: true
        type: integer
      - description: 回滚请求
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/admin.rollbackOrderRequest'
      produces:
      - application/json
      responses:
        "200":
          description: 成功
          schema:
            $ref: '#/definitions/admin.rollbackOrderResponse'
      summary: 回滚订单到消费前状态
      tags:
      - Admin-Audit
  /api/admin/orders/{order_id}/snapshots:
    get:
      consumes:
      - application/json
      description: 获取订单消费前后的完整用户状态快照
      parameters:
      - description: 订单ID
        in: path
        name: order_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: 成功
          schema:
            $ref: '#/definitions/admin.getOrderSnapshotsResponse'
      summary: 获取订单审计快照
      tags:
      - Admin-Audit
  /api/admin/product_categories:
    get:
      consumes:
      - application/json
      parameters:
      - description: 名称
        in: query
        name: name
        type: string
      - description: 状态
        in: query
        name: status
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listProductCategoriesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看商品分类列表
      tags:
      - 管理端.商品
    post:
      consumes:
      - application/json
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.createProductCategoryRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.createProductCategoryResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 创建商品分类
      tags:
      - 管理端.商品
  /api/admin/product_categories/{category_id}:
    delete:
      consumes:
      - application/json
      parameters:
      - description: 分类ID
        in: path
        name: category_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.pcSimpleMessage'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 删除商品分类
      tags:
      - 管理端.商品
    put:
      consumes:
      - application/json
      parameters:
      - description: 分类ID
        in: path
        name: category_id
        required: true
        type: string
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.modifyProductCategoryRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.pcSimpleMessage'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 修改商品分类
      tags:
      - 管理端.商品
  /api/admin/products:
    get:
      consumes:
      - application/json
      parameters:
      - description: 名称
        in: query
        name: name
        type: string
      - description: 分类ID
        in: query
        name: category_id
        type: integer
      - description: 状态
        in: query
        name: status
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listProductsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看商品列表
      tags:
      - 管理端.商品
    post:
      consumes:
      - application/json
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.createProductRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.createProductResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 创建商品
      tags:
      - 管理端.商品
  /api/admin/products/{product_id}:
    delete:
      consumes:
      - application/json
      parameters:
      - description: 商品ID
        in: path
        name: product_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.pcSimpleMessage'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 删除商品
      tags:
      - 管理端.商品
    put:
      consumes:
      - application/json
      parameters:
      - description: 商品ID
        in: path
        name: product_id
        required: true
        type: string
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.modifyProductRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.pcSimpleMessage'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 修改商品
      tags:
      - 管理端.商品
  /api/admin/products/batch:
    put:
      consumes:
      - application/json
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.batchUpdateProductsRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.batchUpdateProductsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 批量更新商品（库存/上下架）
      tags:
      - 管理端.商品
  /api/admin/shipping/orders:
    get:
      consumes:
      - application/json
      description: 按批次号或运单号聚合显示发货记录，支持筛选状态、用户、时间等
      parameters:
      - description: 页码，默认1
        in: query
        name: page
        type: integer
      - description: 每页数量，最多100，默认20
        in: query
        name: page_size
        type: integer
      - description: 状态：1待发货 2已发货 3已签收 4异常
        in: query
        name: status
        type: integer
      - description: 用户ID
        in: query
        name: user_id
        type: integer
      - description: 批次号
        in: query
        name: batch_no
        type: string
      - description: 运单号
        in: query
        name: express_no
        type: string
      - description: 开始日期 2006-01-02
        in: query
        name: start_date
        type: string
      - description: 结束日期 2006-01-02
        in: query
        name: end_date
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listShippingOrdersResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 发货订单列表
      tags:
      - 管理端.发货管理
  /api/admin/shipping/orders/{id}:
    get:
      consumes:
      - application/json
      description: 根据发货记录ID获取详情
      parameters:
      - description: 发货记录ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/model.ShippingRecords'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取发货订单详情
      tags:
      - 管理端.发货管理
  /api/admin/shipping/orders/batch:
    put:
      consumes:
      - application/json
      description: 为多条发货记录填写运单号或更新状态
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.updateShippingRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.updateShippingResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 批量更新发货信息
      tags:
      - 管理端.发货管理
  /api/admin/system_item_cards:
    get:
      consumes:
      - application/json
      description: 管理员获取道具卡列表，支持按名称、状态、类型等条件筛选
      parameters:
      - description: 道具卡名称
        in: query
        name: name
        type: string
      - description: 状态：1启用 2禁用
        in: query
        name: status
        type: integer
      - description: 道具卡类型：1抽奖卡 2加成卡 3保底卡
        in: query
        name: card_type
        type: integer
      - description: 适用范围：1全局 2活动分类 3活动 4期次
        in: query
        name: scope_type
        type: integer
      - description: 页码，默认1
        in: query
        name: page
        type: integer
      - description: 每页条数，默认10
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listItemCardsResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: 未授权
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 获取道具卡列表
      tags:
      - 管理端.运营管理
    post:
      consumes:
      - application/json
      description: 管理员创建新的道具卡，支持设置类型、效果、有效期等属性
      parameters:
      - description: 创建道具卡请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.createItemCardRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.createItemCardResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: 未授权
          schema:
            $ref: '#/definitions/code.Failure'
        "403":
          description: 无权限，仅超管可操作
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 创建道具卡
      tags:
      - 管理端.运营管理
  /api/admin/system_item_cards/{item_card_id}:
    delete:
      consumes:
      - application/json
      description: 管理员删除指定的道具卡
      parameters:
      - description: 道具卡ID
        in: path
        name: item_card_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessageResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: 未授权
          schema:
            $ref: '#/definitions/code.Failure'
        "403":
          description: 无权限，仅超管可操作
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 删除道具卡
      tags:
      - 管理端.运营管理
    put:
      consumes:
      - application/json
      description: 管理员修改道具卡信息，支持修改名称、价格、有效期等属性
      parameters:
      - description: 道具卡ID
        in: path
        name: item_card_id
        required: true
        type: integer
      - description: 修改道具卡请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.modifyItemCardRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessageResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: 未授权
          schema:
            $ref: '#/definitions/code.Failure'
        "403":
          description: 无权限，仅超管可操作
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 修改道具卡
      tags:
      - 管理端.运营管理
  /api/admin/users:
    get:
      consumes:
      - application/json
      description: 查看APP端用户分页列表
      parameters:
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      - description: 用户昵称
        in: query
        name: nickname
        type: string
      - description: 邀请码
        in: query
        name: inviteCode
        type: string
      - description: 开始日期(YYYY-MM-DD)
        in: query
        name: startDate
        type: string
      - description: 结束日期(YYYY-MM-DD)
        in: query
        name: endDate
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listUsersResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 管理端用户列表
      tags:
      - 管理端.用户
  /api/admin/users/{user_id}/coupons:
    get:
      consumes:
      - application/json
      description: 查看指定用户持有的优惠券列表
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listCouponsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看用户优惠券列表
      tags:
      - 管理端.用户
  /api/admin/users/{user_id}/coupons/add:
    post:
      consumes:
      - application/json
      description: 管理端为指定用户发放优惠券
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.addCouponRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.addCouponResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 给用户添加优惠券
      tags:
      - 管理端.用户
  /api/admin/users/{user_id}/game-passes:
    get:
      consumes:
      - application/json
      description: 查询指定用户的所有次数卡
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.getUserGamePassesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查询用户次数卡
      tags:
      - 管理端.次数卡
  /api/admin/users/{user_id}/game_tickets:
    get:
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 页码
        in: query
        name: page
        type: integer
      - description: 每页数量
        in: query
        name: page_size
        type: integer
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
      summary: 查询用户游戏资格日志
      tags:
      - 管理端.游戏
    post:
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/game.grantTicketRequest'
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
      summary: 发放游戏资格
      tags:
      - 管理端.游戏
  /api/admin/users/{user_id}/inventory:
    get:
      consumes:
      - application/json
      description: 查看指定用户的资产记录
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listInventoryResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看用户资产列表
      tags:
      - 管理端.用户
  /api/admin/users/{user_id}/invites:
    get:
      consumes:
      - application/json
      description: 查看指定用户邀请的用户列表
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listInvitesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看用户邀请列表
      tags:
      - 管理端.用户
  /api/admin/users/{user_id}/item_cards:
    get:
      consumes:
      - application/json
      description: 查看指定用户的道具卡持有记录
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listUserItemCardsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看用户道具卡列表
      tags:
      - 管理端.用户
    post:
      consumes:
      - application/json
      description: 管理员给指定用户分配道具卡，可指定数量
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 分配道具卡请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.assignItemCardRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.simpleMessageResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: 未授权
          schema:
            $ref: '#/definitions/code.Failure'
        "403":
          description: 无权限，仅超管可操作
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 给用户分配道具卡
      tags:
      - 管理端.运营管理
  /api/admin/users/{user_id}/orders:
    get:
      consumes:
      - application/json
      description: 查看指定用户的订单记录
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listOrdersResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看用户订单列表
      tags:
      - 管理端.用户
  /api/admin/users/{user_id}/points:
    get:
      consumes:
      - application/json
      description: 查看指定用户的积分流水记录
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.listPointsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看用户积分记录
      tags:
      - 管理端.用户
  /api/admin/users/{user_id}/points/add:
    post:
      consumes:
      - application/json
      description: 管理端为指定用户发放或扣减积分，正数为增加，负数为扣减
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.addPointsRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.addPointsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 给用户增加或扣减积分
      tags:
      - 管理端.用户
  /api/admin/users/{user_id}/points/balance:
    get:
      consumes:
      - application/json
      description: 查看指定用户当前积分余额（过滤过期）
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.pointsBalanceResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看用户积分余额
      tags:
      - 管理端.用户
  /api/admin/users/{user_id}/profile:
    get:
      consumes:
      - application/json
      description: 聚合用户基本信息、生命周期财务指标、当前资产快照
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.UserProfileResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取用户综合画像
      tags:
      - 管理端.用户
  /api/admin/users/{user_id}/rewards/grant:
    post:
      consumes:
      - application/json
      description: 管理员给用户发放奖励，支持实物和虚拟奖品，可选择关联活动和奖励配置
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.GrantRewardRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.GrantRewardResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/code.Failure'
        "403":
          description: Forbidden
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 给用户发放奖励
      tags:
      - 管理端.用户
  /api/admin/users/{user_id}/token:
    post:
      consumes:
      - application/json
      description: 仅超级管理员可用，用于测试或紧急场景下为指定用户签发APP令牌
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.issueUserTokenResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 管理端为APP用户签发令牌
      tags:
      - 管理端.用户
  /api/app/activities:
    get:
      consumes:
      - application/json
      description: 获取活动列表，支持分类、Boss、状态过滤与分页
      parameters:
      - description: 活动名称(模糊)
        in: query
        name: name
        type: string
      - description: 活动分类ID
        in: query
        name: category_id
        type: integer
      - description: 是否Boss(0/1)
        in: query
        name: is_boss
        type: integer
      - description: 状态(1进行中 2下线)
        in: query
        name: status
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listActivitiesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 活动列表
      tags:
      - APP端.活动
  /api/app/activities/{activity_id}:
    get:
      consumes:
      - application/json
      description: 获取指定活动的详细信息
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.activityDetailResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 活动详情
      tags:
      - APP端.活动
  /api/app/activities/{activity_id}/issues:
    get:
      consumes:
      - application/json
      description: 获取指定活动的期列表，支持分页
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listIssuesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 活动期列表
      tags:
      - APP端.活动
  /api/app/activities/{activity_id}/issues/{issue_id}/choices:
    get:
      consumes:
      - application/json
      description: 返回总位置数量、已占用位置列表以及当前可选位置列表。仅在活动玩法为 ichiban 时可用。
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - description: 期ID
        in: path
        name: issue_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listIssueChoicesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 获取指定活动期的可选位置与已占用位置
      tags:
      - APP端.活动
  /api/app/activities/{activity_id}/issues/{issue_id}/draw_logs:
    get:
      consumes:
      - application/json
      description: 查看指定活动期数的抽奖记录，支持等级筛选（默认返回最新的100条，不支持自定义翻页）
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - description: 期ID
        in: path
        name: issue_id
        required: true
        type: integer
      - description: 奖品等级过滤
        in: query
        name: level
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listDrawLogsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 抽奖记录列表
      tags:
      - APP端.活动
  /api/app/activities/{activity_id}/issues/{issue_id}/draw_logs_grouped:
    get:
      consumes:
      - application/json
      description: 查看指定活动期数的抽奖记录，按奖品等级分组返回
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - description: 期ID
        in: path
        name: issue_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listDrawLogsByLevelResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 按奖品等级分类的抽奖记录
      tags:
      - APP端.活动
  /api/app/activities/{activity_id}/issues/{issue_id}/rewards:
    get:
      consumes:
      - application/json
      description: 获取指定期的奖励配置列表
      parameters:
      - description: 活动ID
        in: path
        name: activity_id
        required: true
        type: integer
      - description: 期ID
        in: path
        name: issue_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listRewardsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 奖励配置列表
      tags:
      - APP端.活动
  /api/app/address-share/submit:
    post:
      consumes:
      - application/json
      description: 被邀请者使用分享令牌提交收件信息；服务端校验令牌有效并创建待发货记录（极简方案）
      parameters:
      - description: 请求参数：令牌与地址信息
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.addressShareSubmitRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.addressShareSubmitResponse'
        "400":
          description: 令牌无效/已处理/资产不可用
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 提交共享地址
      tags:
      - APP端.用户
  /api/app/banners:
    get:
      consumes:
      - application/json
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listAppBannersResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: APP端轮播图列表
      tags:
      - APP端.运营
  /api/app/categories:
    get:
      consumes:
      - application/json
      description: 获取APP端商品分类列表
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listAppCategoriesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 获取分类列表
      tags:
      - APP端.基础
  /api/app/game-passes/available:
    get:
      consumes:
      - application/json
      description: 查询当前用户可用的游戏次数卡
      parameters:
      - description: 活动ID，不传返回所有可用次数卡
        in: query
        name: activity_id
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.getGamePassesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取用户次数卡
      tags:
      - APP端.用户
  /api/app/game-passes/packages:
    get:
      consumes:
      - application/json
      description: 获取可购买的次数卡套餐列表
      parameters:
      - description: 活动ID，不传返回全局套餐
        in: query
        name: activity_id
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.getPackagesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 获取次数卡套餐
      tags:
      - APP端.用户
  /api/app/game-passes/purchase:
    post:
      consumes:
      - application/json
      description: 购买次数卡套餐，创建订单等待支付
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.purchasePackageRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.purchasePackageResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 购买次数卡套餐
      tags:
      - APP端.用户
  /api/app/games/enter:
    post:
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/game.enterGameRequest'
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/game.enterGameResponse'
      summary: 进入游戏
      tags:
      - APP端.游戏
  /api/app/lottery/join:
    post:
      consumes:
      - application/json
      description: 提交活动ID与期ID创建参与记录与订单，支持积分抵扣，返回参与ID、订单号、抽奖模式及是否进入队列
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.joinLotteryRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.joinLotteryResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 用户参与抽奖
      tags:
      - APP端.抽奖
  /api/app/lottery/result:
    get:
      consumes:
      - application/json
      description: 根据订单号查询抽奖结果与进度，返回结果明细与可验证凭证；需登录
      parameters:
      - description: 订单号
        in: query
        name: order_no
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.orderResultResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 抽奖订单结果查询
      tags:
      - APP端.抽奖
  /api/app/matching/card_types:
    get:
      consumes:
      - application/json
      description: 获取所有启用的卡牌类型配置，用于App端预览或动画展示
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/activity.CardTypeConfig'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 列出对对碰卡牌类型
      tags:
      - APP端.活动
  /api/app/matching/cards:
    get:
      consumes:
      - application/json
      description: 只有支付成功后才能获取游戏牌组数据，防止未支付用户获取牌组信息
      parameters:
      - description: 游戏ID
        in: query
        name: game_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.matchingGameCardsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取对对碰游戏数据
      tags:
      - APP端.活动
  /api/app/matching/check:
    post:
      consumes:
      - application/json
      description: 前端游戏结束后上报结果，服务器发放奖励
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.matchingGameCheckRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.matchingGameCheckResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 游戏结束结算校验
      tags:
      - APP端.活动
  /api/app/matching/preorder:
    post:
      consumes:
      - application/json
      description: 用户下单，服务器扣费并返回全量99张乱序卡牌，前端自行负责游戏流程
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.matchingGamePreOrderRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.matchingGamePreOrderResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 下单并获取对对碰全量数据
      tags:
      - APP端.活动
  /api/app/matching/state:
    get:
      consumes:
      - application/json
      description: 获取当前游戏的完整状态
      parameters:
      - description: 游戏ID
        in: query
        name: game_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取对对碰游戏状态
      tags:
      - APP端.活动
  /api/app/notices:
    get:
      consumes:
      - application/json
      description: 获取APP首页滚动公告
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listAppNoticesResponse'
      summary: 获取公告列表
      tags:
      - APP端.基础
  /api/app/orders/{order_id}:
    get:
      consumes:
      - application/json
      description: 获取指定订单的详细信息
      parameters:
      - description: 订单ID
        in: path
        name: order_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/user.OrderWithItems'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取订单详情
      tags:
      - APP端.用户
  /api/app/orders/{order_id}/cancel:
    post:
      consumes:
      - application/json
      description: 取消指定订单（仅限待付款状态）
      parameters:
      - description: 订单ID
        in: path
        name: order_id
        required: true
        type: integer
      - description: 取消原因
        in: body
        name: body
        schema:
          $ref: '#/definitions/app.cancelOrderRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.cancelOrderResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 取消订单
      tags:
      - APP端.用户
  /api/app/pay/wechat/jsapi/preorder:
    post:
      consumes:
      - application/json
      description: 根据`order_no`与`openid`创建或复用JSAPI预下单，返回`wx.requestPayment`调起参数；订单需为当前登录用户且状态为待支付
      parameters:
      - description: 请求参数：业务订单号与openid
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.jsapiPreorderRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.jsapiPreorderResponse'
        "400":
          description: 参数错误/配置缺失/订单不存在或状态不合法/微信预下单失败/签名构建失败
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 小程序微信支付预下单
      tags:
      - APP端.支付
  /api/app/products:
    get:
      consumes:
      - application/json
      description: 分页查询商品列表，支持分类筛选，返回分页信息与商品数组
      parameters:
      - description: 页码，默认1
        in: query
        name: page
        type: integer
      - description: 每页数量，默认20
        in: query
        name: page_size
        type: integer
      - description: 分类ID
        in: query
        name: category_id
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listAppProductsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 商品列表
      tags:
      - APP端.商品
  /api/app/products/{id}:
    get:
      consumes:
      - application/json
      description: 根据商品ID返回完整商品信息，含相册与同类推荐；校验下架/缺货状态
      parameters:
      - description: 商品ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.getAppProductDetailResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 商品详情
      tags:
      - APP端.商品
  /api/app/sms/login:
    post:
      consumes:
      - application/json
      description: 使用短信验证码登录或注册（新手机号自动创建账户）
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.smsLoginRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.smsLoginResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 短信验证码登录
      tags:
      - APP端.用户
  /api/app/sms/send-code:
    post:
      consumes:
      - application/json
      description: 发送短信验证码到指定手机号（60秒内不可重复发送，每日最多10次）
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.sendSmsCodeRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.sendSmsCodeResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 发送短信验证码
      tags:
      - APP端.用户
  /api/app/store/items:
    get:
      consumes:
      - application/x-www-form-urlencoded
      description: 分页获取积分商城商品列表，支持按类型筛选(product/item_card/coupon)
      parameters:
      - description: '商品类型: product(默认), item_card, coupon'
        in: query
        name: kind
        type: string
      - default: 1
        description: 页码
        in: query
        name: page
        type: integer
      - default: 20
        description: 每页数量
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listStoreItemsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取积分商城商品列表
      tags:
      - APP端.积分商城
  /api/app/task-center/tasks:
    get:
      consumes:
      - application/x-www-form-urlencoded
      description: 获取当前可用的任务列表，支持分页
      parameters:
      - default: 1
        description: 页码
        in: query
        name: page
        type: integer
      - default: 20
        description: 每页数量
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: 任务列表
          schema:
            $ref: '#/definitions/taskcenter.listTasksResponse'
      summary: 获取任务列表(App)
      tags:
      - TaskCenter(App)
  /api/app/task-center/tasks/{id}/claim/{user_id}:
    post:
      consumes:
      - application/json
      description: 用户领取指定任务层级的奖励
      parameters:
      - description: 任务ID
        in: path
        name: id
        required: true
        type: integer
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 领取请求
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/taskcenter.claimTaskRequest'
      produces:
      - application/json
      responses:
        "200":
          description: 领取成功
          schema:
            additionalProperties: true
            type: object
      summary: 领取任务奖励(App)
      tags:
      - TaskCenter(App)
  /api/app/task-center/tasks/{id}/progress/{user_id}:
    get:
      consumes:
      - application/json
      description: 获取指定用户在特定任务上的进度详情
      parameters:
      - description: 任务ID
        in: path
        name: id
        required: true
        type: integer
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: 任务进度详情
          schema:
            $ref: '#/definitions/taskcenter.taskProgressResponse'
      summary: 获取用户任务进度(App)
      tags:
      - TaskCenter(App)
  /api/app/users/{user_id}:
    put:
      consumes:
      - application/json
      description: 修改用户昵称与头像
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.modifyUserRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.modifyUserResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 修改用户信息
      tags:
      - APP端.用户
  /api/app/users/{user_id}/addresses:
    get:
      consumes:
      - application/json
      description: 分页获取当前登录用户的收货地址列表，默认地址优先
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 页码，默认1
        in: query
        name: page
        type: integer
      - description: 每页条数，默认20，最多100
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listAddressesResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: 未授权
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取用户地址列表
      tags:
      - APP端.用户
    post:
      consumes:
      - application/json
      description: 为当前登录用户新增收货地址，可选择设为默认
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.addAddressRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.addAddressResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: 未授权
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 新增用户地址
      tags:
      - APP端.用户
  /api/app/users/{user_id}/addresses/{address_id}:
    delete:
      consumes:
      - application/json
      description: 删除当前登录用户的指定收货地址
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 地址ID
        in: path
        name: address_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.okDeleteResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: 未授权
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 删除用户地址
      tags:
      - APP端.用户
    put:
      consumes:
      - application/json
      description: 更新当前登录用户的指定收货地址
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 地址ID
        in: path
        name: address_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.updateAddressRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.okResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: 未授权
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 更新用户地址
      tags:
      - APP端.用户
  /api/app/users/{user_id}/addresses/{address_id}/default:
    put:
      consumes:
      - application/json
      description: 将指定地址设置为当前登录用户的默认地址
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 地址ID
        in: path
        name: address_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.okResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: 未授权
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 设置默认用户地址
      tags:
      - APP端.用户
  /api/app/users/{user_id}/coupons:
    get:
      consumes:
      - application/json
      description: 查看用户持有的优惠券列表，支持按状态过滤
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      - description: 状态：1未使用 2已使用 3已过期，不传默认1
        in: query
        name: status
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listCouponsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看用户优惠券
      tags:
      - APP端.用户
  /api/app/users/{user_id}/coupons/{user_coupon_id}/usage:
    get:
      consumes:
      - application/json
      description: 获取指定优惠券的使用记录，包含优惠券详情、订单号、活动名称
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 用户优惠券ID
        in: path
        name: user_coupon_id
        required: true
        type: integer
      - description: 页码，默认1
        in: query
        name: page
        type: integer
      - description: 每页数量，默认20
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listCouponUsageResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取单张优惠券使用记录
      tags:
      - APP端.用户
  /api/app/users/{user_id}/coupons/stats:
    get:
      consumes:
      - application/json
      description: 获取用户优惠券各状态数量和累计金额
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.couponStatsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取用户优惠券统计
      tags:
      - APP端.用户
  /api/app/users/{user_id}/douyin/phone/bind:
    post:
      consumes:
      - application/json
      description: 使用抖音手机号 code 换取手机号并绑定到指定用户
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.bindDouyinPhoneRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.bindDouyinPhoneResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 抖音绑定手机号
      tags:
      - APP端.用户
  /api/app/users/{user_id}/game_tickets:
    get:
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      responses:
        "200":
          description: OK
          schema:
            additionalProperties:
              type: integer
            type: object
      summary: 获取我的游戏资格
      tags:
      - APP端.游戏
  /api/app/users/{user_id}/inventory:
    get:
      consumes:
      - application/json
      description: 获取 APP 端当前登录用户在 user_inventory 的资产记录，支持分页
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 页码，默认1
        in: query
        name: page
        type: integer
      - description: 每页数量，最多100，默认20
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listInventoryResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取用户资产列表
      tags:
      - APP端.用户
  /api/app/users/{user_id}/inventory/address-share/create:
    post:
      consumes:
      - application/json
      description: 生成一次性分享令牌（不落库），用于邀请他人填写收货地址；令牌默认有效期1小时（无需传过期参数）
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数：资产ID（过期参数可不传，默认1小时）
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.addressShareCreateRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.addressShareCreateResponse'
        "400":
          description: 参数错误/资产不可用
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 创建共享地址链接
      tags:
      - APP端.用户
  /api/app/users/{user_id}/inventory/address-share/revoke:
    post:
      consumes:
      - application/json
      description: 极简方案下为前端态操作：不落库令牌，撤销仅用于提示与禁用旧链接（可忽略服务端状态）
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数：资产ID
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.addressShareRevokeRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.okResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 撤销共享地址链接
      tags:
      - APP端.用户
  /api/app/users/{user_id}/inventory/cancel-shipping:
    post:
      consumes:
      - application/json
      description: 取消已提交但未发货的申请；恢复库存状态。支持按单个资产ID取消或按批次号批量取消
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数：资产ID或批次号（二选一）
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.cancelShippingRequest'
      produces:
      - application/json
      responses:
        "200":
          description: 成功
          schema:
            $ref: '#/definitions/app.cancelShippingResponse'
        "400":
          description: 参数错误/记录不存在/已处理
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 取消发货申请
      tags:
      - APP端.用户
  /api/app/users/{user_id}/inventory/redeem:
    post:
      consumes:
      - application/json
      description: 将资产按规则转换为积分，成功后资产不可再发货；默认兑换比率来自系统配置`points_exchange_per_cent`
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数：资产ID
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.redeemInventoryRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.redeemInventoryResponse'
        "400":
          description: 参数错误/资产不可用
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 资产兑换为积分
      tags:
      - APP端.用户
  /api/app/users/{user_id}/inventory/request-shipping:
    post:
      consumes:
      - application/json
      description: 用户已有默认地址时，申请对指定资产发货；幂等校验已存在发货记录时返回已处理
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数：资产ID
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.requestShippingRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.requestShippingResponse'
        "400":
          description: 参数错误/未设置默认地址/已处理
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 申请发货
      tags:
      - APP端.用户
  /api/app/users/{user_id}/inventory/request-shipping-batch:
    post:
      consumes:
      - application/json
      description: 为多个资产申请发货，校验所有权与状态；幂等：已申请的资产跳过
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数：资产ID列表与可选地址ID
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.requestShippingBatchRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.requestShippingBatchResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 批量申请发货
      tags:
      - APP端.用户
  /api/app/users/{user_id}/invites:
    get:
      consumes:
      - application/json
      description: 查看被该用户邀请的用户列表
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listInvitesResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看用户邀请记录
      tags:
      - APP端.用户
  /api/app/users/{user_id}/item_cards:
    get:
      consumes:
      - application/json
      description: 获取指定用户的道具卡列表，支持分页和状态过滤
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 页码，默认1
        in: query
        name: page
        type: integer
      - description: 每页条数，默认10
        in: query
        name: page_size
        type: integer
      - description: 状态：1未使用 2已使用 3已过期，不传默认1
        in: query
        name: status
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listUserItemCardsResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: 未授权
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取用户道具卡列表
      tags:
      - APP端.用户
  /api/app/users/{user_id}/item_cards/uses:
    get:
      consumes:
      - application/json
      description: 获取指定用户的道具卡使用记录，支持分页
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 页码，默认1
        in: query
        name: page
        type: integer
      - description: 每页条数，默认10
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listUserItemCardUsesResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: 未授权
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取用户道具卡使用记录
      tags:
      - APP端.用户
  /api/app/users/{user_id}/orders:
    get:
      consumes:
      - application/json
      description: 查看用户抽奖来源订单记录
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      - description: 订单状态：1待支付 2已支付 3已取消 4已退款
        in: query
        name: status
        type: integer
      - description: 是否已消耗/履约：0否 1是
        in: query
        name: is_consumed
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listOrdersResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看用户订单记录
      tags:
      - APP端.用户
  /api/app/users/{user_id}/phone/bind:
    post:
      consumes:
      - application/json
      description: 使用微信手机号 code 换取手机号并绑定到指定用户
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.bindPhoneRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.bindPhoneResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 绑定手机号
      tags:
      - APP端.用户
  /api/app/users/{user_id}/points:
    get:
      consumes:
      - application/json
      description: 查看用户积分流水记录
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - default: 1
        description: 页码
        in: query
        name: page
        required: true
        type: integer
      - default: 20
        description: 每页数量，最多100
        in: query
        name: page_size
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listPointsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看用户积分记录
      tags:
      - APP端.用户
  /api/app/users/{user_id}/points/balance:
    get:
      consumes:
      - application/json
      description: 查看用户积分余额（过滤过期积分）
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.pointsBalanceResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 查看用户积分余额
      tags:
      - APP端.用户
  /api/app/users/{user_id}/points/redeem-coupon:
    post:
      consumes:
      - application/json
      description: 使用积分兑换指定直减金额券，按比率 1积分=1元（券面值为分）
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.redeemCouponRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.redeemCouponResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 积分兑换优惠券
      tags:
      - APP端.积分
  /api/app/users/{user_id}/points/redeem-item-card:
    post:
      consumes:
      - application/json
      description: 使用积分兑换指定数量的道具卡
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 兑换请求参数
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/app.redeemItemCardRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.redeemItemCardResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 积分兑换道具卡
      tags:
      - APP端.用户
  /api/app/users/{user_id}/points/redeem-product:
    post:
      consumes:
      - application/json
      description: 使用积分按比率1积分=1元兑换商品，生成系统发放订单与用户资产
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.redeemProductRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.redeemProductResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 积分兑换商品
      tags:
      - APP端.积分
  /api/app/users/{user_id}/shipments:
    get:
      consumes:
      - application/json
      description: 按运单号聚合用户的发货记录，支持分页
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      - description: 页码，默认1
        in: query
        name: page
        type: integer
      - description: 每页数量，最多100，默认20
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.listShipmentsResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取用户发货分组列表
      tags:
      - APP端.发货
  /api/app/users/{user_id}/stats:
    get:
      consumes:
      - application/json
      description: 返回当前登录用户的道具卡数量、优惠券数量、积分余额
      parameters:
      - description: 用户ID
        in: path
        name: user_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.userStatsResponse'
        "400":
          description: 参数错误
          schema:
            $ref: '#/definitions/code.Failure'
        "401":
          description: 未授权
          schema:
            $ref: '#/definitions/code.Failure'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取用户统计
      tags:
      - APP端.用户
  /api/app/users/douyin/login:
    post:
      consumes:
      - application/json
      description: 抖音小程序登录（需传递 code 或 anonymous_code）
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.douyinLoginRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.douyinLoginResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 抖音登录
      tags:
      - APP端.用户
  /api/app/users/profile:
    get:
      consumes:
      - application/json
      description: 获取当前登录用户的详细信息
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.userItem'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 获取用户信息
      tags:
      - APP端.用户
  /api/app/users/weixin/login:
    post:
      consumes:
      - application/json
      description: 微信静默登录（需传递 code；可选 invite_code）
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/app.weixinLoginRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/app.weixinLoginResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      summary: 微信登录
      tags:
      - APP端.用户
  /api/role/list:
    get:
      consumes:
      - application/json
      parameters:
      - default: 1
        description: 页码
        in: query
        name: current
        required: true
        type: integer
      - default: 20
        description: 每页数量
        in: query
        name: size
        required: true
        type: integer
      - description: 角色名称
        in: query
        name: roleName
        type: string
      - description: 角色编码
        in: query
        name: roleCode
        type: string
      - description: 是否启用
        in: query
        name: enabled
        type: boolean
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.roleListResponse'
      security:
      - LoginVerifyToken: []
      summary: 角色列表
      tags:
      - 管理端.系统
  /api/user:
    post:
      consumes:
      - application/json
      description: 创建新的管理员账号
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/admin.createUserRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.createUserResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/code.Failure'
      security:
      - LoginVerifyToken: []
      summary: 创建系统用户
      tags:
      - 管理端.系统
  /api/user/list:
    get:
      consumes:
      - application/json
      description: 返回系统用户分页数据
      parameters:
      - default: 1
        description: 页码
        in: query
        name: current
        required: true
        type: integer
      - default: 20
        description: 每页数量
        in: query
        name: size
        required: true
        type: integer
      - description: 用户名
        in: query
        name: userName
        type: string
      - description: 邮箱
        in: query
        name: userEmail
        type: string
      - description: 手机号
        in: query
        name: userPhone
        type: string
      - description: 状态
        in: query
        name: status
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/admin.userListResponse'
      security:
      - LoginVerifyToken: []
      summary: 系统用户列表
      tags:
      - 管理端.系统
  /api/v3/system/menus/simple:
    get:
      responses: {}
  /common/upload/wangeditor:
    post:
      consumes:
      - multipart/form-data
      description: 适配 WangEditor 的图片上传接口
      parameters:
      - description: 图片文件
        in: formData
        name: file
        required: true
        type: file
      produces:
      - application/json
      responses:
        "200":
          description: 上传成功
          schema:
            additionalProperties: true
            type: object
        "400":
          description: 上传失败
          schema:
            additionalProperties: true
            type: object
      summary: WangEditor图片上传
      tags:
      - Common
  /internal/game/consume-ticket:
    post:
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/game.consumeTicketRequest'
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/game.consumeTicketResponse'
      summary: 扣减游戏次数
      tags:
      - Internal.游戏
  /internal/game/minesweeper/config:
    get:
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
      summary: 获取扫雷配置
      tags:
      - Internal.游戏
  /internal/game/settle:
    post:
      consumes:
      - application/json
      description: 游戏结束后结算并发放奖励
      parameters:
      - description: 结算信息
        in: body
        name: result
        required: true
        schema:
          $ref: '#/definitions/minesweeper.SettleGameRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/minesweeper.SettleGameResponse'
      summary: 结算游戏
      tags:
      - Internal
  /internal/game/validate-token:
    post:
      parameters:
      - description: 请求参数
        in: body
        name: RequestBody
        required: true
        schema:
          $ref: '#/definitions/game.validateTokenRequest'
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/game.validateTokenResponse'
      summary: 验证GameToken
      tags:
      - Internal.游戏
  /internal/game/verify:
    post:
      consumes:
      - application/json
      description: 验证游戏票据是否有效
      parameters:
      - description: 票据信息
        in: body
        name: ticket
        required: true
        schema:
          $ref: '#/definitions/minesweeper.VerifyTicketRequest'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/minesweeper.VerifyTicketResponse'
      summary: 验证游戏票据
      tags:
      - Internal
  /pay/wechat/notify:
    post:
      consumes:
      - application/json
      description: 接收微信支付结果通知，验证签名并处理订单状态
      produces:
      - application/json
      responses:
        "200":
          description: 处理成功
          schema:
            $ref: '#/definitions/pay.notifyAck'
        "400":
          description: 请求参数错误
          schema:
            $ref: '#/definitions/pay.notifyAck'
        "500":
          description: 服务器内部错误
          schema:
            $ref: '#/definitions/pay.notifyAck'
      summary: 微信支付回调通知
      tags:
      - Pay
securityDefinitions:
  LoginVerifyToken:
    in: header
    name: Authorization
    type: apiKey
swagger: "2.0"
