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

option go_package = "infra/monorailv2/api/api_proto;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) {}
}


// 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 {
}
