Class: TrophyApiClient::UsersClient

Inherits:
Object
  • Object
show all
Defined in:
lib/trophy_api_client/users/client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request_client:) ⇒ TrophyApiClient::UsersClient

Parameters:



31
32
33
# File 'lib/trophy_api_client/users/client.rb', line 31

def initialize(request_client:)
  @request_client = request_client
end

Instance Attribute Details

#request_clientTrophyApiClient::RequestClient (readonly)



27
28
29
# File 'lib/trophy_api_client/users/client.rb', line 27

def request_client
  @request_client
end

Instance Method Details

#achievements(id:, include_incomplete: nil, request_options: nil) ⇒ Array<TrophyApiClient::UserAchievementWithStatsResponse>

Get a user’s achievements.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.achievements(id: "userId", include_incomplete: "true")

Parameters:

  • id (String)

    ID of the user.

  • include_incomplete (String) (defaults to: nil)

    When set to ‘true’, returns both completed and incomplete achievements for the user. When omitted or set to any other value, returns only completed achievements.

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
# File 'lib/trophy_api_client/users/client.rb', line 399

def achievements(id:, include_incomplete: nil, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    req.params = {
      **(request_options&.additional_query_parameters || {}),
      "includeIncomplete": include_incomplete
    }.compact
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(environment: api,
                                       request_options: request_options)}/users/#{id}/achievements"
  end
  parsed_json = JSON.parse(response.body)
  parsed_json&.map do |item|
    item = item.to_json
    TrophyApiClient::UserAchievementWithStatsResponse.from_json(json_object: item)
  end
end

#all_metrics(id:, request_options: nil) ⇒ Array<TrophyApiClient::MetricResponse>

Get a single user’s progress against all active metrics.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.all_metrics(id: "userId")

Parameters:

Returns:



271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
# File 'lib/trophy_api_client/users/client.rb', line 271

def all_metrics(id:, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(environment: api, request_options: request_options)}/users/#{id}/metrics"
  end
  parsed_json = JSON.parse(response.body)
  parsed_json&.map do |item|
    item = item.to_json
    TrophyApiClient::MetricResponse.from_json(json_object: item)
  end
end

#create(request:, request_options: nil) ⇒ TrophyApiClient::User

Create a new user.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.create(request: { id: "user-id" })

Parameters:

  • request (Hash)

    Request of type TrophyApiClient::UpsertedUser, as a Hash

    • :id (String)

    • :email (String)

    • :name (String)

    • :tz (String)

    • :device_tokens (Array<String>)

    • :subscribe_to_emails (Boolean)

    • :attributes (Hash=> String)

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/trophy_api_client/users/client.rb', line 54

def create(request:, request_options: nil)
  response = @request_client.conn.post do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    req.body = { **(request || {}), **(request_options&.additional_body_parameters || {}) }.compact
    req.url "#{@request_client.get_url(environment: api, request_options: request_options)}/users"
  end
  TrophyApiClient::User.from_json(json_object: response.body)
end

#get(id:, request_options: nil) ⇒ TrophyApiClient::User

Get a single user.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.get(id: "userId")

Parameters:

Returns:



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/trophy_api_client/users/client.rb', line 85

def get(id:, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(environment: api, request_options: request_options)}/users/#{id}"
  end
  TrophyApiClient::User.from_json(json_object: response.body)
end

#get_preferences(id:, request_options: nil) ⇒ TrophyApiClient::UserPreferencesResponse

Get a user’s notification preferences.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.get_preferences(id: "user-123")

Parameters:

Returns:



194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# File 'lib/trophy_api_client/users/client.rb', line 194

def get_preferences(id:, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(environment: api, request_options: request_options)}/users/#{id}/preferences"
  end
  TrophyApiClient::UserPreferencesResponse.from_json(json_object: response.body)
end

#identify(id:, request:, request_options: nil) ⇒ TrophyApiClient::User

Identify a user.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.identify(id: "id", request: { email: "user@example.com", tz: "Europe/London", attributes: { "department": "engineering", "role": "developer" } })

Parameters:

  • id (String)

    ID of the user to identify.

  • request (Hash)

    The user object.Request of type TrophyApiClient::UpdatedUser, as a Hash

    • :email (String)

    • :name (String)

    • :tz (String)

    • :device_tokens (Array<String>)

    • :subscribe_to_emails (Boolean)

    • :attributes (Hash=> String)

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/trophy_api_client/users/client.rb', line 125

def identify(id:, request:, request_options: nil)
  response = @request_client.conn.put do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    req.body = { **(request || {}), **(request_options&.additional_body_parameters || {}) }.compact
    req.url "#{@request_client.get_url(environment: api, request_options: request_options)}/users/#{id}"
  end
  TrophyApiClient::User.from_json(json_object: response.body)
end

#leaderboard(id:, key:, run: nil, num_events: nil, request_options: nil) ⇒ TrophyApiClient::UserLeaderboardResponseWithHistory

Get a user’s rank, value, and daily ranking history for a specific leaderboard.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.leaderboard(
  id: "user-123",
  key: "weekly-words",
  run: "2025-01-15",
  num_events: 1
)

Parameters:

  • id (String)

    The user’s ID in your database.

  • key (String)

    Unique key of the leaderboard as set when created.

  • run (String) (defaults to: nil)

    Specific run date in YYYY-MM-DD format. If not provided, returns the current run.

  • num_events (Integer) (defaults to: nil)

    The number of days to return in the leaderboard history for the user.

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
# File 'lib/trophy_api_client/users/client.rb', line 615

def leaderboard(id:, key:, run: nil, num_events: nil, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    req.params = {
      **(request_options&.additional_query_parameters || {}),
      "run": run,
      "numEvents": num_events
    }.compact
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(environment: api,
                                       request_options: request_options)}/users/#{id}/leaderboards/#{key}"
  end
  TrophyApiClient::UserLeaderboardResponseWithHistory.from_json(json_object: response.body)
end

#metric_event_summary(id:, key:, aggregation:, start_date:, end_date:, request_options: nil) ⇒ Array<TrophyApiClient::Users::UsersMetricEventSummaryResponseItem>

Get a summary of metric events over time for a user.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.metric_event_summary(
  id: "userId",
  key: "words-written",
  aggregation: DAILY,
  start_date: "2024-01-01",
  end_date: "2024-01-31"
)

Parameters:

  • id (String)

    ID of the user.

  • key (String)

    Unique key of the metric.

  • aggregation (TrophyApiClient::Users::UsersMetricEventSummaryRequestAggregation)

    The time period over which to aggregate the event data.

  • start_date (String)

    The start date for the data range in YYYY-MM-DD format. The startDate must be before the endDate, and the date range must not exceed 400 days.

  • end_date (String)

    The end date for the data range in YYYY-MM-DD format. The endDate must be after the startDate, and the date range must not exceed 400 days.

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
# File 'lib/trophy_api_client/users/client.rb', line 355

def metric_event_summary(id:, key:, aggregation:, start_date:, end_date:, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    req.params = {
      **(request_options&.additional_query_parameters || {}),
      "aggregation": aggregation,
      "startDate": start_date,
      "endDate": end_date
    }.compact
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(environment: api,
                                       request_options: request_options)}/users/#{id}/metrics/#{key}/event-summary"
  end
  parsed_json = JSON.parse(response.body)
  parsed_json&.map do |item|
    item = item.to_json
    TrophyApiClient::Users::UsersMetricEventSummaryResponseItem.from_json(json_object: item)
  end
end

#points(id:, key:, awards: nil, request_options: nil) ⇒ TrophyApiClient::GetUserPointsResponse

Get a user’s points for a specific points system.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.points(
  id: "userId",
  key: "points-system-key",
  awards: 1
)

Parameters:

  • id (String)

    ID of the user.

  • key (String)

    Key of the points system.

  • awards (Integer) (defaults to: nil)

    The number of recent point awards to return.

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
# File 'lib/trophy_api_client/users/client.rb', line 480

def points(id:, key:, awards: nil, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    req.params = { **(request_options&.additional_query_parameters || {}), "awards": awards }.compact
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(environment: api,
                                       request_options: request_options)}/users/#{id}/points/#{key}"
  end
  TrophyApiClient::GetUserPointsResponse.from_json(json_object: response.body)
end

#points_boosts(id:, key:, request_options: nil) ⇒ Array<TrophyApiClient::PointsBoost>

Get active points boosts for a user in a specific points system. Returns both

global boosts the user is eligible for and user-specific boosts.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.points_boosts(id: "userId", key: "points-system-key")

Parameters:

Returns:



514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
# File 'lib/trophy_api_client/users/client.rb', line 514

def points_boosts(id:, key:, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(environment: api,
                                       request_options: request_options)}/users/#{id}/points/#{key}/boosts"
  end
  parsed_json = JSON.parse(response.body)
  parsed_json&.map do |item|
    item = item.to_json
    TrophyApiClient::PointsBoost.from_json(json_object: item)
  end
end

#points_event_summary(id:, key:, aggregation:, start_date:, end_date:, request_options: nil) ⇒ Array<TrophyApiClient::Users::UsersPointsEventSummaryResponseItem>

Get a summary of points awards over time for a user for a specific points

system.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.points_event_summary(
  id: "userId",
  key: "points-system-key",
  aggregation: DAILY,
  start_date: "2024-01-01",
  end_date: "2024-01-31"
)

Parameters:

  • id (String)

    ID of the user.

  • key (String)

    Key of the points system.

  • aggregation (TrophyApiClient::Users::UsersPointsEventSummaryRequestAggregation)

    The time period over which to aggregate the event data.

  • start_date (String)

    The start date for the data range in YYYY-MM-DD format. The startDate must be before the endDate, and the date range must not exceed 400 days.

  • end_date (String)

    The end date for the data range in YYYY-MM-DD format. The endDate must be after the startDate, and the date range must not exceed 400 days.

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
# File 'lib/trophy_api_client/users/client.rb', line 565

def points_event_summary(id:, key:, aggregation:, start_date:, end_date:, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    req.params = {
      **(request_options&.additional_query_parameters || {}),
      "aggregation": aggregation,
      "startDate": start_date,
      "endDate": end_date
    }.compact
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(environment: api,
                                       request_options: request_options)}/users/#{id}/points/#{key}/event-summary"
  end
  parsed_json = JSON.parse(response.body)
  parsed_json&.map do |item|
    item = item.to_json
    TrophyApiClient::Users::UsersPointsEventSummaryResponseItem.from_json(json_object: item)
  end
end

#single_metric(id:, key:, request_options: nil) ⇒ TrophyApiClient::MetricResponse

Get a user’s progress against a single active metric.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.single_metric(id: "userId", key: "key")

Parameters:

Returns:



309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
# File 'lib/trophy_api_client/users/client.rb', line 309

def single_metric(id:, key:, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(environment: api,
                                       request_options: request_options)}/users/#{id}/metrics/#{key}"
  end
  TrophyApiClient::MetricResponse.from_json(json_object: response.body)
end

#streak(id:, history_periods: nil, request_options: nil) ⇒ TrophyApiClient::StreakResponse

Get a user’s streak data.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.streak(id: "userId", history_periods: 1)

Parameters:

  • id (String)

    ID of the user.

  • history_periods (Integer) (defaults to: nil)

    The number of past streak periods to include in the streakHistory field of the response.

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
# File 'lib/trophy_api_client/users/client.rb', line 440

def streak(id:, history_periods: nil, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    req.params = {
      **(request_options&.additional_query_parameters || {}),
      "historyPeriods": history_periods
    }.compact
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(environment: api, request_options: request_options)}/users/#{id}/streak"
  end
  TrophyApiClient::StreakResponse.from_json(json_object: response.body)
end

#update(id:, request:, request_options: nil) ⇒ TrophyApiClient::User

Update a user.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.update(id: "id", request: { email: "user@example.com", tz: "Europe/London", attributes: { "department": "engineering", "role": "developer" } })

Parameters:

  • id (String)

    ID of the user to update.

  • request (Hash)

    The user object.Request of type TrophyApiClient::UpdatedUser, as a Hash

    • :email (String)

    • :name (String)

    • :tz (String)

    • :device_tokens (Array<String>)

    • :subscribe_to_emails (Boolean)

    • :attributes (Hash=> String)

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
# File 'lib/trophy_api_client/users/client.rb', line 163

def update(id:, request:, request_options: nil)
  response = @request_client.conn.patch do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    req.body = { **(request || {}), **(request_options&.additional_body_parameters || {}) }.compact
    req.url "#{@request_client.get_url(environment: api, request_options: request_options)}/users/#{id}"
  end
  TrophyApiClient::User.from_json(json_object: response.body)
end

#update_preferences(id:, notifications: nil, streak: nil, request_options: nil) ⇒ TrophyApiClient::UserPreferencesResponse

Update a user’s notification and streak preferences. Streak preferences require

streak customization to be enabled in your Trophy dashboard settings.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.update_preferences(id: "user-123", notifications: { streak_reminder: [EMAIL] })

Parameters:

  • id (String)

    The user’s ID in your database.

  • notifications (Hash) (defaults to: nil)

    Request of type TrophyApiClient::NotificationPreferences, as a Hash

    • :achievement_completed (Array<TrophyApiClient::NotificationChannel>)

    • :recap (Array<TrophyApiClient::NotificationChannel>)

    • :reactivation (Array<TrophyApiClient::NotificationChannel>)

    • :streak_reminder (Array<TrophyApiClient::NotificationChannel>)

  • streak (Hash) (defaults to: nil)

    Request of type TrophyApiClient::StreakPreferences, as a Hash

    • :evaluation_mode (TrophyApiClient::StreakEvaluationModePreference)

    • :metrics (Array<TrophyApiClient::StreakMetricPreference>)

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
# File 'lib/trophy_api_client/users/client.rb', line 236

def update_preferences(id:, notifications: nil, streak: nil, request_options: nil)
  response = @request_client.conn.patch do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    unless request_options.nil? || request_options&.additional_query_parameters.nil?
      req.params = { **(request_options&.additional_query_parameters || {}) }.compact
    end
    req.body = {
      **(request_options&.additional_body_parameters || {}),
      notifications: notifications,
      streak: streak
    }.compact
    req.url "#{@request_client.get_url(environment: api, request_options: request_options)}/users/#{id}/preferences"
  end
  TrophyApiClient::UserPreferencesResponse.from_json(json_object: response.body)
end

#wrapped(id:, year: nil, request_options: nil) ⇒ TrophyApiClient::WrappedResponse

Get a user’s year-in-review wrapped data.

Examples:

api = TrophyApiClient::Client.new(
  base_url: "https://api.example.com",
  environment: TrophyApiClient::Environment::PRODUCTION,
  api_key: "YOUR_API_KEY"
)
api.users.wrapped(id: "user-123", year: 1)

Parameters:

  • id (String)

    The user’s ID in your database.

  • year (Integer) (defaults to: nil)

    The year to get wrapped data for. Defaults to the current year. Must be an integer between 1 and the current year.

  • request_options (TrophyApiClient::RequestOptions) (defaults to: nil)

Returns:



653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
# File 'lib/trophy_api_client/users/client.rb', line 653

def wrapped(id:, year: nil, request_options: nil)
  response = @request_client.conn.get do |req|
    req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
    req.headers["X-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
    req.headers["Tenant-ID"] = request_options.tenant_id unless request_options&.tenant_id.nil?
    req.headers = {
  **(req.headers || {}),
  **@request_client.get_headers,
  **(request_options&.additional_headers || {})
    }.compact
    req.params = { **(request_options&.additional_query_parameters || {}), "year": year }.compact
    unless request_options.nil? || request_options&.additional_body_parameters.nil?
      req.body = { **(request_options&.additional_body_parameters || {}) }.compact
    end
    req.url "#{@request_client.get_url(environment: api, request_options: request_options)}/users/#{id}/wrapped"
  end
  TrophyApiClient::WrappedResponse.from_json(json_object: response.body)
end