swagger: "2.0"
info:
  title: HY Wallet Service API
  version: "1.0.0"
  description: |
    wallet-service 当前只暴露内部 gRPC + protobuf 接口，没有 HTTP JSON router。
    本文件用 OpenAPI 2.0 记录 gRPC 合约，`paths` 使用 gRPC full method 作为文档路径，不代表真实 HTTP endpoint。
host: localhost:13004
basePath: /
schemes:
  - http
consumes:
  - application/grpc+proto
produces:
  - application/grpc+proto
tags:
  - name: wallet
    description: WalletService，账务扣费接口；当前房间送礼由 room-service 同步调用。
  - name: health
    description: 标准 grpc.health.v1.Health。
responses:
  GRPCError:
    description: gRPC status error；稳定业务原因放在 google.rpc.ErrorInfo.reason。
    schema:
      $ref: "#/definitions/GRPCError"
paths:
  /hyapp.wallet.v1.WalletService/DebitGift:
    post:
      tags:
        - wallet
      summary: 送礼扣费
      operationId: walletDebitGift
      x-grpc-full-method: /hyapp.wallet.v1.WalletService/DebitGift
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/DebitGiftRequest"
      responses:
        "200":
          description: 扣费成功；重复 `command_id` 命中幂等时返回原始扣费回执。
          schema:
            $ref: "#/definitions/DebitGiftResponse"
        default:
          $ref: "#/responses/GRPCError"
  /grpc.health.v1.Health/Check:
    post:
      tags:
        - health
      summary: 标准 gRPC health check
      operationId: walletHealthCheck
      x-grpc-full-method: /grpc.health.v1.Health/Check
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/HealthCheckRequest"
      responses:
        "200":
          description: 标准 health check 响应。
          schema:
            $ref: "#/definitions/HealthCheckResponse"
        default:
          $ref: "#/responses/GRPCError"
  /grpc.health.v1.Health/Watch:
    post:
      tags:
        - health
      summary: 标准 gRPC health watch
      operationId: walletHealthWatch
      x-grpc-full-method: /grpc.health.v1.Health/Watch
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: "#/definitions/HealthCheckRequest"
      responses:
        "200":
          description: 标准 health watch 流式响应；OpenAPI 只记录单条消息结构。
          schema:
            $ref: "#/definitions/HealthCheckResponse"
        default:
          $ref: "#/responses/GRPCError"
definitions:
  DebitGiftRequest:
    type: object
    required:
      - command_id
      - room_id
      - sender_user_id
      - target_user_id
      - gift_id
      - gift_count
    properties:
      command_id:
        type: string
        description: 账务幂等键；room-service 传入房间命令 `command_id`。
      room_id:
        type: string
        description: 礼物发生的房间 ID。
      sender_user_id:
        type: integer
        format: int64
        description: 扣费用户。
      target_user_id:
        type: integer
        format: int64
        description: 礼物接收用户。
      gift_id:
        type: string
      gift_count:
        type: integer
        format: int32
        minimum: 1
      price_version:
        type: string
        description: 指定礼物价格版本；为空时使用当前生效价格。
      region_id:
        type: integer
        format: int64
        description: 房间 visible_region_id，用于校验礼物区域可用性。
  DebitGiftResponse:
    type: object
    properties:
      billing_receipt_id:
        type: string
        description: 扣费回执 ID，room-service 会写入房间礼物事件。
      transaction_id:
        type: string
        description: 钱包交易 ID。
      coin_spent:
        type: integer
        format: int64
        description: 兼容旧调用方的扣费数量；新调用方应优先读取 charge_asset_type 和 charge_amount。
      charge_asset_type:
        type: string
        enum:
          - COIN
          - DIAMOND
        description: 本次实际扣减的资产类型。
      charge_amount:
        type: integer
        format: int64
        description: 本次实际扣减的资产数量。
      gift_point_added:
        type: integer
        format: int64
        description: 本次实际增加的 GIFT_POINT 数量。
      heat_value:
        type: integer
        format: int64
        description: room-service 用于房间热度和榜单的结算值。
      price_version:
        type: string
        description: 本次命中的服务端价格版本。
      balance_after:
        type: integer
        format: int64
        description: 扣费后的发送方被扣费资产余额。
  HealthCheckRequest:
    type: object
    properties:
      service:
        type: string
        description: gRPC health service name；wallet-service 使用 `wallet-service`。
  HealthCheckResponse:
    type: object
    properties:
      status:
        type: string
        enum:
          - UNKNOWN
          - SERVING
          - NOT_SERVING
          - SERVICE_UNKNOWN
  GRPCError:
    type: object
    properties:
      code:
        type: string
        description: gRPC status code，例如 INVALID_ARGUMENT、FAILED_PRECONDITION、UNAVAILABLE。
      message:
        type: string
      error_info_reason:
        type: string
        description: google.rpc.ErrorInfo.reason；账务常见值包括 INSUFFICIENT_BALANCE、DUPLICATE_BILLING_COMMAND、LEDGER_CONFLICT。
