Class: SeatLayer::Events

Inherits:
Resource show all
Defined in:
lib/seatlayer/resources.rb

Overview

Event lifecycle, metadata and reports.

Constant Summary

Constants inherited from Resource

Resource::UNSET

Instance Method Summary collapse

Methods inherited from Resource

#initialize

Constructor Details

This class inherits a constructor from SeatLayer::Resource

Instance Method Details

#archive(event_key) ⇒ Object



232
233
234
# File 'lib/seatlayer/resources.rb', line 232

def archive(event_key)
  @client.post("/v1/events/#{encode(event_key)}/archive")
end

#close(event_key) ⇒ Object

Stop buyer sales. Existing holds keep their TTL.



224
225
226
# File 'lib/seatlayer/resources.rb', line 224

def close(event_key)
  @client.post("/v1/events/#{encode(event_key)}/close")
end

#close_ticket_release(event_key, release_id) ⇒ Object

Close one release while preserving its audit provenance.



256
257
258
# File 'lib/seatlayer/resources.rb', line 256

def close_ticket_release(event_key, release_id)
  @client.post("/v1/events/#{encode(event_key)}/releases/#{encode(release_id)}/close")
end

#create(chart_id:, name: nil, slug: nil, starts_at: UNSET, venue: UNSET, external_ref: UNSET, currency: UNSET, idempotency_key: nil, description: UNSET, ends_at: UNSET, timezone: UNSET, locale: UNSET, poster_asset_id: UNSET, mode: nil) ⇒ Object

rubocop:disable Metrics/ParameterLists



179
180
181
182
183
184
185
186
187
188
189
190
191
192
# File 'lib/seatlayer/resources.rb', line 179

def create(chart_id:, name: nil, slug: nil, starts_at: UNSET, venue: UNSET,
           external_ref: UNSET, currency: UNSET, idempotency_key: nil,
           description: UNSET, ends_at: UNSET, timezone: UNSET, locale: UNSET,
           poster_asset_id: UNSET, mode: nil)
  body = compact({ "chartId" => chart_id, "name" => name, "slug" => slug, "mode" => mode })
  body.merge!(supplied({ "startsAt" => starts_at, "venue" => venue,
                         "externalRef" => external_ref, "currency" => currency,
                         "description" => description, "endsAt" => ends_at,
                         "timezone" => timezone, "locale" => locale,
                         "posterAssetId" => poster_asset_id }))
  @client.post(
    "/v1/events", body, idempotency_key: idempotency_key, retry_policy: :header_replay
  )
end

#delete(event_key) ⇒ Object



203
204
205
# File 'lib/seatlayer/resources.rb', line 203

def delete(event_key)
  @client.delete("/v1/events/#{encode(event_key)}")
end

#delete_poster(event_key) ⇒ Object



212
213
214
# File 'lib/seatlayer/resources.rb', line 212

def delete_poster(event_key)
  @client.delete("/v1/events/#{encode(event_key)}/poster")
end

#list(workspace_id: nil, external_ref: nil, limit: nil, cursor: nil, counts: true) ⇒ Object

One page of events.

Live availability counts cost one round-trip per event server-side. They are on by default because most callers of a single page want them; pass counts: false when paging a whole catalogue.



156
157
158
159
160
161
# File 'lib/seatlayer/resources.rb', line 156

def list(workspace_id: nil, external_ref: nil, limit: nil, cursor: nil, counts: true)
  query = compact({ "workspaceId" => workspace_id, "externalRef" => external_ref,
                    "limit" => limit, "cursor" => cursor })
  query["counts"] = "0" unless counts
  @client.get("/v1/events", query)
end

#list_all(counts: false, **options, &block) ⇒ Object

Every event, paging transparently. Counts default off here — you are walking the whole list, so per-event availability is rarely what you want and always what it costs.



166
167
168
169
170
171
172
173
174
175
176
# File 'lib/seatlayer/resources.rb', line 166

def list_all(counts: false, **options, &block)
  return enum_for(:list_all, counts: counts, **options) unless block_given?

  cursor = nil
  loop do
    page = list(**options, counts: counts, cursor: cursor)
    Array(page["events"]).each(&block)
    cursor = page["nextCursor"]
    break if cursor.nil? || cursor.empty?
  end
end

#list_ticket_releases(event_key) ⇒ Object



245
246
247
# File 'lib/seatlayer/resources.rb', line 245

def list_ticket_releases(event_key)
  @client.get("/v1/events/#{encode(event_key)}/releases")
end

#reopen(event_key) ⇒ Object



228
229
230
# File 'lib/seatlayer/resources.rb', line 228

def reopen(event_key)
  @client.post("/v1/events/#{encode(event_key)}/reopen")
end

#retrieve(event_key) ⇒ Object

rubocop:enable Metrics/ParameterLists



195
196
197
# File 'lib/seatlayer/resources.rb', line 195

def retrieve(event_key)
  @client.get("/v1/events/#{encode(event_key)}")
end

#retrieve_hold_ttl(event_key) ⇒ Object



236
237
238
# File 'lib/seatlayer/resources.rb', line 236

def retrieve_hold_ttl(event_key)
  @client.get("/v1/events/#{encode(event_key)}/hold-ttl")
end

#retrieve_log(event_key, limit: nil, before: nil) ⇒ Object



264
265
266
267
# File 'lib/seatlayer/resources.rb', line 264

def retrieve_log(event_key, limit: nil, before: nil)
  @client.get("/v1/events/#{encode(event_key)}/log",
              compact({ "limit" => limit, "before" => before }))
end

#retrieve_report(event_key) ⇒ Object



260
261
262
# File 'lib/seatlayer/resources.rb', line 260

def retrieve_report(event_key)
  @client.get("/v1/events/#{encode(event_key)}/report")
end

#update(event_key, fields) ⇒ Object



199
200
201
# File 'lib/seatlayer/resources.rb', line 199

def update(event_key, fields)
  @client.patch("/v1/events/#{encode(event_key)}", fields)
end

#update_chart(event_key, acknowledge_dropped_assignments: nil, reason: nil) ⇒ Object

Move a live event onto the latest published version of its chart.



217
218
219
220
221
# File 'lib/seatlayer/resources.rb', line 217

def update_chart(event_key, acknowledge_dropped_assignments: nil, reason: nil)
  body = compact({ "acknowledgeDroppedAssignments" => acknowledge_dropped_assignments,
                   "reason" => reason })
  @client.post("/v1/events/#{encode(event_key)}/update-chart", body)
end

#update_hold_ttl(event_key, hold_ttl_ms) ⇒ Object



240
241
242
243
# File 'lib/seatlayer/resources.rb', line 240

def update_hold_ttl(event_key, hold_ttl_ms)
  # +nil+ restores the event default and must remain an explicit JSON null.
  @client.post("/v1/events/#{encode(event_key)}/hold-ttl", { "holdTtlMs" => hold_ttl_ms })
end

#update_poster(event_key, image, content_type: "application/octet-stream") ⇒ Object

Upload raw PNG, JPEG, or WebP bytes (maximum 5 MiB).



208
209
210
# File 'lib/seatlayer/resources.rb', line 208

def update_poster(event_key, image, content_type: "application/octet-stream")
  @client.put_raw("/v1/events/#{encode(event_key)}/poster", image, content_type: content_type)
end

#update_ticket_releases(event_key, releases:) ⇒ Object

Replace every ticket release for an event. This stays single-attempt: the route does not promise exact idempotent-response replay.



251
252
253
# File 'lib/seatlayer/resources.rb', line 251

def update_ticket_releases(event_key, releases:)
  @client.put("/v1/events/#{encode(event_key)}/releases", { "releases" => releases })
end