/*
  Сервис реализует функционал управления маркетплейсами.
  Маркетплейсы используются как точки дистрибьюции ключей
*/
syntax = "proto3";

import "google/protobuf/timestamp.proto";
import "google/api/annotations.proto";
import "google/api/field_behavior.proto";
import "google/protobuf/descriptor.proto";
import "google/protobuf/wrappers.proto";

package keyapis.ad.v1;

option java_package = "ru.keyapis.ad.v1";
option java_outer_classname = "KeyapisAdV1Proto";
option java_multiple_files = false;
option java_string_check_utf8 = true;
option go_package = "/keyapis_ad_v1";
option cc_enable_arenas = true;
option csharp_namespace = "Keyapis.Ad.V1";
option objc_class_prefix = "KEYAPISADV1";
option php_namespace = "Keyapis\\Ad\\V1";
option ruby_package = "Keyapis::Ad::V1";
option optimize_for = LITE_RUNTIME;

// Сервис управления маркетплейсами
service MarketplaceService {
  // Метод сохранения маркетплейса.
  // Поддерживает создание и обновление.
  // Метод доступен для: manager, service, application(ad:edit)
  rpc PostMarketplace(PostMarketplaceRequest) returns (PostMarketplaceResponse) {
    option (google.api.http) = {
      post: "/ad/api/v1/marketplace"
      body: "*"
    };
  }
  // Метод получения маркетплейса.
  // Не требует авторизации
  rpc GetMarketplace(GetMarketplaceRequest) returns (GetMarketplaceResponse) {
    option (google.api.http) = {
      get: "/ad/api/v1/marketplace/{id}"
    };
  }
  // Метод получения списка маркетплейсов.
  // Не требует авторизации
  rpc GetMarketplaceList(GetMarketplaceListRequest) returns (stream GetMarketplaceListResponse) {
    option (google.api.http) = {
      get: "/ad/api/v1/marketplace/list"
    };
  }
  // Метод получения количества маркетплейсов.
  // Не требует авторизации
  rpc GetMarketplaceCount(GetMarketplaceCountRequest) returns (GetMarketplaceCountResponse) {
    option (google.api.http) = {
      get: "/ad/api/v1/marketplace/count"
    };
  }
}

// Маркетплейс
message Marketplace {
  // Идентификатор
  int32 id = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
  // Название
  string title = 2 [(google.api.field_behavior) = REQUIRED];
  // Справочник типов маркетплейсов
  enum Type {
    // Значение не указано
    TYPE_UNKNOWN = 0;
    // Озон
    OZON = 1;
    // Вайлдберриз
    WILDBERRIES = 2;
    // Яндекс маркет
    YANDEX_MARKET = 3;
    // Яндекс маркет
    SBER_MARKET = 4;
  }
  // Тип маркетплейса
  Type type = 3 [(google.api.field_behavior) = REQUIRED];
  // Выключен ли маркетплейс
  bool is_disabled = 4;
  // Ссылка на карточку товара ключа в маркетплейсе
  google.protobuf.StringValue card_url = 5;
  // Дата создания
  google.protobuf.Timestamp created_at = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
  // Дата последнего изменения.
  // Заполняется и обновляется сервером.
  // Заполняется при создании и изменении.
  // Является версией объекта
  google.protobuf.Timestamp changed_at = 7 [(google.api.field_behavior) = OUTPUT_ONLY];
}

// Запрос сохранения маркетплейса
message PostMarketplaceRequest {
  // Маркетплейс
  Marketplace data = 1 [(google.api.field_behavior) = REQUIRED];
}
// Ответ на запрос сохранения маркетплейса
message PostMarketplaceResponse {
  // Тип результата
  oneof type {
    // Маркетплейс
    Marketplace data = 1;
  }
}

// Запрос получения маркетплейса
message GetMarketplaceRequest {
  // Идентификатор маркетплейса
  int32 id = 1 [(google.api.field_behavior) = REQUIRED];
}
// Ответ на запрос получения маркетплейса
message GetMarketplaceResponse {
  // Тип результата
  oneof type {
    // Маркетплейс
    Marketplace data = 1;
  }
}

// Запрос получения списка маркетплейсов
message GetMarketplaceListRequest {}
// Ответ на запрос получения списка маркетплейсов
message GetMarketplaceListResponse {
  // Тип результата
  oneof type {
    // Маркетплейс
    Marketplace data = 1;
  }
}

// Запрос получения количества маркетплейсов
message GetMarketplaceCountRequest {}
// Ответ на запрос получения количества маркетплейсов
message GetMarketplaceCountResponse {
  // Тип результата
  oneof type {
    // Всего маркетплейсов
    int32 data = 1;
  }
}
