syntax = "v1"

import "common.api"

info (
	title:   "聚玩订单服务"
	desc:    "处理订单业务。ID 字段（int64）以 string 传输"
	author:  "Asadz"
	version: "1.0"
)

type (
	PathId {
		Id int64 `path:"id"`
	}
	PlayerService {
		Id           int64    `json:"id,string"`
		PlayerId     int64    `json:"playerId,string"`
		GameId       int64    `json:"gameId,string"`
		GameName     string   `json:"gameName"`
		Title        string   `json:"title"`
		Description  string   `json:"description"`
		Price        float64  `json:"price"`
		Unit         string   `json:"unit"`
		RankRange    string   `json:"rankRange,optional"`
		Availability []string `json:"availability"`
	}
	Order {
		Id          int64         `json:"id,string"`
		ConsumerId  int64         `json:"consumerId,string"`
		PlayerId    string        `json:"playerId"`
		ShopId      int64         `json:"shopId,string,optional"`
		Service     PlayerService `json:"service"`
		Status      string        `json:"status"`
		TotalPrice  float64       `json:"totalPrice"`
		Note        string        `json:"note,optional"`
		CreatedAt   string        `json:"createdAt"`
		AcceptedAt  string        `json:"acceptedAt,optional"`
		CompletedAt string        `json:"completedAt,optional"`
	}
	OrderListReq {
		PageReq
		Role   string `form:"role"` // consumer, player, owner
		Status string `form:"status,optional"`
	}
	OrderListResp {
		Items []Order  `json:"items"`
		Meta  PageMeta `json:"meta"`
	}
	CreateOrderReq {
		PlayerId  int64  `json:"playerId,string"`
		ShopId    int64  `json:"shopId,string,optional"`
		ServiceId int64  `json:"serviceId,string"`
		Quantity  int    `json:"quantity"`
		Note      string `json:"note,optional"`
	}
	CreateOrderResp {
		Ok    bool  `json:"ok"`
		Order Order `json:"order"`
	}
)

@server (
	prefix: api/v1/orders
	group:  order
)
service order-api {
	@doc "获取订单列表"
	@handler ListOrders
	get / (OrderListReq) returns (OrderListResp)

	@doc "获取订单详情"
	@handler GetOrder
	get /:id (PathId) returns (Order)

	@doc "创建订单"
	@handler CreateOrder
	post / (CreateOrderReq) returns (CreateOrderResp)

	@doc "创建并支付订单"
	@handler CreateAndPayOrder
	post /paid (CreateOrderReq) returns (CreateOrderResp)

	@doc "支付订单"
	@handler PayOrder
	post /:id/pay (PathId) returns (EmptyResp)

	@doc "接单"
	@handler AcceptOrder
	post /:id/accept (PathId) returns (EmptyResp)

	@doc "申请结算"
	@handler RequestCloseOrder
	post /:id/request-close (PathId) returns (EmptyResp)

	@doc "确认结算"
	@handler ConfirmCloseOrder
	post /:id/confirm-close (PathId) returns (EmptyResp)

	@doc "取消订单"
	@handler CancelOrder
	post /:id/cancel (PathId) returns (EmptyResp)

	@doc "再来一单"
	@handler Reorder
	post /:id/reorder (PathId) returns (CreateOrderResp)
}

