// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd

syntax = "proto3";

package monorail;

import "api/api_proto/common.proto";
import "api/api_proto/features_objects.proto";


service Features {
  rpc ListHotlistsByUser (ListHotlistsByUserRequest) returns (ListHotlistsByUserResponse) {}
  rpc ListHotlistsByIssue (ListHotlistsByIssueRequest) returns (ListHotlistsByIssueResponse) {}
  rpc ListRecentlyVisitedHotlists (ListRecentlyVisitedHotlistsRequest) returns (ListRecentlyVisitedHotlistsResponse) {}
  rpc ListStarredHotlists (ListStarredHotlistsRequest) returns (ListStarredHotlistsResponse) {}
  rpc GetHotlistStarCount (GetHotlistStarCountRequest) returns (GetHotlistStarCountResponse) {}
  rpc StarHotlist (StarHotlistRequest) returns (StarHotlistResponse) {}
  rpc GetHotlist (GetHotlistRequest) returns (GetHotlistResponse) {}
  rpc ListHotlistItems (ListHotlistItemsRequest) returns (ListHotlistItemsResponse) {}
  rpc CreateHotlist (CreateHotlistRequest) returns (CreateHotlistResponse) {}
  rpc CheckHotlistName (CheckHotlistNameRequest) returns (CheckHotlistNameResponse) {}
  rpc RemoveIssuesFromHotlists (RemoveIssuesFromHotlistsRequest) returns (RemoveIssuesFromHotlistsResponse) {}
  rpc AddIssuesToHotlists (AddIssuesToHotlistsRequest) returns (AddIssuesToHotlistsResponse) {}
  rpc RerankHotlistIssues (RerankHotlistIssuesRequest) returns (RerankHotlistIssuesResponse) {}
  rpc UpdateHotlistIssueNote (UpdateHotlistIssueNoteRequest) returns (UpdateHotlistIssueNoteResponse) {}
  rpc DeleteHotlist (DeleteHotlistRequest) returns (DeleteHotlistResponse) {}
  rpc PredictComponent (PredictComponentRequest) returns (PredictComponentResponse) {}
}


// Next available tag: 3
message ListHotlistsByUserRequest {
  UserRef user = 2;
}


// Next available tag: 2
message ListHotlistsByUserResponse {
  repeated Hotlist hotlists = 1;
}


// Next available tag: 3
message ListHotlistsByIssueRequest {
  IssueRef issue = 2;
}


// Next available tag: 2
message ListHotlistsByIssueResponse {
  repeated Hotlist hotlists = 1;
}


// Next available tag: 2
message ListRecentlyVisitedHotlistsRequest {
}


// Next available tag: 2
message ListRecentlyVisitedHotlistsResponse {
  repeated Hotlist hotlists = 1;
}


// Next available tag: 2
message ListStarredHotlistsRequest {
}


// Next available tag: 2
message ListStarredHotlistsResponse {
  repeated Hotlist hotlists = 1;
}


// Next available tag: 3
message GetHotlistStarCountRequest {
  HotlistRef hotlist_ref = 2;
}


// Next available tag: 2
message GetHotlistStarCountResponse {
  uint32 star_count = 1;
}


// Next available tag: 4
message StarHotlistRequest {
  HotlistRef hotlist_ref = 2;
  bool starred = 3;
}


// Next available tag: 2
message StarHotlistResponse {
  uint32 star_count = 1;
}

// Next available tag: 2
message GetHotlistRequest {
  HotlistRef hotlist_ref = 1;
}

// Next available tag: 2
message GetHotlistResponse {
  Hotlist hotlist = 1;
}


// Next available tag: 7
message ListHotlistItemsRequest {
  HotlistRef hotlist_ref = 2;
  Pagination pagination = 3;
  uint32 can = 4;
  string sort_spec = 5;
  string group_by_spec = 6;
}


// Next available tag: 2
message ListHotlistItemsResponse {
  repeated HotlistItem items = 1;
}


// Next available tag: 7
message CreateHotlistRequest {
  string name = 2;
  string summary = 3;
  string description = 4;
  repeated UserRef editor_refs = 5;
  repeated IssueRef issue_refs = 6;
  bool is_private = 7;
}


// Next available tag: 1
message CreateHotlistResponse {
}


// Next available tag: 3
message CheckHotlistNameRequest {
  string name = 2;
}


// Next available tag: 1
message CheckHotlistNameResponse {
  string error = 1;
}


// Next available tag: 4
message RemoveIssuesFromHotlistsRequest {
  repeated HotlistRef hotlist_refs = 2;
  repeated IssueRef issue_refs = 3;
}


// Next available tag: 1
message RemoveIssuesFromHotlistsResponse {
}


// Next available tag: 5
message AddIssuesToHotlistsRequest {
  repeated HotlistRef hotlist_refs = 2;
  repeated IssueRef issue_refs = 3;
  string note = 4;
}


// Next available tag: 1
message AddIssuesToHotlistsResponse {
}

// Next available tag: 5
message RerankHotlistIssuesRequest{
  HotlistRef hotlist_ref = 1;
  repeated IssueRef moved_refs = 2;
  IssueRef target_ref = 3;
  bool split_above = 4;
}

// Next available tag: 1
message RerankHotlistIssuesResponse{
}

// Next available tag: 5
message UpdateHotlistIssueNoteRequest {
  HotlistRef hotlist_ref = 2;
  IssueRef issue_ref = 3;
  string note = 4;
}


// Next available tag: 1
message UpdateHotlistIssueNoteResponse {
}


// Next available tag: 2
message DeleteHotlistRequest {
  HotlistRef hotlist_ref = 1;
}


// Next available tag: 1
message DeleteHotlistResponse {
}


// Next available tag: 4
message PredictComponentRequest {
  string text = 2;
  string project_name = 3;
}


// Next available tag: 2
message PredictComponentResponse {
  ComponentRef component_ref = 1;
}
