Project import generated by Copybara.
GitOrigin-RevId: d9e9e3fb4e31372ec1fb43b178994ca78fa8fe70
diff --git a/api/v3/api_proto/projects.proto b/api/v3/api_proto/projects.proto
new file mode 100644
index 0000000..d902067
--- /dev/null
+++ b/api/v3/api_proto/projects.proto
@@ -0,0 +1,178 @@
+// 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 = "api/v3/api_proto";
+
+import "google/protobuf/empty.proto";
+import "google/api/field_behavior.proto";
+import "google/api/resource.proto";
+import "api/v3/api_proto/project_objects.proto";
+
+// ***ONLY CALL rpcs WITH `status: {ALPHA|STABLE}`***
+// rpcs without `status` are not ready.
+
+// Projects service includes all methods needed for managing Projects.
+service Projects {
+ // status: NOT READY
+ // Creates a new FieldDef (custom field).
+ //
+ // Raises:
+ // NOT_FOUND if some given users do not exist.
+ // ALREADY_EXISTS if a field with the same name owned by the project
+ // already exists.
+ // INVALID_INPUT if there was a problem with the input.
+ // PERMISSION_DENIED if the user cannot edit the project.
+ rpc CreateFieldDef (CreateFieldDefRequest) returns (FieldDef) {}
+
+ // status: ALPHA
+ // Creates a new ComponentDef.
+ //
+ // Raises:
+ // INVALID_INPUT if the request is invalid.
+ // ALREADY_EXISTS if the component already exists.
+ // PERMISSION_DENIED if the user is not allowed to create a/this component.
+ // NOT_FOUND if the parent project or a component cc or admin is not found.
+ rpc CreateComponentDef (CreateComponentDefRequest) returns (ComponentDef) {}
+
+ // status: ALPHA
+ // Deletes a ComponentDef.
+ //
+ // Raises:
+ // INVALID_INPUT if the request is invalid.
+ // PERMISSION_DENIED if the user is not allowed to delete a/this component.
+ // NOT_FOUND if the component or project is not found.
+ rpc DeleteComponentDef (DeleteComponentDefRequest) returns (google.protobuf.Empty) {}
+
+ // status: NOT READY
+ // Returns all templates for specified project.
+ //
+ // Raises:
+ // NOT_FOUND if the requested parent project is not found.
+ // INVALID_ARGUMENT if the given `parent` is not valid.
+ rpc ListIssueTemplates (ListIssueTemplatesRequest) returns (ListIssueTemplatesResponse) {}
+
+ // status: ALPHA
+ // Returns all field defs for specified project.
+ //
+ // Raises:
+ // NOT_FOUND if the request arent project is not found.
+ // INVALID_ARGUMENT if the given `parent` is not valid.
+ rpc ListComponentDefs (ListComponentDefsRequest) returns (ListComponentDefsResponse) {}
+
+ // status: NOT READY
+ // Returns all projects hosted on Monorail.
+ rpc ListProjects (ListProjectsRequest) returns (ListProjectsResponse) {}
+}
+
+// Request message for CreateFieldDef method.
+// Next available tag: 3
+message CreateFieldDefRequest {
+ // The project resource where this field will be created.
+ string parent = 1 [
+ (google.api.field_behavior) = REQUIRED,
+ (google.api.resource_reference) = {type: "api.crbug.com/Project" }];
+ // The field to create.
+ // It must have a display_name and a type with its corresponding settings.
+ FieldDef fielddef = 2 [ (google.api.field_behavior) = REQUIRED ];
+}
+
+// Request message for CreateComponentDef method.
+// Next available tag: 3
+message CreateComponentDefRequest {
+ // The project resource where this component will be created.
+ string parent = 1 [
+ (google.api.field_behavior) = REQUIRED,
+ (google.api.resource_reference) = {type: "api.crbug.com/Project" }];
+ // The component to create.
+ ComponentDef component_def = 2 [ (google.api.field_behavior) = REQUIRED ];
+}
+
+// Request message for DeleteComponentDef method.
+// Next available tag: 2
+message DeleteComponentDefRequest {
+ // The component to delete.
+ string name = 1 [
+ (google.api.field_behavior) = REQUIRED,
+ (google.api.resource_reference) = {type: "api.crbug.com/ComponentDef"}];
+}
+
+// Request message for ListIssueTemplates
+// Next available tag: 4
+message ListIssueTemplatesRequest {
+ // The name of the project these templates belong to.
+ string parent = 1 [
+ (google.api.resource_reference) = {type: "api.crbug.com/Project"},
+ (google.api.field_behavior) = REQUIRED ];
+ // The maximum number of items to return. The service may return fewer than
+ // this value.
+ int32 page_size = 2;
+ // A page token, received from a previous `ListIssueTemplates` call.
+ // Provide this to retrieve the subsequent page.
+ // When paginating, all other parameters provided to
+ // `ListIssueTemplatesRequest` must match the call that provided the token.
+ string page_token = 3;
+}
+
+// Response message for ListIssueTemplates
+// Next available tag: 3
+message ListIssueTemplatesResponse {
+ // Templates matching the given request.
+ repeated IssueTemplate templates = 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;
+}
+
+// Request message for ListComponentDefs
+// Next available tag: 4
+message ListComponentDefsRequest {
+ // The name of the parent project.
+ string parent = 1 [
+ (google.api.resource_reference) = {type: "api.crbug.com/Project"},
+ (google.api.field_behavior) = REQUIRED ];
+ // The maximum number of items to return. The service may return fewer than
+ // this value.
+ int32 page_size = 2;
+ // A page token, received from a previous `ListComponentDefs` call.
+ // Provide this to retrieve the subsequent page.
+ // When paginating, all other parameters provided to
+ // `ListComponentDefsRequest` must match the call that provided the token.
+ string page_token = 3;
+}
+
+// Response message for ListComponentDefs
+// Next available tag: 3
+message ListComponentDefsResponse {
+ // Component defs matching the given request.
+ repeated ComponentDef component_defs = 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;
+}
+
+// Request message for ListProjects
+// Next available tag: 3
+message ListProjectsRequest {
+ // The maximum number of items to return. The service may return fewer than
+ // this value.
+ int32 page_size = 1;
+ // A page token, received from a previous `ListProjects` call.
+ // Provide this to retrieve the subsequent page.
+ string page_token = 2;
+}
+
+// Response message for ListProjects
+// Next available tag: 3
+message ListProjectsResponse {
+ // Projects matching the given request.
+ repeated Project projects = 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;
+}