syntax = "proto3";

package controller.api.resources.users.v1;

option go_package = "github.com/hashicorp/boundary/internal/gen/controller/api/resources/users;users";

import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";
import "controller/api/resources/scopes/v1/scope.proto";
import "controller/custom_options/v1/options.proto";

message Account {
	// Output only. The ID of the Account.
	string id = 10;

	// Output only. The Scope containing the Account.
	string scope_id = 20 [json_name="scope_id"];
}

// User contains all fields related to a User resource
message User {
	// Output only. The ID of the User.
	string id = 10;

	// The ID of the Scope this resource is in.
	string scope_id = 20 [json_name="scope_id"];

	// Output only. Scope information for this resource.
	resources.scopes.v1.ScopeInfo scope = 30;
	
	// Optional name for identification purposes.
	google.protobuf.StringValue name = 40 [(custom_options.v1.generate_sdk_option) = true, (custom_options.v1.mask_mapping) = {this:"name" that: "name"}];

	// Optional user-set description for identification purposes.
	google.protobuf.StringValue description = 50 [(custom_options.v1.generate_sdk_option) = true, (custom_options.v1.mask_mapping) = {this:"description" that: "description"}];

	// Output only. The time this resource was created.
	google.protobuf.Timestamp created_time = 60 [json_name="created_time"];

	// Output only. The time this resource was last updated.
	google.protobuf.Timestamp updated_time = 70 [json_name="updated_time"];

	// Version is used in mutation requests, after the initial creation, to ensure this resource has not changed.
  // The mutation will fail if the version does not match the latest known good version.
	uint32 version = 80;

	// Output only. Contains the list of Account IDs linked to this User.
	repeated string account_ids = 90 [json_name="account_ids"];

	// Output only. The Accounts linked to this User.
	repeated Account accounts = 100;
}
