256 lines
7.0 KiB
Protocol Buffer
256 lines
7.0 KiB
Protocol Buffer
syntax = "proto3";
|
||
|
||
package promo;
|
||
|
||
option go_package = "./;pb";
|
||
option php_namespace = "GRPC";
|
||
option php_metadata_namespace = "GRPC\\GPBMetadata";
|
||
|
||
import "google/api/annotations.proto";
|
||
|
||
service PromoService {
|
||
// ListProductsPromotion проверяет наличие акционных цен по товарам
|
||
rpc ListProductsPromotion(ListProductsPromotionRequest) returns (ListProductsPromotionResponse) {
|
||
option (google.api.http) = {
|
||
post: "/ListProductsPromotion"
|
||
body: "*"
|
||
};
|
||
}
|
||
|
||
// GetPromotionsDetails возвращает общую информацию по акциям
|
||
rpc GetPromotionsDetails(GetPromotionsDetailsRequest) returns (GetPromotionsDetailsResponse) {
|
||
option (google.api.http) = {
|
||
post: "/GetPromotionsDetails"
|
||
body: "*"
|
||
};
|
||
}
|
||
|
||
// ListPromotionsV0 список активных акций
|
||
// возвращает список активных акций в порядке приоритета
|
||
// для кажого типа акции может вернуться максимум 2 акции среди которых нужно выбрать первую,
|
||
// которая подходит для текущего типа пользователя.
|
||
// Метод сделан для переходного периода, пока сайт не может получать тип пользователя
|
||
rpc ListPromotionsV0(ListPromotionsV0Request) returns (ListPromotionsV0Response) {
|
||
option deprecated = true;
|
||
option (google.api.http) = {
|
||
post: "/ListPromotionsV0"
|
||
body: "*"
|
||
};
|
||
}
|
||
|
||
// ListPromotionsV1 список активных акций
|
||
// возвращает по одной самой приоритетной акции каждого типа в порядке приоритета
|
||
rpc ListPromotionsV1(ListPromotionsV1Request) returns (ListPromotionsV1Response) {
|
||
option (google.api.http) = {
|
||
post: "/ListPromotionsV1"
|
||
body: "*"
|
||
};
|
||
}
|
||
|
||
// GetPromotionDetails получает общую информацию об акции
|
||
rpc GetPromotionDetails(GetPromotionDetailsRequest) returns (GetPromotionDetailsResponse) {
|
||
option (google.api.http) = {
|
||
post: "/GetPromotionDetails"
|
||
body: "*"
|
||
};
|
||
}
|
||
|
||
// GetPromotionRubrics возвращает список рубрик, в которых есть акционные товары
|
||
rpc GetPromotionRubrics(GetPromotionRubricsRequest) returns (GetPromotionRubricsResponse) {
|
||
option (google.api.http) = {
|
||
post: "/GetPromotionRubrics"
|
||
body: "*"
|
||
};
|
||
}
|
||
|
||
// GetPromotionID возвращает ID акции по ее UUID
|
||
rpc GetPromotionID(GetPromotionIDRequest) returns (GetPromotionIDResponse) {
|
||
option (google.api.http) = {
|
||
post: "/GetPromotionID"
|
||
body: "*"
|
||
};
|
||
}
|
||
|
||
// ListPromotion листинг акции
|
||
rpc ListPromotion(ListPromotionRequest) returns (ListPromotionResponse) {
|
||
option (google.api.http) = {
|
||
post: "/ListPromotion"
|
||
body: "*"
|
||
};
|
||
}
|
||
}
|
||
|
||
message Product {
|
||
string id = 1;
|
||
Price promotion_price = 2;
|
||
// availability_quantity - минимальное из 2х значений:
|
||
// "лимит в заказе" или "максимальное количество товара которое может быть продано по акционной цене"
|
||
float availability_quantity = 3;
|
||
// order_limit - максимальное количество товара в заказе
|
||
int32 order_limit = 4;
|
||
// is_upload_to_feed - выгружать ли товар в фиды
|
||
bool is_upload_to_feed = 5;
|
||
}
|
||
|
||
message Price {
|
||
int64 rubles = 1;
|
||
}
|
||
|
||
enum OrderBy {
|
||
ORDER_BY_UNSPECIFIED = 0;
|
||
ORDER_BY_PROMO_PRICE = 1;
|
||
ORDER_BY_DISCOUNT = 2;
|
||
ORDER_BY_POPULARITY = 3;
|
||
ORDER_BY_RATING = 4;
|
||
ORDER_BY_REVIEWS = 5;
|
||
}
|
||
|
||
enum OrderDirection {
|
||
ORDER_DIRECTION_UNSPECIFIED = 0;
|
||
ORDER_DIRECTION_ASC = 1;
|
||
ORDER_DIRECTION_DESC = 2;
|
||
}
|
||
|
||
message ListProductsPromotionRequest {
|
||
repeated string product_ids = 1;
|
||
string locality_id = 2;
|
||
UserType user_type = 3;
|
||
bool disable_cache = 4;
|
||
}
|
||
|
||
message ListProductsPromotionResponse {
|
||
repeated PromotionProducts promotion_products = 1;
|
||
}
|
||
|
||
message PromotionProducts {
|
||
repeated Product products = 1;
|
||
PromotionDetails promotion_details = 2;
|
||
}
|
||
|
||
message Nameplate {
|
||
string title = 1;
|
||
string hint_description = 2;
|
||
string color = 3;
|
||
string text_color = 4;
|
||
}
|
||
|
||
message Meta {
|
||
string title = 1;
|
||
string description = 2;
|
||
string keywords = 3;
|
||
}
|
||
|
||
enum PromotionType {
|
||
PROMOTION_TYPE_UNSPECIFIED = 0;
|
||
PROMOTION_TYPE_BLACK_FRIDAY = 1;
|
||
PROMOTION_TYPE_PRODUCT_OF_THE_MONTH = 2;
|
||
PROMOTION_TYPE_SALE_IN_THE_STORE = 3;
|
||
PROMOTION_TYPE_SUPER_PRICE = 4;
|
||
}
|
||
|
||
message GetPromotionsDetailsRequest {
|
||
repeated int32 promotion_ids = 1;
|
||
}
|
||
|
||
message GetPromotionsDetailsResponse {
|
||
repeated PromotionDetails promotion_details = 1;
|
||
}
|
||
|
||
message PromotionDetails {
|
||
int32 id = 1;
|
||
string uuid = 2;
|
||
string slug = 3;
|
||
PromotionClientType client_type = 4;
|
||
string name = 5;
|
||
string title = 6;
|
||
Nameplate nameplate = 7;
|
||
Meta meta = 8;
|
||
PromotionType type = 100;
|
||
string description = 9;
|
||
string frameColor = 10;
|
||
}
|
||
|
||
// PromotionClientType свойство акции определяющие контрагентов для которых действует акция
|
||
// PROMOTION_CLIENT_TYPE_ALL - акция подходит для любого клиента
|
||
// PROMOTION_CLIENT_TYPE_B2C - акция подходит только для b2c
|
||
// PROMOTION_CLIENT_TYPE_B2B - акция подходит только для b2b
|
||
enum PromotionClientType {
|
||
PROMOTION_CLIENT_TYPE_UNSPECIFIED = 0;
|
||
PROMOTION_CLIENT_TYPE_ALL = 1;
|
||
PROMOTION_CLIENT_TYPE_B2C = 2;
|
||
PROMOTION_CLIENT_TYPE_B2B = 3;
|
||
}
|
||
|
||
message ListPromotionsV0Request {
|
||
string locality_id = 1;
|
||
}
|
||
|
||
message ListPromotionsV0Response {
|
||
repeated PromotionDetails promotion_details = 1;
|
||
}
|
||
|
||
message ListPromotionsV1Request {
|
||
string locality_id = 1;
|
||
UserType user_type = 2;
|
||
}
|
||
|
||
message ListPromotionsV1Response {
|
||
repeated PromotionDetails promotion_details = 1;
|
||
}
|
||
|
||
// UserType тип пользователя который делает запрос
|
||
enum UserType {
|
||
USER_TYPE_UNSPECIFIED = 0;
|
||
USER_TYPE_B2C = 1;
|
||
USER_TYPE_B2B = 2;
|
||
}
|
||
|
||
message GetPromotionDetailsRequest {
|
||
string locality_id = 1;
|
||
UserType user_type = 2;
|
||
string promotion_slug = 3;
|
||
}
|
||
|
||
message GetPromotionDetailsResponse {
|
||
PromotionDetails promotion_details = 1;
|
||
}
|
||
|
||
message GetPromotionRubricsRequest {
|
||
string promotion_slug = 1;
|
||
string locality_id = 2;
|
||
UserType user_type = 3;
|
||
}
|
||
|
||
message GetPromotionRubricsResponse {
|
||
repeated string rubric_ids = 1;
|
||
}
|
||
|
||
message GetPromotionIDRequest {
|
||
string uuid = 1;
|
||
}
|
||
|
||
message GetPromotionIDResponse {
|
||
int32 promotion_id = 1;
|
||
}
|
||
|
||
message ListPromotionRequest {
|
||
string locality_id = 1;
|
||
UserType user_type = 2;
|
||
string promotion_slug = 3;
|
||
|
||
string rubric_id = 4;
|
||
OrderBy order_by = 7;
|
||
OrderDirection order_direction = 8;
|
||
|
||
int64 page_number = 9;
|
||
|
||
bool disable_cache = 10;
|
||
|
||
int32 limit = 11;
|
||
}
|
||
|
||
message ListPromotionResponse {
|
||
repeated Product products = 1;
|
||
int64 total_products = 2;
|
||
}
|