Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ProductService

商品管理服务,负责商品的 CRUD、批量操作、上游供应商产品同步与导入、批量定价。

RPC 列表

RPC描述权限
CreateProduct创建商品admin
ListProducts商品列表(分页+多维筛选)公开
GetProduct获取商品详情公开
UpdateProduct更新商品信息admin
DeleteProduct删除商品admin
SyncProducts从 Provider 接口同步产品admin
BatchSetActive批量启用/禁用商品admin
BatchSetGroup批量设置商品分组admin
BatchDelete批量删除商品admin
ImportUpstreamProducts从上游导入商品admin
BatchUpdatePrice批量按比例更新价格admin

CreateProduct

描述

创建一个新商品。

Request — CreateProductRequest

字段类型编号必填描述
namestring1商品名称
descriptionstring2商品描述
price_per_monthstring9月度价格(字符串金额)
interface_idstring10关联的 Provider 接口 ID(UUID)
specsmap<string,string>12动态规格键值对
group_idstring?13商品分组 ID(UUID)
billing_cyclesmap<string,string>14多周期定价,如 {"monthly":"50.00","quarterly":"140.00"}
cost_pricestring15成本价(字符串金额)

Response — CreateProductResponse

字段类型编号描述
productProductInfo1创建的商品信息

错误码

错误说明
InvalidArgument参数校验失败
NotFound指定的 interface_id 不存在
PermissionDenied非 admin 用户

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"name":"VPS-1C2G","description":"1核2G VPS","price_per_month":"29.00","interface_id":"0192a123-...","specs":{"region":"us-west","cpu":"1","memory":"2"},"billing_cycles":{"monthly":"29.00","yearly":"290.00"}}' \
  localhost:50051 rustbill.product.ProductService/CreateProduct
const resp = await api.createProduct({
  name: "VPS-1C2G",
  description: "1核2G VPS",
  price_per_month: "29.00",
  interface_id: "0192a123-...",
  specs: { region: "us-west", cpu: "1", memory: "2" },
  billing_cycles: { monthly: "29.00", yearly: "290.00" }
});

ListProducts

描述

分页查询商品列表,支持按接口、地域、状态、关键词、分组、分类筛选。

Request — ListProductsRequest

字段类型编号必填描述
paginationPageRequest1分页参数
interface_idstring?2按 Provider 接口过滤
regionstring?3按地域过滤(匹配 specs.region
is_activebool?4按启用状态过滤
searchstring?5名称关键词搜索
group_idstring?6按分组过滤
category_idstring?8按分类过滤

Response — ListProductsResponse

字段类型编号描述
productsrepeated ProductInfo1商品列表
metaPageMeta2分页元数据

示例

grpcurl -plaintext \
  -d '{"pagination":{"page":1,"page_size":12},"region":"us-west","is_active":true}' \
  localhost:50051 rustbill.product.ProductService/ListProducts
const resp = await api.listProducts({
  pagination: { page: 1, page_size: 12 },
  region: "us-west",
  is_active: true
});

GetProduct

描述

获取单个商品详情。

Request — GetProductRequest

字段类型编号必填描述
idstring1商品 ID(UUID)

Response — GetProductResponse

字段类型编号描述
productProductInfo1商品信息

错误码

错误说明
NotFound商品不存在

示例

grpcurl -plaintext \
  -d '{"id":"0192a123-4567-7890-abcd-ef0123456789"}' \
  localhost:50051 rustbill.product.ProductService/GetProduct

UpdateProduct

描述

更新商品信息。所有字段均可选,仅更新传入的字段。

Request — UpdateProductRequest

字段类型编号必填描述
idstring1商品 ID
namestring?2商品名称
descriptionstring?3商品描述
price_per_monthstring?4月度价格
is_activebool?5启用状态
specsmap<string,string>6动态规格(完全替换)
group_idstring?7商品分组
billing_cyclesmap<string,string>8多周期定价(完全替换)
cost_pricestring?9成本价

Response — UpdateProductResponse

字段类型编号描述
productProductInfo1更新后的商品信息

错误码

错误说明
NotFound商品不存在
InvalidArgument参数校验失败
PermissionDenied非 admin 用户

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"id":"0192a123-...","price_per_month":"35.00","is_active":false}' \
  localhost:50051 rustbill.product.ProductService/UpdateProduct

DeleteProduct

描述

删除指定商品。

Request — DeleteProductRequest

字段类型编号必填描述
idstring1商品 ID(UUID)

Response — DeleteProductResponse

无字段。

错误码

错误说明
NotFound商品不存在
PermissionDenied非 admin 用户

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"id":"0192a123-4567-7890-abcd-ef0123456789"}' \
  localhost:50051 rustbill.product.ProductService/DeleteProduct

SyncProducts

描述

从指定 Provider 接口同步商品列表。调用 Provider 插件的 sync_products() 函数,返回上游商品并创建本地商品记录。

Request — SyncProductsRequest

字段类型编号必填描述
interface_idstring1Provider 接口 ID(UUID)
group_idstring2同步后归入的分组 ID

Response — SyncProductsResponse

字段类型编号描述
syncedrepeated ProductInfo1同步后的商品列表
countuint322同步数量

错误码

错误说明
NotFound接口不存在或已禁用
InternalProvider 插件执行失败
PermissionDenied非 admin 用户

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"interface_id":"0192a123-...","group_id":"0192b456-..."}' \
  localhost:50051 rustbill.product.ProductService/SyncProducts

BatchSetActive

描述

批量启用或禁用商品。

Request — BatchSetActiveRequest

字段类型编号必填描述
product_idsrepeated string1商品 ID 列表
is_activebool2目标启用状态

Response — BatchSetActiveResponse

字段类型编号描述
updated_countuint321实际更新的商品数量

错误码

错误说明
InvalidArgumentproduct_ids 为空
PermissionDenied非 admin 用户

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"product_ids":["id1","id2","id3"],"is_active":true}' \
  localhost:50051 rustbill.product.ProductService/BatchSetActive

BatchSetGroup

描述

批量将商品归入指定分组。group_id 为空字符串时取消分组。

Request — BatchSetGroupRequest

字段类型编号必填描述
product_idsrepeated string1商品 ID 列表
group_idstring2目标分组 ID(空字符串=取消分组)

Response — BatchSetGroupResponse

字段类型编号描述
updated_countuint321实际更新的商品数量

错误码

错误说明
InvalidArgumentproduct_ids 为空
PermissionDenied非 admin 用户

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"product_ids":["id1","id2"],"group_id":"0192b456-..."}' \
  localhost:50051 rustbill.product.ProductService/BatchSetGroup

BatchDelete

描述

批量删除商品。

Request — BatchDeleteRequest

字段类型编号必填描述
product_idsrepeated string1商品 ID 列表

Response — BatchDeleteResponse

字段类型编号描述
deleted_countuint321实际删除的商品数量

错误码

错误说明
InvalidArgumentproduct_ids 为空
PermissionDenied非 admin 用户

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"product_ids":["id1","id2"]}' \
  localhost:50051 rustbill.product.ProductService/BatchDelete

ImportUpstreamProducts

描述

将上游商品批量导入本地商品表。配合 IntegrationService/SyncProducts 从上游拉取数据后批量导入。

Request — ImportUpstreamProductsRequest

字段类型编号必填描述
interface_idstring1Provider 接口 ID
itemsrepeated UpstreamProductItem2待导入的商品列表
group_idstring3导入后归入的分组 ID

UpstreamProductItem

字段类型编号描述
namestring1商品名称
descriptionstring2商品描述
specsmap<string,string>3规格键值对
cost_pricestring4成本价

Response — ImportUpstreamProductsResponse

字段类型编号描述
imported_countuint321成功导入数量

错误码

错误说明
InvalidArgumentinterface_id 无效或 items 为空
PermissionDenied非 admin 用户

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"interface_id":"0192a123-...","items":[{"name":"VPS-1C1G","description":"1核1G","specs":{"cpu":"1"},"cost_price":"5.00"}],"group_id":"0192b456-..."}' \
  localhost:50051 rustbill.product.ProductService/ImportUpstreamProducts

BatchUpdatePrice

描述

批量按加价比例更新商品售价。新售价 = 成本价 × markup_ratio。

Request — BatchUpdatePriceRequest

字段类型编号必填描述
product_idsrepeated string1商品 ID 列表
markup_ratiostring2加价比例,如 "1.3" 表示 130%(即加价 30%)

Response — BatchUpdatePriceResponse

字段类型编号描述
updated_countuint321实际更新的商品数量

错误码

错误说明
InvalidArgumentmarkup_ratio 格式无效或 product_ids 为空
PermissionDenied非 admin 用户

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"product_ids":["id1","id2"],"markup_ratio":"1.3"}' \
  localhost:50051 rustbill.product.ProductService/BatchUpdatePrice

公共类型

ProductInfo

字段类型编号描述
idstring1商品 UUID
namestring2商品名称
descriptionstring3商品描述
price_per_monthstring10月度价格(字符串金额)
interface_idstring11关联的 Provider 接口 ID
is_activebool13是否启用
created_atstring14创建时间(RFC3339)
updated_atstring15更新时间(RFC3339)
specsmap<string,string>16动态规格键值对
group_idstring17商品分组 ID
billing_cyclesmap<string,string>18多周期定价映射
cost_pricestring19成本价(字符串金额)

SpecField

定义商品规格模板中的字段,由 Provider 插件提供。

字段类型编号描述
keystring1字段标识符
labelstring2显示标签
field_typestring3字段类型("text" / "number" / "select" / "radio"
requiredbool4是否必填
display_orderuint325显示顺序
optionsrepeated SpecOption6选项列表(select/radio 类型)
minint64?7最小值(number 类型)
maxint64?8最大值(number 类型)
default_valuestring?9默认值
unitstring10单位(如 "GB", "Mbps"
descriptionstring11字段描述
iconstring12图标名称
groupstring13所属分组 key
stepint64?14步长(number 类型)
price_impactPriceImpact15价格影响配置

SpecOption

字段类型编号描述
valuestring1选项值
labelstring2显示标签
iconstring3图标名称
descriptionstring4选项描述
price_modifierstring5价格修正值
disabledbool6是否禁用

SpecGroup

字段类型编号描述
keystring1分组标识符
labelstring2显示标签
iconstring3图标名称
display_orderuint324显示顺序
fieldsrepeated SpecField5包含的字段列表

PriceImpact

字段类型编号描述
modestring1计价模式("add" / "multiply"
amountstring2价格影响金额
currencystring3货币代码