// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package google.apps.drive.activity.v2;

option csharp_namespace = "Google.Apps.Drive.Activity.V2";
option go_package = "google.golang.org/genproto/googleapis/apps/drive/activity/v2;activity";
option java_multiple_files = true;
option java_outer_classname = "QueryDriveActivityRequestProto";
option java_package = "com.google.apps.drive.activity.v2";
option objc_class_prefix = "GADA";
option php_namespace = "Google\\Apps\\Drive\\Activity\\V2";

// The request message for querying Drive activity.
message QueryDriveActivityRequest {
  // The primary criteria in the query. The default is
  // ancestor_name = `items/root` if no key is specified.
  oneof key {
    // Return activities for this Drive item. The format is
    // `items/ITEM_ID`.
    string item_name = 1;

    // Return activities for this Drive folder and all children and descendants.
    // The format is `items/ITEM_ID`.
    string ancestor_name = 2;
  }

  // Details on how to consolidate related actions that make up the activity. If
  // not set, then related actions are not consolidated.
  ConsolidationStrategy consolidation_strategy = 5;

  // The miminum number of activities desired in the response; the server will
  // attempt to return at least this quanitity. The server may also return fewer
  // activities if it has a partial response ready before the request times out.
  // If not set, a default value is used.
  int32 page_size = 6;

  // The token identifying which page of results to return. Set this to the
  // next_page_token value returned from a previous query to obtain the
  // following page of results. If not set, the first page of results will be
  // returned.
  string page_token = 7;

  // The filtering for items returned from this query request. The format of the
  // filter string is a sequence of expressions, joined by an optional "AND",
  // where each expression is of the form "field operator value".
  //
  // Supported fields:
  //
  //   - `time`: Uses numerical operators on date values either in
  //     terms of milliseconds since Jan 1, 1970 or in RFC 3339 format.
  //     Examples:
  //       - `time > 1452409200000 AND time <= 1492812924310`
  //       - `time >= "2016-01-10T01:02:03-05:00"`
  //
  //   - `detail.action_detail_case`: Uses the "has" operator (:) and
  //     either a singular value or a list of allowed action types enclosed in
  //     parentheses.
  //     Examples:
  //       - `detail.action_detail_case: RENAME`
  //       - `detail.action_detail_case:(CREATE EDIT)`
  //       - `-detail.action_detail_case:MOVE`
  string filter = 8;
}

// How the individual activities are consolidated. A set of activities may be
// consolidated into one combined activity if they are related in some way, such
// as one actor performing the same action on multiple targets, or multiple
// actors performing the same action on a single target. The strategy defines
// the rules for which activities are related.
message ConsolidationStrategy {
  // A strategy which does no consolidation of individual activities.
  message NoConsolidation {

  }

  // A strategy which consolidates activities using the grouping rules from the
  // legacy V1 Activity API. Similar actions occurring within a window of time
  // can be grouped across multiple targets (such as moving a set of files at
  // once) or multiple actors (such as several users editing the same item).
  // Grouping rules for this strategy are specific to each type of action.
  message Legacy {

  }

  // How the individual activities are consolidated.
  oneof strategy {
    // The individual activities are not consolidated.
    NoConsolidation none = 1;

    // The individual activities are consolidated using the legacy strategy.
    Legacy legacy = 2;
  }
}
