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

// This file defines protobufs for projects and their resources.

syntax = "proto3";

package monorail.v3;

option go_package = "api/v3/api_proto";

import "google/protobuf/timestamp.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "api/v3/api_proto/issue_objects.proto";
import "api/v3/api_proto/permission_objects.proto";

// The top level organization of issues in Monorail.
//
// See monorail/doc/userguide/concepts.md#Projects-and-roles.
// and monorail/doc/userguide/project-owners.md#why-does-monorail-have-projects
// Next available tag: 5
message Project {
  option (google.api.resource) = {
    type: "api.crbug.com/Project"
    pattern: "projects/{project}"
  };

  // Resource name of the project.
  string name = 1;
  // Display name of the project.
  string display_name = 2 [(google.api.field_behavior) = IMMUTABLE];
  // Summary of the project, ie describing what its use and purpose.
  string summary = 3;
  // URL pointing to this project's logo image.
  string thumbnail_url = 4;
}

// Potential steps along the development process that an issue can be in.
//
// See monorail/doc/userguide/project-owners.md#How-to-configure-statuses
// (-- aip.dev/not-precedent: "Status" should be reserved for HTTP/gRPC codes
//     per aip.dev/216. Monorail's Status  preceded the AIP standards, and is
//     used extensively throughout the system.)
// Next available tag: 7
message StatusDef {
  option (google.api.resource) = {
    type: "api.crbug.com/StatusDef"
    pattern: "projects/{project}/statusDefs/{status_def}"
  };

  // Type of this status.
  // Next available tag: 4
  enum StatusDefType {
    // Default enum value. This value is unused.
    STATUS_DEF_TYPE_UNSPECIFIED = 0;
    // This status means issue is open.
    OPEN = 1;
    // This status means issue is closed.
    CLOSED = 2;
    // This status means issue is merged into another.
    MERGED = 3;
  }

  // State of this status.
  // Next available tag: 3
  enum StatusDefState {
    // Default value. This value is unused.
    STATUS_DEF_STATE_UNSPECIFIED = 0;
    // This status is deprecated
    DEPRECATED = 1;
    // This status is not deprecated
    ACTIVE = 2;
  }

  // Resource name of the status.
  string name = 1;
  // String value of the status.
  string value = 2;
  // Type of this status.
  StatusDefType type = 3;
  // Sorting rank of this status. If we sort issues by status
  // this rank determines the sort order rather than status value.
  uint32 rank = 4;
  // Brief explanation of this status.
  string docstring = 5;
  // State of this status.
  StatusDefState state = 6;
}

// Well-known labels that can be applied to issues within the project.
//
// See monorail/doc/userguide/concepts.md#issue-fields-and-labels.
// Next available tag: 5
// Labels defined in this project.
message LabelDef {

  option (google.api.resource) = {
    type: "api.crbug.com/LabelDef"
    pattern: "projects/{project}/labelDefs/{label_def}"
  };

  // State of this label.
  // Next available tag: 3
  enum LabelDefState {
    // Default enum value. This value is unused.
    LABEL_DEF_STATE_UNSPECIFIED = 0;
    // This label is deprecated
    DEPRECATED = 1;
    // This label is not deprecated
    ACTIVE = 2;
  }

  // Resource name of the label.
  string name = 1;
  // String value of the label.
  string value = 2;
  // Brief explanation of this label.
  string docstring = 3;
  // State of this label.
  LabelDefState state = 4;
}

// Custom fields defined for the project.
//
// See monorail/doc/userguide/concepts.md#issue-fields-and-labels.
// Check bugs.chromium.org/p/{project}/adminLabels to see the FieldDef IDs.
// If your code needs to call multiple monorail instances
// (e.g. monorail-{prod|staging|dev}) FieldDef IDs for FieldDefs
// with the same display_name will differ between each monorail
// instance. To see what FieldDef ID to use when calling staging
// you must check bugs-staging.chromium.org/p/{project}/adminLabels.
// Next available tag: 15
message FieldDef {
  option (google.api.resource) = {
    type: "api.crbug.com/FieldDef"
    pattern: "projects/{project}/fieldDefs/{field_def_id}"
  };

  // Resource name of the field.
  string name = 1;
  // Display name of the field.
  string display_name = 2 [(google.api.field_behavior) = IMMUTABLE];
  // Brief explanation of this field.
  string docstring = 3;
  // Type of this field.
  // Next available tag: 7
  enum Type {
    // Default enum value. This value is unused.
    TYPE_UNSPECIFIED = 0;
    // This field can be filled only with enumerated option(s).
    ENUM = 1;
    // This field can be filled with integer(s).
    INT = 2;
    // This field can be filled with string(s).
    STR = 3;
    // This field can be filled with user(s).
    USER = 4;
    // This field can be filled with date(s).
    DATE = 5;
    // This field can be filled with URL(s).
    URL = 6;
  }
  Type type = 4 [(google.api.field_behavior) = IMMUTABLE];

  // Type of issue this field applies: ie Bug or Enhancement.
  // Note: type is indicated by any "Type-foo" label or "Type" custom field.
  string applicable_issue_type = 5;
  // Administrators of this field.
  repeated string admins = 6 [
      (google.api.resource_reference) = { type: "api.crbug.com/User" }
  ];

  // Traits of this field, ie is required or can support multiple values.
  // Next available tag: 6
  enum Traits {
    // Default enum value. This value is unused.
    TRAITS_UNSPECIFIED = 0;
    // This field must be filled out in issues where it's applicable.
    REQUIRED = 1;
    // This field defaults to hidden.
    DEFAULT_HIDDEN = 2;
    // This field can have multiple values.
    MULTIVALUED = 3;
    // This is a phase field, meaning it is repeated for each phase of an
    // approval process. It cannot be the child of a particular approval.
    PHASE = 4;
    // Values of this field can only be edited in issues/templates by editors.
    // Project owners and field admins are not subject of this restriction.
    RESTRICTED = 5;
  }
  repeated Traits traits = 7;

  // ApprovalDef that this field belongs to, if applicable.
  // A field may not both have `approval_parent` set and have the PHASE trait.
  string approval_parent = 8 [
      (google.api.resource_reference) = { type: "api.crbug.com/ApprovalDef" },
      (google.api.field_behavior) = IMMUTABLE
  ];

  // Settings specific to enum type fields.
  // Next available tag: 2
  message EnumTypeSettings {
    // One available choice for an enum field.
    // Next available tag: 3
    message Choice {
      // Value of this choice.
      string value = 1;
      // Brief explanation of this choice.
      string docstring = 2;
    }
    repeated Choice choices = 1;
  }
  EnumTypeSettings enum_settings = 9;

  // Settings specific to int type fields.
  // Next available tag: 3
  message IntTypeSettings {
    // Minimum value that this field can have.
    int32 min_value = 1;
    // Maximum value that this field can have.
    int32 max_value = 2;
  }
  IntTypeSettings int_settings = 10;

  // Settings specific to str type fields.
  // Next available tag: 2
  message StrTypeSettings {
    // Regex that this field value(s) must match.
    string regex = 1;
  }
  StrTypeSettings str_settings = 11;

  // Settings specific to user type fields.
  // Next available tag: 5
  message UserTypeSettings {
    // Event that triggers a notification.
    // Next available tag: 3
    enum NotifyTriggers {
      // Default notify trigger value. This value is unused.
      NOTIFY_TRIGGERS_UNSPECIFIED = 0;
      // There are no notifications.
      NEVER = 1;
      // Notify whenever any comment is made.
      ANY_COMMENT = 2;
    }
    NotifyTriggers notify_triggers = 1;
    // Field value(s) can only be set to users that fulfill the role
    // requirements.
    // Next available tag: 3
    enum RoleRequirements {
      // Default role requirement value. This value is unused.
      ROLE_REQUIREMENTS_UNSPECIFIED = 0;
      // There is no requirement.
      NO_ROLE_REQUIREMENT = 1;
      // Field value(s) can only be set to users who are members.
      PROJECT_MEMBER = 2;
    }
    RoleRequirements role_requirements = 2;
    // User(s) named in this field are granted this permission in the issue.
    string grants_perm = 3;
    // Field value(s) can only be set to users with this permission.
    string needs_perm = 4;
  }
  UserTypeSettings user_settings = 12;

  // Settings specific to date type fields.
  // Next available tag: 2
  message DateTypeSettings {
    // Action to do when a date field value arrives.
    // Next available tag: 4
    enum DateAction {
      // Default date action value. This value is unused.
      DATE_ACTION_UNSPECIFIED = 0;
      // No action will be taken when a date arrives.
      NO_ACTION = 1;
      // Notify owner only when a date arrives.
      NOTIFY_OWNER = 2;
      // Notify all participants when a date arrives.
      NOTIFY_PARTICIPANTS = 3;
    }
    DateAction date_action = 1;
  }
  DateTypeSettings date_settings = 13;

  // Editors of this field, only for RESTRICTED fields.
  repeated string editors = 14 [
      (google.api.resource_reference) = { type: "api.crbug.com/User" }
  ];
}

// A high level definition of the part of the software affected by an issue.
//
// See monorail/doc/userguide/project-owners.md#how-to-configure-components.
// Check crbug.com/p/{project}/adminComponents to see the ComponenttDef IDs.
// Next available tag: 12
message ComponentDef {
  option (google.api.resource) = {
    type: "api.crbug.com/ComponentDef"
    pattern: "projects/{project}/componentDefs/{component_def_id}"
  };

  // The current state of the component definition.
  // Next available tag: 3
  enum ComponentDefState {
    // Default enum value. This value is unused.
    COMPONENT_DEF_STATE_UNSPECIFIED = 0;
    // This component is deprecated
    DEPRECATED = 1;
    // This component is not deprecated
    ACTIVE = 2;
  }

  // Resource name of the component, aka identifier.
  // the API will always return ComponentDef names with format:
  // projects/{project}/componentDefs/<component_def_id>.
  // However the API will accept ComponentDef names with formats:
  // projects/{project}/componentDefs/<component_def_id>|<value>.
  string name = 1;
  // String value of the component, ie 'Tools>Stability' or 'Blink'.
  string value = 2;
  // Brief explanation of this component.
  string docstring = 3;
  // Administrators of this component.
  repeated string admins = 4 [
      (google.api.resource_reference) = { type: "api.crbug.com/User" }
  ];
  // Auto cc'ed users of this component.
  repeated string ccs = 5 [
      (google.api.resource_reference) = { type: "api.crbug.com/User" }
  ];
  // State of this component.
  ComponentDefState state = 6;
  // The user that created this component.
  string creator = 7 [
      (google.api.resource_reference) = { type: "api.crbug.com/User" },
      (google.api.field_behavior) = OUTPUT_ONLY
  ];
  // The user that last modified this component.
  string modifier = 8 [
      (google.api.resource_reference) = { type: "api.crbug.com/User" },
      (google.api.field_behavior) = OUTPUT_ONLY
  ];
  // The time this component was created.
  google.protobuf.Timestamp create_time = 9 [
      (google.api.field_behavior) = OUTPUT_ONLY
  ];
  // The time this component was last modified.
  google.protobuf.Timestamp modify_time = 10 [
      (google.api.field_behavior) = OUTPUT_ONLY
  ];
  // Labels that auto-apply to issues in this component.
  repeated string labels = 11;
}

// Defines approvals that issues within the project may need.
// See monorail/doc/userguide/concepts.md#issue-approvals-and-gates and
// monorail/doc/userguide/project-owners.md#How-to-configure-approvals
// Check bugs.chromium.org/p/{project}/adminLabels to see the ApprovalDef IDs.
// If your code needs to call multiple monorail instances
// (e.g. monorail-{prod|staging|dev}) ApprovalDef IDs for ApprovalDefs
// with the same display_name will differ between each monorail
// instance. To see what ApprovalDef ID to use when calling staging
// you must check bugs-staging.chromium.org/p/{project}/adminLabels.
// Next available tag: 7
message ApprovalDef {
  option (google.api.resource) = {
    type: "api.crbug.com/ApprovalDef"
    pattern: "projects/{project}/approvalDefs/{approval_def_id}"
  };

  // Resource name of the approval.
  string name = 1;
  // Display name of the field.
  string display_name = 2 [(google.api.field_behavior) = IMMUTABLE];
  // Brief explanation of this field.
  string docstring = 3;
  // Information approvers need from requester.
  // May be adjusted on the issue after creation.
  string survey = 4;
  // Default list of users who can approve this field.
  // May be adjusted on the issue after creation.
  repeated string approvers = 5 [
      (google.api.resource_reference) = { type: "api.crbug.com/User" }
  ];
  // Administrators of this field.
  repeated string admins = 6 [
      (google.api.resource_reference) = { type: "api.crbug.com/User" }
  ];
}


// Defines saved queries that belong to a project
//
// Next available tag: 4
message ProjectSavedQuery {
  option (google.api.resource) = {
    type: "api.crbug.com/ProjectSavedQuery"
    pattern: "projects/{project}/savedQueries/{saved_query_id}"
  };

  // Resource name of this saved query.
  string name = 1;
  // Display name of this saved query, ie 'open issues'.
  string display_name = 2;
  // Search term of this saved query.
  string query = 3;
}


// Defines a template for filling issues.
// Next available tag: 10
message IssueTemplate {
  option (google.api.resource) = {
    type: "api.crbug.com/IssueTemplate"
    pattern: "projects/{project}/templates/{template_id}"
  };
  // Resource name of the template.
  string name = 1;
  // Display name of this template.
  string display_name = 2 [(google.api.field_behavior) = IMMUTABLE];
  // Canonical Issue for this template.
  Issue issue = 3;
  // ApprovalValues to be created with the issue when using this template.
  repeated ApprovalValue approval_values = 9;
  // Boolean indicating subsequent issue creation must have delta in summary.
  bool summary_must_be_edited = 4;
  // Visibility permission of template.
  // Next available tag: 3
  enum TemplatePrivacy {
    // This value is unused.
    TEMPLATE_PRIVACY_UNSPECIFIED = 0;
    // Owner project members may view this template.
    MEMBERS_ONLY = 1;
    // Anyone on the web can view this template.
    PUBLIC = 2;
  }
  TemplatePrivacy template_privacy = 5;
  // Indicator of who if anyone should be the default owner of the issue
  // created with this template.
  // Next available tag: 2
  enum DefaultOwner {
    // There is no default owner.
    // This value is used if the default owner is omitted.
    DEFAULT_OWNER_UNSPECIFIED = 0;
    // The owner should default to the Issue reporter if the reporter is a
    // member of the project.
    PROJECT_MEMBER_REPORTER = 1;
  }
  DefaultOwner default_owner = 6;
  // Boolean indicating whether issue must have a component.
  bool component_required = 7;
  // Names of Users who can administer this template.
  repeated string admins = 8 [
      (google.api.resource_reference) = { type: "api.crbug.com/User" }];
}


// Defines configurations of a project
//
// Next available tag: 11
message ProjectConfig {
  option (google.api.resource) = {
    type: "api.crbug.com/ProjectConfig"
    pattern: "projects/{project}/config"
  };

  // Resource name of the project config.
  string name = 1;
  // Set of label prefixes that only apply once per issue.
  // E.g. priority, since no issue can be both Priority-High and Priority-Low.
  repeated string exclusive_label_prefixes = 2;
  // Default search query for this project's members.
  string member_default_query = 3;
  // TODO(crbug.com/monorail/7517): consider using IssuesListColumn
  // Default sort specification for this project.
  string default_sort = 4;
  // Default columns for displaying issue list for this project.
  repeated IssuesListColumn default_columns = 5;
  // Grid view configurations.
  // Next available tag: 3
  message GridViewConfig {
    // Default column dimension in grid view for this project.
    string default_x_attr = 1;
    // Default row dimension in grid view for this project.
    string default_y_attr = 2;
  }
  GridViewConfig project_grid_config = 6;
  // Default template used for issue entry for members of this project.
  string member_default_template = 7 [
      (google.api.resource_reference) = { type: "api.crbug.com/Template" }];
  // Default template used for issue entry for non-members of this project.
  string non_members_default_template = 8 [
      (google.api.resource_reference) = { type: "api.crbug.com/Template" }];
  // URL to browse project's source code revisions for any given revnum.
  // E.g. https://crrev.com/{revnum}
  string revision_url_format = 9;
  // A project's custom URL for the "New issue" link, only if specified.
  string custom_issue_entry_url = 10;
}

// Specifies info for a member of a project.
//
// Next available tag: 7
message ProjectMember {
  // Resource name of the Project Member.
  // projects/{project}/members/{user_id}
  string name = 1;
  // The role the user has in the project.
  // Next available tag: 4
  enum ProjectRole {
    // The user has no role in the project.
    PROJECT_ROLE_UNSPECIFIED = 0;
    // The user can make any changes to the project.
    OWNER = 1;
    // The user may participate in the project but may not edit the project.
    COMMITTER = 2;
    // The user starts with the same permissions as a non-member.
    CONTRIBUTOR = 3;
  }
  ProjectRole role = 2;
  // Which built-in/standard permissions the user has set.
  repeated Permission standard_perms = 3;
  // Custom permissions defined for the user.
  // eg. "Google" in "Restrict-View-Google" is an example custom permission.
  repeated string custom_perms = 4;
  // Annotations about a user configured by project owners.
  // Visible to anyone who can see the project's settings.
  string notes = 5;
  // Whether the user should show up in autocomplete.
  // Next available tag: 3
  enum AutocompleteVisibility {
    // No autocomplete visibility value specified.
    AUTOCOMPLETE_VISIBILITY_UNSPECIFIED = 0;
    // The user should not show up in autocomplete.
    HIDDEN = 1;
    // The user may show up in autocomplete.
    SHOWN = 2;
  }
  AutocompleteVisibility include_in_autocomplete = 6;
}
