syntax = "v1"

info (
    title: "Test All Parameter Types"
    version: "v1"
)

type (
    // 同時包含所有類型的參數
    AllParamsReq {
        // Header 參數
        Authorization string `header:"Authorization" validate:"required"`
        XRequestID    string `header:"X-Request-ID,optional"`
        
        // Path 參數
        UserID string `path:"userId" validate:"required"`
        ItemID string `path:"itemId" validate:"required"`
        
        // Query 參數 (form)
        Page     int    `form:"page,optional"`
        PageSize int    `form:"pageSize,optional"`
        Filter   string `form:"filter,optional"`
        
        // JSON Body 參數
        Name        string `json:"name" validate:"required"`
        Description string `json:"description,optional"`
        Tags        []string `json:"tags,optional"`
    }
    
    Response {
        Message string `json:"message"`
        Data    interface{} `json:"data,omitempty"`
    }
)

@server (
    prefix: /api/v1
)
service test {
    // 測試所有參數類型同時存在
    @handler UpdateWithAllParams
    put /users/:userId/items/:itemId (AllParamsReq) returns (Response)
    
    // 測試只有 path + query
    @handler GetWithPathQuery
    get /users/:userId/items/:itemId (AllParamsReq) returns (Response)
    
    // 測試 path + header + body (POST)
    @handler CreateWithPathHeaderBody
    post /users/:userId/items (AllParamsReq) returns (Response)
}
