/*
 * Created by jonathan.jesperson@pluto.tv on 01/26/2021.
 * Copyright (c) PlutoTV Inc 2021.
 */

syntax = "proto3";

package appnamepackage;

option go_package = "github.com/Pluto-tv/service-dal/golang_client";
option java_package = "tv.pluto.ip.dal.appname";

service AppNameManager {
  // GetAll (Server Stream)
  //
  rpc GetAll(GetAllRequest) returns (stream AppName) {}

  // GetDocumentsUpdatedBetweenDates (Server Stream)
  //
  rpc GetDocumentsUpdatedBetweenDates(GetDocumentsUpdatedBetweenDatesRequest) returns (stream AppName) {}

  // GetByDeviceId (Server Stream)
  //
  rpc GetByDeviceId(GetByDeviceIdRequest) returns (stream AppName) {}

  rpc GetAllPaged(GetAllPagedRequest) returns (GetAllPagedResponse) {}

  // Create (Unary)
  //
  rpc Create(CreateRequest) returns (CreateResponse) {}

  // UpdateFields (Unary)
  //
  rpc UpdateFields(UpdateFieldsRequest) returns (UpdateFieldsResponse) {}
}

message GetDocumentsUpdatedBetweenDatesRequest {
  string updated_at_min = 1;
  string updated_at_max = 2;
}

message AppName {
  string id = 1;
  string name = 2;
  string created_at = 3;
  string updated_at = 4;
  repeated string devices = 5;
  repeated string devicesrev = 6;
  repeated string regions = 7;
}

message GetByDeviceIdRequest {
  string device_id = 1;
}

message GetAllRequest {}

message Metadata {
  int32 current_offset = 1;
  int32 total_items = 2;
}

message Filter {
  string field = 1;
  string value = 2;
  string type = 3;
}

message GetAllPagedSort {
  string field = 1;
  int32 value = 2;
}

message GetAllPagedRequest {
  int32 limit = 1;
  int32 offset = 2;
  repeated GetAllPagedSort sort = 3;
  repeated Filter filters = 4;
  bool disable_total_count = 5;
  // when set to true the `name` value will be sent to MongoDB as regex expression
  // when set to false the `name` value will be sent to MongoDB as a literal string
  bool enable_regex = 6;
}

message GetAllPagedResponse {
  repeated AppName documents = 1;
  Metadata metadata = 2;
}

message CreateRequest {
  AppName document = 1;
}

message CreateResponse {
  AppName document = 1;
}

message UpdateFieldsRequest {
  string id = 1;
  AppName document = 2;
  repeated string update_fields = 3;
}

message UpdateFieldsResponse {
  AppName document = 1;
}
