503 lines
10 KiB
Protocol Buffer
503 lines
10 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package cloudprint;
|
|
|
|
option go_package = "github.com/cloudprint/cloudprint-backend/proto/generated";
|
|
|
|
import "google/protobuf/empty.proto";
|
|
import "google/protobuf/timestamp.proto";
|
|
|
|
// ============ 通用消息 ============
|
|
|
|
message Empty {}
|
|
|
|
message StatusResponse {
|
|
int32 code = 1;
|
|
string message = 2;
|
|
}
|
|
|
|
// ============ 用户相关 ============
|
|
|
|
message User {
|
|
int32 id = 1;
|
|
string openid = 2;
|
|
string nickname = 3;
|
|
string avatar = 4;
|
|
double balance = 5;
|
|
google.protobuf.Timestamp created_at = 6;
|
|
}
|
|
|
|
message LoginRequest {
|
|
string code = 1; // 微信授权码
|
|
}
|
|
|
|
message LoginResponse {
|
|
string access_token = 1;
|
|
string refresh_token = 2;
|
|
User user = 3;
|
|
}
|
|
|
|
message RefreshRequest {
|
|
string refresh_token = 1;
|
|
}
|
|
|
|
message RefreshResponse {
|
|
string access_token = 1;
|
|
}
|
|
|
|
message GetUserInfoRequest {}
|
|
|
|
message UpdateUserRequest {
|
|
string nickname = 1;
|
|
string avatar = 2;
|
|
}
|
|
|
|
// ============ 文件相关 ============
|
|
|
|
message FileInfo {
|
|
int32 id = 1;
|
|
string file_name = 2;
|
|
string file_path = 3;
|
|
string file_type = 4;
|
|
int64 file_size = 5;
|
|
string uploader_type = 6;
|
|
int32 uploader_id = 7;
|
|
google.protobuf.Timestamp created_at = 8;
|
|
}
|
|
|
|
message UploadRequest {
|
|
string file_name = 1;
|
|
string file_type = 2;
|
|
int64 file_size = 3;
|
|
bytes data = 4;
|
|
bool is_last_chunk = 5;
|
|
string chunk_id = 6;
|
|
int32 chunk_index = 7;
|
|
int32 total_chunks = 8;
|
|
}
|
|
|
|
message UploadResponse {
|
|
int32 file_id = 1;
|
|
string file_path = 2;
|
|
string file_url = 3;
|
|
}
|
|
|
|
message GetFileRequest {
|
|
int32 file_id = 1;
|
|
}
|
|
|
|
message FileData {
|
|
bytes data = 1;
|
|
bool is_last = 2;
|
|
}
|
|
|
|
message DeleteFileRequest {
|
|
int32 file_id = 1;
|
|
}
|
|
|
|
message WatermarkRequest {
|
|
int32 file_id = 1;
|
|
string text = 2;
|
|
float opacity = 3;
|
|
int32 position = 4; // 1: 左上 2: 右上 3: 左下 4: 右下 5: 居中
|
|
int32 font_size = 5;
|
|
}
|
|
|
|
message WatermarkResponse {
|
|
int32 file_id = 1;
|
|
string file_path = 2;
|
|
}
|
|
|
|
message GetFileListRequest {
|
|
string uploader_type = 1;
|
|
int32 uploader_id = 2;
|
|
int32 page = 3;
|
|
int32 page_size = 4;
|
|
}
|
|
|
|
message FileListResponse {
|
|
repeated FileInfo files = 1;
|
|
int32 total = 2;
|
|
}
|
|
|
|
// ============ 订单相关 ============
|
|
|
|
message Order {
|
|
int32 id = 1;
|
|
string order_no = 2;
|
|
int32 user_id = 3;
|
|
int32 status = 4;
|
|
double total_amount = 5;
|
|
string remark = 6;
|
|
google.protobuf.Timestamp created_at = 7;
|
|
google.protobuf.Timestamp paid_at = 8;
|
|
repeated OrderItem items = 9;
|
|
}
|
|
|
|
message OrderItem {
|
|
int32 id = 1;
|
|
int32 order_id = 2;
|
|
int32 file_id = 3;
|
|
FileInfo file = 4;
|
|
int32 printer_id = 5;
|
|
int32 copies = 6;
|
|
bool color = 7;
|
|
bool duplex = 8;
|
|
string page_range = 9;
|
|
double price = 10;
|
|
}
|
|
|
|
message CreateOrderRequest {
|
|
repeated CreateOrderItem items = 1;
|
|
string remark = 2;
|
|
}
|
|
|
|
message CreateOrderItem {
|
|
int32 file_id = 1;
|
|
int32 printer_id = 2;
|
|
int32 copies = 3;
|
|
bool color = 4;
|
|
bool duplex = 5;
|
|
string page_range = 6;
|
|
}
|
|
|
|
message CreateOrderResponse {
|
|
string order_no = 1;
|
|
double total_amount = 2;
|
|
}
|
|
|
|
message GetOrderRequest {
|
|
string order_no = 1;
|
|
}
|
|
|
|
message GetOrderListRequest {
|
|
int32 user_id = 1;
|
|
int32 status = 2;
|
|
int32 page = 3;
|
|
int32 page_size = 4;
|
|
}
|
|
|
|
message OrderListResponse {
|
|
repeated Order orders = 1;
|
|
int32 total = 2;
|
|
}
|
|
|
|
message UpdateOrderStatusRequest {
|
|
string order_no = 1;
|
|
int32 status = 2;
|
|
}
|
|
|
|
message CancelOrderRequest {
|
|
string order_no = 1;
|
|
}
|
|
|
|
// ============ 打印机相关 ============
|
|
|
|
message Printer {
|
|
int32 id = 1;
|
|
string name = 2;
|
|
string display_name = 3;
|
|
bool is_active = 4;
|
|
int32 status = 5; // 0: 空闲 1: 打印中 2: 离线
|
|
google.protobuf.Timestamp last_heartbeat = 6;
|
|
}
|
|
|
|
message GetPrintersRequest {}
|
|
|
|
message PrinterListResponse {
|
|
repeated Printer printers = 1;
|
|
}
|
|
|
|
message GetPrinterStatusRequest {
|
|
int32 printer_id = 1;
|
|
}
|
|
|
|
message PrinterStatusResponse {
|
|
Printer printer = 1;
|
|
int32 queue_count = 2;
|
|
}
|
|
|
|
message RegisterPrinterRequest {
|
|
string name = 1;
|
|
string display_name = 2;
|
|
string api_key = 3;
|
|
}
|
|
|
|
message RegisterPrinterResponse {
|
|
int32 printer_id = 1;
|
|
string token = 2;
|
|
}
|
|
|
|
message PrinterHeartbeatRequest {
|
|
int32 printer_id = 1;
|
|
int32 status = 2;
|
|
string token = 3;
|
|
}
|
|
|
|
// ============ 打印任务相关 ============
|
|
|
|
message PrintJob {
|
|
int32 id = 1;
|
|
string job_no = 2;
|
|
int32 printer_id = 3;
|
|
int32 order_item_id = 4;
|
|
string status = 5; // pending/printing/completed/failed/cancelled
|
|
int32 progress = 6;
|
|
string error_msg = 7;
|
|
google.protobuf.Timestamp started_at = 8;
|
|
google.protobuf.Timestamp completed_at = 9;
|
|
OrderItem order_item = 10;
|
|
}
|
|
|
|
message SubmitPrintJobRequest {
|
|
int32 order_item_id = 1;
|
|
int32 printer_id = 2;
|
|
string file_path = 3;
|
|
int32 copies = 4;
|
|
bool color = 5;
|
|
bool duplex = 6;
|
|
string page_range = 7;
|
|
}
|
|
|
|
message SubmitPrintJobResponse {
|
|
string job_no = 1;
|
|
}
|
|
|
|
message CancelPrintJobRequest {
|
|
string job_no = 1;
|
|
}
|
|
|
|
message SubscribeJobsRequest {
|
|
int32 printer_id = 1;
|
|
string token = 2;
|
|
}
|
|
|
|
message ReportJobStatusRequest {
|
|
string job_no = 1;
|
|
string status = 2;
|
|
int32 progress = 3;
|
|
string error_msg = 4;
|
|
}
|
|
|
|
// ============ 文库相关 ============
|
|
|
|
message LibraryCategory {
|
|
int32 id = 1;
|
|
string name = 2;
|
|
string icon = 3;
|
|
int32 sort_order = 4;
|
|
}
|
|
|
|
message LibraryFile {
|
|
int32 id = 1;
|
|
int32 category_id = 2;
|
|
int32 file_id = 3;
|
|
string title = 4;
|
|
string description = 5;
|
|
int32 page_count = 6;
|
|
int32 download_count = 7;
|
|
FileInfo file = 8;
|
|
google.protobuf.Timestamp created_at = 9;
|
|
}
|
|
|
|
message GetCategoriesRequest {}
|
|
|
|
message CategoryListResponse {
|
|
repeated LibraryCategory categories = 1;
|
|
}
|
|
|
|
message GetLibraryFilesRequest {
|
|
int32 category_id = 1;
|
|
int32 page = 2;
|
|
int32 page_size = 3;
|
|
}
|
|
|
|
message LibraryFileListResponse {
|
|
repeated LibraryFile files = 1;
|
|
int32 total = 2;
|
|
}
|
|
|
|
message UploadLibraryFileRequest {
|
|
int32 category_id = 1;
|
|
string title = 2;
|
|
string description = 3;
|
|
bytes data = 4;
|
|
string file_name = 5;
|
|
string file_type = 6;
|
|
}
|
|
|
|
message UploadLibraryFileResponse {
|
|
int32 library_file_id = 1;
|
|
}
|
|
|
|
message DeleteLibraryFileRequest {
|
|
int32 library_file_id = 1;
|
|
}
|
|
|
|
// ============ 价目表相关 ============
|
|
|
|
message PriceItem {
|
|
int32 id = 1;
|
|
string name = 2;
|
|
string type = 3;
|
|
double price = 4;
|
|
string unit = 5;
|
|
bool color_enabled = 6;
|
|
bool is_active = 7;
|
|
}
|
|
|
|
message GetPriceListRequest {}
|
|
|
|
message PriceListResponse {
|
|
repeated PriceItem items = 1;
|
|
}
|
|
|
|
message CreatePriceItemRequest {
|
|
string name = 1;
|
|
string type = 2;
|
|
double price = 3;
|
|
string unit = 4;
|
|
bool color_enabled = 5;
|
|
}
|
|
|
|
message UpdatePriceItemRequest {
|
|
int32 id = 1;
|
|
string name = 2;
|
|
string type = 3;
|
|
double price = 4;
|
|
string unit = 5;
|
|
bool color_enabled = 6;
|
|
bool is_active = 7;
|
|
}
|
|
|
|
// ============ 支付相关 ============
|
|
|
|
message WxPayRequest {
|
|
string order_no = 1;
|
|
double amount = 2;
|
|
string description = 3;
|
|
string openid = 4;
|
|
string client_ip = 5;
|
|
}
|
|
|
|
message WxPayResponse {
|
|
string prepay_id = 1;
|
|
string code_url = 2;
|
|
string mweb_url = 3;
|
|
}
|
|
|
|
message QueryPayStatusRequest {
|
|
string order_no = 1;
|
|
}
|
|
|
|
message PayStatusResponse {
|
|
int32 status = 1; // 0: 待支付 1: 支付中 2: 成功 3: 失败
|
|
string transaction_id = 2;
|
|
}
|
|
|
|
message PayCallbackRequest {
|
|
string body = 1;
|
|
}
|
|
|
|
message PayCallbackResponse {
|
|
string return_code = 1;
|
|
string return_msg = 2;
|
|
}
|
|
|
|
message PayByBalanceRequest {
|
|
string order_no = 1;
|
|
int32 user_id = 2;
|
|
}
|
|
|
|
// ============ 管理后台相关 ============
|
|
|
|
message Admin {
|
|
int32 id = 1;
|
|
string username = 2;
|
|
string nickname = 3;
|
|
int32 role = 4;
|
|
google.protobuf.Timestamp created_at = 5;
|
|
}
|
|
|
|
message AdminLoginRequest {
|
|
string username = 1;
|
|
string password = 2;
|
|
}
|
|
|
|
message AdminLoginResponse {
|
|
string access_token = 1;
|
|
Admin admin = 2;
|
|
}
|
|
|
|
message GetStatisticsRequest {}
|
|
|
|
message Statistics {
|
|
int32 total_users = 1;
|
|
int32 total_orders = 2;
|
|
int32 today_orders = 3;
|
|
double today_revenue = 4;
|
|
int32 pending_orders = 5;
|
|
int32 active_printers = 6;
|
|
}
|
|
|
|
// ============ 服务定义 ============
|
|
|
|
service AuthService {
|
|
rpc Login(LoginRequest) returns (LoginResponse);
|
|
rpc RefreshToken(RefreshRequest) returns (RefreshResponse);
|
|
rpc GetUserInfo(GetUserInfoRequest) returns (User);
|
|
rpc UpdateUser(UpdateUserRequest) returns (User);
|
|
}
|
|
|
|
service FileService {
|
|
rpc Upload(stream UploadRequest) returns (UploadResponse);
|
|
rpc GetFile(GetFileRequest) returns (stream FileData);
|
|
rpc DeleteFile(DeleteFileRequest) returns (Empty);
|
|
rpc AddWatermark(WatermarkRequest) returns (WatermarkResponse);
|
|
rpc GetFileList(GetFileListRequest) returns (FileListResponse);
|
|
}
|
|
|
|
service OrderService {
|
|
rpc CreateOrder(CreateOrderRequest) returns (CreateOrderResponse);
|
|
rpc GetOrder(GetOrderRequest) returns (Order);
|
|
rpc GetOrderList(GetOrderListRequest) returns (OrderListResponse);
|
|
rpc UpdateOrderStatus(UpdateOrderStatusRequest) returns (Empty);
|
|
rpc CancelOrder(CancelOrderRequest) returns (Empty);
|
|
}
|
|
|
|
service PrintService {
|
|
rpc GetPrinters(GetPrintersRequest) returns (PrinterListResponse);
|
|
rpc GetPrinterStatus(GetPrinterStatusRequest) returns (PrinterStatusResponse);
|
|
rpc RegisterPrinter(RegisterPrinterRequest) returns (RegisterPrinterResponse);
|
|
rpc PrinterHeartbeat(PrinterHeartbeatRequest) returns (Empty);
|
|
rpc SubmitPrintJob(SubmitPrintJobRequest) returns (SubmitPrintJobResponse);
|
|
rpc CancelPrintJob(CancelPrintJobRequest) returns (Empty);
|
|
rpc SubscribeJobs(SubscribeJobsRequest) returns (stream PrintJob);
|
|
rpc ReportJobStatus(ReportJobStatusRequest) returns (Empty);
|
|
}
|
|
|
|
service LibraryService {
|
|
rpc GetCategories(GetCategoriesRequest) returns (CategoryListResponse);
|
|
rpc GetFiles(GetLibraryFilesRequest) returns (LibraryFileListResponse);
|
|
rpc UploadFile(stream UploadLibraryFileRequest) returns (UploadLibraryFileResponse);
|
|
rpc DeleteFile(DeleteLibraryFileRequest) returns (Empty);
|
|
}
|
|
|
|
service PriceService {
|
|
rpc GetPriceList(GetPriceListRequest) returns (PriceListResponse);
|
|
rpc CreatePriceItem(CreatePriceItemRequest) returns (PriceItem);
|
|
rpc UpdatePriceItem(UpdatePriceItemRequest) returns (PriceItem);
|
|
}
|
|
|
|
service PayService {
|
|
rpc CreateWxPayOrder(WxPayRequest) returns (WxPayResponse);
|
|
rpc QueryPayStatus(QueryPayStatusRequest) returns (PayStatusResponse);
|
|
rpc HandlePayCallback(PayCallbackRequest) returns (PayCallbackResponse);
|
|
rpc PayByBalance(PayByBalanceRequest) returns (StatusResponse);
|
|
}
|
|
|
|
service AdminService {
|
|
rpc Login(AdminLoginRequest) returns (AdminLoginResponse);
|
|
rpc GetStatistics(GetStatisticsRequest) returns (Statistics);
|
|
}
|