syntax = "proto3";

package yandex.cloud.mdb.clickhouse.v1;

import "google/api/annotations.proto";
import "google/protobuf/field_mask.proto";
import "yandex/cloud/api/operation.proto";
import "yandex/cloud/operation/operation.proto";
import "yandex/cloud/validation.proto";
import "yandex/cloud/mdb/clickhouse/v1/format_schema.proto";

option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/clickhouse/v1;clickhouse";
option java_package = "yandex.cloud.api.mdb.clickhouse.v1";

service FormatSchemaService {
  rpc Get (GetFormatSchemaRequest) returns (FormatSchema) {
    option (google.api.http) = { get: "/managed-clickhouse/v1/clusters/{cluster_id}/formatSchemas/{format_schema_name}" };
  }

  rpc List (ListFormatSchemasRequest) returns (ListFormatSchemasResponse) {
    option (google.api.http) = { get: "/managed-clickhouse/v1/clusters/{cluster_id}/formatSchemas" };
  }

  rpc Create (CreateFormatSchemaRequest) returns (operation.Operation) {
    option (google.api.http) = { post: "/managed-clickhouse/v1/clusters/{cluster_id}/formatSchemas" body: "*" };
    option (yandex.cloud.api.operation) = {
      metadata: "CreateFormatSchemaMetadata"
      response: "FormatSchema"
    };
  }

  rpc Update (UpdateFormatSchemaRequest) returns (operation.Operation) {
    option (google.api.http) = { patch: "/managed-clickhouse/v1/clusters/{cluster_id}/formatSchemas/{format_schema_name}" body: "*" };
    option (yandex.cloud.api.operation) = {
      metadata: "UpdateFormatSchemaMetadata"
      response: "FormatSchema"
    };
  }

  rpc Delete (DeleteFormatSchemaRequest) returns (operation.Operation) {
    option (google.api.http) = { delete: "/managed-clickhouse/v1/clusters/{cluster_id}/formatSchemas/{format_schema_name}" };
    option (yandex.cloud.api.operation) = {
      metadata: "DeleteFormatSchemaMetadata"
      response: "google.protobuf.Empty"
    };
  }
}

message GetFormatSchemaRequest {
  string cluster_id = 1 [(required) = true, (length) = "<=50"];

  string format_schema_name = 2 [(required) = true, (length) = "<=63", (pattern) = "[a-zA-Z0-9_-]*"];
}

message ListFormatSchemasRequest {
  string cluster_id = 1 [(required) = true, (length) = "<=50"];

  int64 page_size = 2 [(value) = "<=1000"];

  string page_token = 3 [(length) = "<=100"];
}

message ListFormatSchemasResponse {
  repeated FormatSchema format_schemas = 1;

  string next_page_token = 2;
}

message CreateFormatSchemaRequest {
  string cluster_id = 1 [(required) = true, (length) = "<=50"];

  string format_schema_name = 2 [(required) = true, (length) = "<=63", (pattern) = "[a-zA-Z0-9_-]*"];

  FormatSchemaType type = 3 [(required) = true];

  string uri = 4 [(required) = true];
}

message CreateFormatSchemaMetadata {
  string cluster_id = 1;

  string format_schema_name = 2;
}

message UpdateFormatSchemaRequest {
  string cluster_id = 1 [(required) = true, (length) = "<=50"];

  string format_schema_name = 2 [(required) = true, (length) = "<=63", (pattern) = "[a-zA-Z0-9_-]*"];

  google.protobuf.FieldMask update_mask = 3;

  string uri = 4;
}

message UpdateFormatSchemaMetadata {
  string cluster_id = 1;

  string format_schema_name = 2;
}

message DeleteFormatSchemaRequest {
  string cluster_id = 1 [(required) = true, (length) = "<=50"];

  string format_schema_name = 2 [(required) = true, (length) = "<=63", (pattern) = "[a-zA-Z0-9_-]*"];
}

message DeleteFormatSchemaMetadata {
  string cluster_id = 1;

  string format_schema_name = 2;
}
