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; }