# GoogleUser Class
## Overview
`GoogleUser` is the Google People API client within 4D NetKit. It provides read access to user profiles (names, email addresses, and other person fields) via the `people.get`, `people.getBatchGet`, and `people.listDirectoryPeople` endpoints.
A `GoogleUser` object is accessed via the `user` property of a [Google](./Google.md) object: `$google.user`.
## Table of Contents
### Functions
* [.get()](#get)
* [.getCurrent()](#getcurrent)
* [.list()](#list)
## Functions
### .get()
**.get**( *id* : Text { ; *select* : Text } ) : Object
**.get**( *id* : Text { ; *select* : Collection } ) : Object
#### Parameters
| Parameter | Type | | Description |
|---|---|:---:|---|
| id | Text | -> | The `resourceName` of the person to retrieve information about (e.g., `"people/c123456"`). Use the `resourceName` field returned by [`.list()`](#list). |
| select | Text \| Collection | -> | Comma-separated list or collection of specific fields to retrieve (e.g., `"names, phoneNumbers"`). If omitted, returns `emailAddresses` and `names`. |
| Result | Object | <- | [People API person resource](https://developers.google.com/people/api/rest/v1/people#Person) object, or `Null` on error. |
#### Description
`.get()` provides information about a user based on the `resourceName` provided in `id` and the fields optionally specified in `select`.
Supported fields include: *addresses*, *ageRanges*, *biographies*, *birthdays*, *calendarUrls*, *clientData*, *coverPhotos*, *emailAddresses*, *events*, *externalIds*, *genders*, *imClients*, *interests*, *locales*, *locations*, *memberships*, *metadata*, *miscKeywords*, *names*, *nicknames*, *occupations*, *organizations*, *phoneNumbers*, *photos*, *relations*, *sipAddresses*, *skills*, *urls*, *userDefined*.
#### Permissions
No authorization required to access public data. For private data, one of the following OAuth scopes is required:
```
https://www.googleapis.com/auth/contacts
https://www.googleapis.com/auth/contacts.readonly
https://www.googleapis.com/auth/contacts.other.readonly
https://www.googleapis.com/auth/directory.readonly
https://www.googleapis.com/auth/profile.agerange.read
https://www.googleapis.com/auth/profile.emails.read
https://www.googleapis.com/auth/profile.language.read
https://www.googleapis.com/auth/user.addresses.read
https://www.googleapis.com/auth/user.birthday.read
https://www.googleapis.com/auth/user.emails.read
https://www.googleapis.com/auth/user.gender.read
https://www.googleapis.com/auth/user.organization.read
https://www.googleapis.com/auth/user.phonenumbers.read
https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile
```
### .getCurrent()
**.getCurrent**( { *select* : Text } ) : Object
**.getCurrent**( { *select* : Collection } ) : Object
#### Parameters
| Parameter | Type | | Description |
|---|---|:---:|---|
| select | Text \| Collection | -> | Comma-separated list or collection of specific fields to retrieve (e.g., `"names, phoneNumbers"`). If omitted, returns `emailAddresses` and `names`. |
| Result | Object | <- | [People API person resource](https://developers.google.com/people/api/rest/v1/people#Person) for the authenticated user. |
#### Description
`.getCurrent()` provides information about the currently authenticated user, based on the fields optionally specified in `select`.
Supported fields are the same as [`.get()`](#get).
#### Permissions
Requires the same OAuth scopes as [`.get()`](#permissions).
#### Example
```4d
var $google : cs.NetKit.Google
var $oauth2 : cs.NetKit.OAuth2Provider
var $param : Object
$param:={}
$param.name:="google"
$param.permission:="signedIn"
$param.clientId:="your-client-id"
$param.clientSecret:="xxxxxxxxx"
$param.redirectURI:="http://127.0.0.1:50993/authorize/"
$param.scope:=[]
$param.scope.push("https://www.googleapis.com/auth/contacts")
$param.scope.push("https://www.googleapis.com/auth/userinfo.email")
$param.scope.push("https://www.googleapis.com/auth/userinfo.profile")
$oauth2:=New OAuth2 provider($param)
$google:=cs.NetKit.Google.new($oauth2)
// Returns emailAddresses and names by default
var $currentUser1:=$google.user.getCurrent()
// Returns only phoneNumbers
var $currentUser2:=$google.user.getCurrent("phoneNumbers")
```
### .list()
**.list**( { *param* : Object } ) : [cs.NetKit.GoogleUserList](./GoogleUserList.md)
#### Parameters
| Parameter | Type | | Description |
|---|---|:---:|---|
| param | Object | -> | Options defining how to retrieve and filter user data (optional). |
| Result | [cs.NetKit.GoogleUserList](./GoogleUserList.md) | <- | Paginated list of [user objects](https://developers.google.com/people/api/rest/v1/people#Person). Use `next()` / `previous()` to navigate pages. |
#### Description
`.list()` provides a list of domain profiles or domain contacts in the authenticated user's domain directory.
> If contact sharing or External Directory sharing is not allowed in the Google admin console, the returned `users` collection will be empty.
In *param*, you can pass the following properties:
| Property | Type | Description |
|---|---|---|
| select | Text \| Collection | Comma-separated list or collection of fields to retrieve (e.g., `"names, phoneNumbers"`). Defaults to `emailAddresses` and `names`. |
| sources | Text \| Collection | Directory source to return. Values: `"DIRECTORY_SOURCE_TYPE_UNSPECIFIED"`, `"DIRECTORY_SOURCE_TYPE_DOMAIN_CONTACT"`, `"DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE"` (default). |
| mergeSources | Text \| Collection | Adds related data if linked by verified join keys (e.g., email, phone). Values: `"DIRECTORY_MERGE_SOURCE_TYPE_UNSPECIFIED"`, `"DIRECTORY_MERGE_SOURCE_TYPE_CONTACT"`. |
| top | Integer | Maximum number of people per page (1–1000). Default is 100. |
#### Permissions
Requires the same OAuth scopes as [`.get()`](#permissions).
#### Example
```4d
var $google : cs.NetKit.Google
var $oauth2 : cs.NetKit.OAuth2Provider
var $param : Object
$param:={}
$param.name:="google"
$param.permission:="signedIn"
$param.clientId:="your-client-id"
$param.clientSecret:="xxxxxxxxx"
$param.redirectURI:="http://127.0.0.1:50993/authorize/"
$param.scope:=[]
$param.scope.push("https://www.googleapis.com/auth/contacts")
$param.scope.push("https://www.googleapis.com/auth/directory.readonly")
$param.scope.push("https://www.googleapis.com/auth/userinfo.email")
$param.scope.push("https://www.googleapis.com/auth/userinfo.profile")
$oauth2:=New OAuth2 provider($param)
$google:=cs.NetKit.Google.new($oauth2)
var $userList:=$google.user.list({top: 10})
```
## See also
* [GoogleUserList](./GoogleUserList.md)
* [Google](./Google.md)