| |
|
|
| package openmeter |
|
|
| import ( |
| "context" |
| "iter" |
| "net/http" |
| "net/url" |
| ) |
|
|
| type EventsService struct { |
| client *Client |
| } |
|
|
| type IngestedEventFilter struct { |
| |
| ID *StringFilter |
| |
| Source *StringFilter |
| |
| Subject *StringFilter |
| |
| Type *StringFilter |
| |
| CustomerID *StringExactFilter |
| |
| Time *DateTimeFilter |
| |
| IngestedAt *DateTimeFilter |
| |
| StoredAt *DateTimeFilter |
| } |
|
|
| type IngestedEventListParams struct { |
| Page *CursorPageParams |
| Filter *IngestedEventFilter |
| Sort *Sort |
| } |
|
|
| func (p IngestedEventListParams) values() url.Values { |
| q := url.Values{} |
|
|
| addCursorPageParams(q, p.Page) |
|
|
| if p.Filter != nil { |
| addStringFilter(q, "filter[id]", p.Filter.ID) |
| addStringFilter(q, "filter[source]", p.Filter.Source) |
| addStringFilter(q, "filter[subject]", p.Filter.Subject) |
| addStringFilter(q, "filter[type]", p.Filter.Type) |
| addStringExactFilter(q, "filter[customer_id]", p.Filter.CustomerID) |
| addDateTimeFilter(q, "filter[time]", p.Filter.Time) |
| addDateTimeFilter(q, "filter[ingested_at]", p.Filter.IngestedAt) |
| addDateTimeFilter(q, "filter[stored_at]", p.Filter.StoredAt) |
| } |
|
|
| addSort(q, "sort", p.Sort) |
|
|
| return q |
| } |
|
|
| |
| func (s *EventsService) List(ctx context.Context, params IngestedEventListParams) (*IngestedEventPaginatedResponse, error) { |
| path := "/openmeter/events" |
|
|
| req, err := s.client.newRequestWithContentType(ctx, http.MethodGet, path, params.values(), nil, "", "application/json") |
| if err != nil { |
| return nil, err |
| } |
|
|
| var out IngestedEventPaginatedResponse |
| if err := s.client.doJSON(req, &out); err != nil { |
| return nil, err |
| } |
|
|
| return &out, nil |
| } |
|
|
| |
| func (s *EventsService) ListAll(ctx context.Context, params IngestedEventListParams) iter.Seq2[IngestedEvent, error] { |
| return paginateCursor(params.Page, func(after, before *string, size int) ([]IngestedEvent, *string, *string, error) { |
| pageParams := params |
| pageParams.Page = &CursorPageParams{Size: Int(size), After: after, Before: before} |
|
|
| resp, err := s.List(ctx, pageParams) |
| if err != nil { |
| return nil, nil, nil, err |
| } |
|
|
| return resp.Data, String(resp.Meta.Page.Next.GetOrEmpty()), String(resp.Meta.Page.Previous.GetOrEmpty()), nil |
| }) |
| } |
|
|
| |
| func (s *EventsService) IngestEvent(ctx context.Context, request EventInput) error { |
| path := "/openmeter/events" |
|
|
| req, err := s.client.newRequestWithContentType(ctx, http.MethodPost, path, nil, request, "application/cloudevents+json", "") |
| if err != nil { |
| return err |
| } |
|
|
| _, err = s.client.doRaw(req) |
| return err |
| } |
|
|
| func (s *EventsService) IngestEvents(ctx context.Context, request []EventInput) error { |
| path := "/openmeter/events" |
|
|
| req, err := s.client.newRequestWithContentType(ctx, http.MethodPost, path, nil, request, "application/cloudevents-batch+json", "") |
| if err != nil { |
| return err |
| } |
|
|
| _, err = s.client.doRaw(req) |
| return err |
| } |
|
|
| func (s *EventsService) IngestEventsJSON(ctx context.Context, request OneOrMany[EventInput]) error { |
| path := "/openmeter/events" |
|
|
| req, err := s.client.newRequestWithContentType(ctx, http.MethodPost, path, nil, request, "application/json", "") |
| if err != nil { |
| return err |
| } |
|
|
| _, err = s.client.doRaw(req) |
| return err |
| } |
|
|