// Copyright 2020 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.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/project_objects.proto";

// ***DO NOT CALL rpcs IN THIS SERVICE.***
// This service is for Monorail's frontend only.

service Frontend {
  // status: DO NOT USE
  // Returns all project specific configurations needed for the SPA client.
  //
  // Raises:
  //   INVALID_ARGUMENT if the project resource name provided is invalid.
  //   NOT_FOUND if the parent project is not found.
  //   PERMISSION_DENIED if user is not allowed to view this project.
  rpc GatherProjectEnvironment (GatherProjectEnvironmentRequest) returns (GatherProjectEnvironmentResponse) {};

  // status: DO NOT USE
  // Returns all of a given user's project memberships.
  //
  // Raises:
  //   NOT_FOUND if the user is not found.
  //   INVALID_ARGUMENT if the user resource name provided is invalid.
  rpc GatherProjectMembershipsForUser (GatherProjectMembershipsForUserRequest)
    returns (GatherProjectMembershipsForUserResponse) {}
}


// Request message for GatherProjectEnvironment
// Next available tag: 2
message GatherProjectEnvironmentRequest {
  // The name of the project these config environments belong to.
  string parent = 1 [
    (google.api.resource_reference) = {type: "api.crbug.com/Project"},
    (google.api.field_behavior) = REQUIRED ];
}


// Response message for GatherProjectEnvironment
// Next available tag: 9
message GatherProjectEnvironmentResponse {
  // Project definitions such as display_name and summary.
  Project project = 1;
  // Configurations of this project such as default search term,
  // default templates for members and non members.
  ProjectConfig project_config = 2;
  // List of statuses that belong to this project.
  repeated StatusDef statuses = 3;
  // List of well known labels that belong to this project.
  repeated LabelDef well_known_labels = 4;
  // List of components that belong to this project.
  repeated ComponentDef components = 5;
  // List of custom fields that belong to this project.
  repeated FieldDef fields = 6;
  // List of approval fields that belong to this project.
  repeated ApprovalDef approval_fields = 7;
  // Saved search queries that admins defined for this project.
  repeated ProjectSavedQuery saved_queries = 8;
}

// The request message for Frontend.GatherProjectMembershipsForUser.
// Next available tag: 2
message GatherProjectMembershipsForUserRequest {
  // The name of the user to request.
  string user = 1 [
      (google.api.resource_reference) = {type: "api.crbug.com/User"}];
}

// The response message for Frontend.GatherProjectMembershipsForUser.
// Next available tag: 2
message GatherProjectMembershipsForUserResponse {
  // The projects that the user is a member of.
  repeated ProjectMember project_memberships = 1;
}