// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";

package monorail.v3;

option go_package = "infra/monorailv2/api/v3/api_proto";

import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "api/v3/api_proto/user_objects.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";

// ***ONLY CALL rpcs WITH `status: {ALPHA|STABLE}`***
// rpcs without `status` are not ready.

// Users service includes all methods needed for managing Users.
service Users {
  // status: ALPHA
  // Returns the requested User.
  //
  // Raises:
  //   NOT_FOUND is the user is not found.
  //   INVALID_ARGUMENT if the `name` is invalid.
  rpc GetUser (GetUserRequest) returns (User) {}

  // status: ALPHA
  // Returns all of the requested Users.
  //
  // Raises:
  //   NOT_FOUND if any users are not found.
  //   INVALID_ARGUMENT if any `names` are invalid.
  rpc BatchGetUsers (BatchGetUsersRequest) returns (BatchGetUsersResponse) {}

  // status: NOT READY
  // Updates a User.
  //
  // Raises:
  //   NOT_FOUND if the user is not found.
  //   PERMISSION_DENIED if the requester is not allowed to update the user.
  //   INVALID_ARGUMENT if required fields are missing or fields are invalid.
  rpc UpdateUser (UpdateUserRequest) returns (User) {}

  // status: NOT READY
  // Stars a given project for the requestor.
  //
  // Raises:
  //   NOT_FOUND if the requested project is not found.
  //   INVALID_ARGUMENT if the given `project` is not valid.
  rpc StarProject (StarProjectRequest) returns (ProjectStar) {}

  // status: NOT READY
  // Unstars a given project for the requestor.
  //
  // Raises:
  //   NOT_FOUND if the requested project is not found.
  //   INVALID_ARGUMENT if the given `project` is not valid.
  rpc UnStarProject (UnStarProjectRequest) returns (google.protobuf.Empty) {}

  // status: NOT READY
  // Lists all of a user's starred projects.
  //
  // Raises:
  //   NOT_FOUND if the requested user is not found.
  //   INVALID_ARGUMENT if the given `parent` is not valid.
  rpc ListProjectStars (ListProjectStarsRequest) returns (ListProjectStarsResponse) {}
}


// The request message for Users.GetUser.
// Next available tag: 2
message GetUserRequest {
  // The name of the user to request.
  string name = 1 [
      (google.api.resource_reference) = {type: "api.crbug.com/User"},
      (google.api.field_behavior) = REQUIRED ];
}


// The request message for Users.BatchGetUsers.
// Next available tag: 2
message BatchGetUsersRequest {
  // The name of the users to request. At most 100 may be requested.
  repeated string names = 1 [
      (google.api.resource_reference) = {type: "api.crbug.com/User"},
      (google.api.field_behavior) = REQUIRED ];
}


// The response message for Users.BatchGetUsers.
// Next available tag: 2
message BatchGetUsersResponse {
  // The users that were requested.
  repeated User users = 1;
}


// The request message for Users.UpdateUser.
// Next available tag: 3
message UpdateUserRequest {
  // The user's `name` field is used to identify the user to be updated.
  User user = 1 [
      (google.api.field_behavior) = REQUIRED,
      (google.api.resource_reference) = {type: "api.crbug.com/User"} ];
  // The list of fields to be updated.
  google.protobuf.FieldMask update_mask = 2 [ (google.api.field_behavior) = REQUIRED ];
}


// The request message for Users.StarProject.
// Next available tag: 2
message StarProjectRequest {
  // The resource name for the Project to star.
  string project = 1 [
      (google.api.resource_reference) = {type: "api.crbug.com/Project"},
      (google.api.field_behavior) = REQUIRED ];
}


// The request message for Users.UnStarProject.
// Next available tag: 2
message UnStarProjectRequest {
  // The resource name for the Project to unstar.
  string project = 1 [
      (google.api.resource_reference) = {type: "api.crbug.com/Project"},
      (google.api.field_behavior) = REQUIRED ];
}


// The request message for Users.ListProjectStars.
// Next available tag: 4
message ListProjectStarsRequest {
  // The resource name for the user having stars listed.
  string parent = 1 [
      (google.api.resource_reference) = {type: "api.crbug.com/User"},
      (google.api.field_behavior) = REQUIRED ];
  // The maximum number of items to return. The service may return fewer than
  // this value.
  // If unspecified, at most 1000 items will be returned.
  int32 page_size = 2;
  // A page token, received from a previous `ListProjectStars` call.
  // Provide this to retrieve the subsequent page.
  //
  // When paginating, all other parameters provided to `ListProjectStars` must
  // match the call that provided the page token.
  string page_token = 3;
}


// The response message for Users.ListProjectStars.
// Next available tag: 3
message ListProjectStarsResponse {
  // Data for each starred project.
  repeated ProjectStar project_stars = 1;
  // A token, which can be sent as `page_token` to retrieve the next page.
  // If this field is omitted, there are no subsequent pages.
  string next_page_token = 2;
}
