Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Detailed event reports #14

Merged
merged 1 commit into from
Aug 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
178 changes: 178 additions & 0 deletions reports/event_reports.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,184 @@ type EventSummaryReportItem struct {
ByChannel map[string]int `json:"byChannel,omitempty"`
}

const (
NoOrderId string = "NO_ORDER_ID"
NoSection string = "NO_SECTION"
Available string = "available"
NoChannel string = "NO_CHANNEL"
NoCategory string = "NO_CATEGORY"
NotAvailable string = "not_available"
NotForSale string = "not_for_sale"
Free string = "free"
Booked string = "booked"
Held string = "reservedByToken"
)

type LabelAndType struct {
Label string `json:"label,omitempty"`
LabelType string `json:"type,omitempty"`
}

type Labels struct {
Own LabelAndType `json:"own,omitempty"`
Parent LabelAndType `json:"parent,omitempty"`
Section string `json:"section,omitempty"`
}

type IDs struct {
Own string `json:"own,omitempty"`
Parent string `json:"parent,omitempty"`
Section string `json:"section,omitempty"`
}

type EventObjectInfo struct {
Status string `json:"status,omitempty"`
Label string `json:"label,omitempty"`
Labels Labels `json:"labels,omitempty"`
IDs IDs `json:"ids,omitempty"`
CategoryLabel string `json:"categoryLabel,omitempty"`
CategoryKey string `json:"categoryKey,omitempty"`
TicketType string `json:"ticketType,omitempty"`
HoldToken string `json:"holdToken,omitempty"`
ObjectType string `json:"objectType,omitempty"`
BookAsAWhole bool `json:"bookAsAWhole"`
OrderId string `json:"orderId,omitempty"`
ForSale bool `json:"forSale"`
Section string `json:"section,omitempty"`
Entrance string `json:"entrance,omitempty"`
Capacity int32 `json:"capacity"`
NumBooked int32 `json:"numBooked"`
NumFree int32 `json:"numFree"`
NumHeld int32 `json:"numHeld"`
NumSeats int32 `json:"numSeats"`
ExtraData map[string]interface{} `json:"extraData,omitempty"`
IsAccessible bool `json:"isAccessible"`
IsCompanionSeat bool `json:"isCompanionSeat"`
HasRestrictedView bool `json:"hasRestrictedView"`
DisplayedObjectType string `json:"displayedObjectType,omitempty"`
LeftNeighbour string `json:"leftNeighbour,omitempty"`
RightNeighbour string `json:"rightNeighbour,omitempty"`
IsAvailable bool `json:"isAvailable"`
AvailabilityReason string `json:"availabilityReason,omitempty"`
Channel string `json:"channel,omitempty"`
DistanceToFocalPoint float64 `json:"distanceToFocalPoint"`
Holds map[string]map[string]int32 `json:"holds,omitempty"`
}

type DetailedEventReport struct {
Items map[string][]EventObjectInfo
}

func (reports *EventReports) fetchReport(eventKey string, reportType string) (*DetailedEventReport, error) {
var report map[string][]EventObjectInfo
result, err := reports.Client.R().
SetSuccessResult(&report).
SetPathParam("eventKey", eventKey).
SetPathParam("reportType", reportType).
Get("/reports/events/{eventKey}/{reportType}")
return shared.AssertOk(result, err, &DetailedEventReport{Items: report})
}

func (reports *EventReports) fetchReportWithFilter(eventKey string, reportType string, filter string) ([]EventObjectInfo, error) {
var report map[string][]EventObjectInfo
result, err := reports.Client.R().
SetSuccessResult(&report).
SetPathParam("eventKey", eventKey).
SetPathParam("reportType", reportType).
SetPathParam("filter", filter).
Get("/reports/events/{eventKey}/{reportType}/{filter}")
ok, err := shared.AssertOk(result, err, &DetailedEventReport{Items: report})
if err == nil {
return reports.doCast(ok).Items[filter], nil
} else {
return nil, err
}
}

func (reports *EventReports) doCast(report *DetailedEventReport) *DetailedEventReport {
return report
}

func (reports *EventReports) ByAvailabilityReason(eventKey string) (*DetailedEventReport, error) {
return reports.fetchReport(eventKey, "byAvailabilityReason")
}

func (reports *EventReports) BySpecificAvailabilityReason(eventKey string, reason string) ([]EventObjectInfo, error) {
return reports.fetchReportWithFilter(eventKey, "byAvailabilityReason", reason)
}

func (reports *EventReports) ByAvailability(eventKey string) (*DetailedEventReport, error) {
return reports.fetchReport(eventKey, "byAvailability")
}

func (reports *EventReports) BySpecificAvailability(eventKey string, availability string) ([]EventObjectInfo, error) {
return reports.fetchReportWithFilter(eventKey, "byAvailability", availability)
}

func (reports *EventReports) ByStatus(eventKey string) (*DetailedEventReport, error) {
return reports.fetchReport(eventKey, "byStatus")
}

func (reports *EventReports) BySpecificStatus(eventKey string, status string) ([]EventObjectInfo, error) {
return reports.fetchReportWithFilter(eventKey, "byStatus", status)
}

func (reports *EventReports) ByCategoryLabel(eventKey string) (*DetailedEventReport, error) {
return reports.fetchReport(eventKey, "byCategoryLabel")
}

func (reports *EventReports) BySpecificCategoryLabel(eventKey string, label string) ([]EventObjectInfo, error) {
return reports.fetchReportWithFilter(eventKey, "byCategoryLabel", label)
}

func (reports *EventReports) ByCategoryKey(eventKey string) (*DetailedEventReport, error) {
return reports.fetchReport(eventKey, "byCategoryKey")
}

func (reports *EventReports) BySpecificCategoryKey(eventKey string, key string) ([]EventObjectInfo, error) {
return reports.fetchReportWithFilter(eventKey, "byCategoryKey", key)
}

func (reports *EventReports) ByLabel(eventKey string) (*DetailedEventReport, error) {
return reports.fetchReport(eventKey, "byLabel")
}

func (reports *EventReports) BySpecificLabel(eventKey string, label string) ([]EventObjectInfo, error) {
return reports.fetchReportWithFilter(eventKey, "byLabel", label)
}

func (reports *EventReports) ByOrderId(eventKey string) (*DetailedEventReport, error) {
return reports.fetchReport(eventKey, "byOrderId")
}

func (reports *EventReports) BySpecificOrderId(eventKey string, orderId string) ([]EventObjectInfo, error) {
return reports.fetchReportWithFilter(eventKey, "byOrderId", orderId)
}

func (reports *EventReports) BySection(eventKey string) (*DetailedEventReport, error) {
return reports.fetchReport(eventKey, "bySection")
}

func (reports *EventReports) BySpecificSection(eventKey string, section string) ([]EventObjectInfo, error) {
return reports.fetchReportWithFilter(eventKey, "bySection", section)
}

func (reports *EventReports) ByChannel(eventKey string) (*DetailedEventReport, error) {
return reports.fetchReport(eventKey, "byChannel")
}

func (reports *EventReports) BySpecificChannel(eventKey string, channel string) ([]EventObjectInfo, error) {
return reports.fetchReportWithFilter(eventKey, "byChannel", channel)
}

func (reports *EventReports) ByObjectType(eventKey string) (*DetailedEventReport, error) {
return reports.fetchReport(eventKey, "byObjectType")
}

func (reports *EventReports) BySpecificObjectType(eventKey string, objectType string) ([]EventObjectInfo, error) {
return reports.fetchReportWithFilter(eventKey, "byObjectType", objectType)
}

func (reports *EventReports) SummaryByStatus(eventKey string) (*EventSummaryReport, error) {
return reports.fetchEventSummaryReport("byStatus", eventKey)
}
Expand Down
Loading