clone

a terminal ui for alamo drafthouse showtimes, as movie cards or a timeline of every screen

main
showings / internal / models / types.go
types.go 9.5K
1package models23type APIResponse struct {4 Data Data `json:"data"`5}67type Data struct {8 Presentations []Presentation `json:"presentations"`9 RelatedPresentations []interface{} `json:"relatedPresentations"`10 Market []Market `json:"market"`11 Sessions []Session `json:"sessions"`12 PresentationAttributes []PresentationAttribute `json:"presentationAttributes"`13 SessionAttributes []SessionAttribute `json:"sessionAttributes"`14 Formats []Format `json:"formats"`15 AgePolicies []AgePolicy `json:"agePolicies"`16 Queues []interface{} `json:"queues"`17}1819// GetCinema looks up a cinema by ID across all markets.20func (d *Data) GetCinema(cinemaID string) *Cinema {21 for i := range d.Market {22 for j := range d.Market[i].Cinemas {23 if d.Market[i].Cinemas[j].ID == cinemaID {24 return &d.Market[i].Cinemas[j]25 }26 }27 }28 return nil29}3031// GetFormat looks up a format by slug.32func (d *Data) GetFormat(slug string) *Format {33 for i := range d.Formats {34 if d.Formats[i].Slug == slug {35 return &d.Formats[i]36 }37 }38 return nil39}4041// GetAgePolicy looks up an age policy by slug.42func (d *Data) GetAgePolicy(slug string) *AgePolicy {43 for i := range d.AgePolicies {44 if d.AgePolicies[i].Slug == slug {45 return &d.AgePolicies[i]46 }47 }48 return nil49}5051// FilterUpcomingPresentations returns non-hidden presentations that have ONSALE sessions.52func (d *Data) FilterUpcomingPresentations() []Presentation {53 upcomingSlugs := make(map[string]bool)54 for _, session := range d.Sessions {55 if session.Status == "ONSALE" {56 upcomingSlugs[session.PresentationSlug] = true57 }58 }5960 var presentations []Presentation61 for _, p := range d.Presentations {62 if upcomingSlugs[p.Slug] && !p.IsHidden {63 presentations = append(presentations, p)64 }65 }66 return presentations67}6869// GetSessionsForPresentation returns ONSALE sessions for a given presentation slug.70func (d *Data) GetSessionsForPresentation(slug string) []Session {71 var sessions []Session72 for _, s := range d.Sessions {73 if s.PresentationSlug == slug && s.Status == "ONSALE" {74 sessions = append(sessions, s)75 }76 }77 return sessions78}7980type Presentation struct {81 Slug string `json:"slug"`82 LegacySlug *string `json:"legacySlug"`83 Show Show `json:"show"`84 Event *Event `json:"event"`85 EventType interface{} `json:"eventType"`86 FormatSlugs []string `json:"formatSlugs"`87 PresentationAttributeSlugs []string `json:"presentationAttributeSlugs"`88 AssociatedPresentationSlugs []string `json:"associatedPresentationSlugs"`89 OpeningDateClt *string `json:"openingDateClt"`90 OpeningDateDisplay *string `json:"openingDateDisplay"`91 SuperTitle interface{} `json:"superTitle"`92 IsHidden bool `json:"isHidden"`93 PrimaryCollectionSlug *string `json:"primaryCollectionSlug"`94 IsAvailableForPersonalTheater bool `json:"isAvailableForPersonalTheater"`95}9697type Show struct {98 Slug string `json:"slug"`99 LegacySlug *string `json:"legacySlug"`100 Title string `json:"title"`101 VistaHoCodes []string `json:"vistaHoCodes"`102 Headline string `json:"headline"`103 LandscapeHeroImage Image `json:"landscapeHeroImage"`104 PortraitHeroImage Image `json:"portraitHeroImage"`105 PosterImages []Image `json:"posterImages"`106 Certification string `json:"certification"`107}108109type Image struct {110 URI string `json:"uri"`111 AltText string `json:"altText"`112}113114type Event struct {115 Slug string `json:"slug"`116 Title string `json:"title"`117 EventTypeSlug string `json:"eventTypeSlug"`118 EventTypeTitleOverride *string `json:"eventTypeTitleOverride"`119 Headline string `json:"headline"`120 Description string `json:"description"`121}122123type Session struct {124 CinemaId string `json:"cinemaId"`125 SessionId string `json:"sessionId"`126 PresentationSlug string `json:"presentationSlug"`127 LegacySlug string `json:"legacySlug"`128 Status string `json:"status"`129 BusinessDateClt string `json:"businessDateClt"`130 ShowTimeClt string `json:"showTimeClt"`131 CinemaTimeZoneName string `json:"cinemaTimeZoneName"`132 ShowTimeUtc string `json:"showTimeUtc"`133 TicketTypesLoyaltyCount int `json:"ticketTypesLoyaltyCount"`134 TicketTypesVoucherCount int `json:"ticketTypesVoucherCount"`135 TicketTypesNormalCount int `json:"ticketTypesNormalCount"`136 ReservedSeating bool `json:"reservedSeating"`137 ScreenNumber string `json:"screenNumber"`138 FormatSlug string `json:"formatSlug"`139 IsClosedCaptioningAvailable bool `json:"isClosedCaptioningAvailable"`140 IsDescriptiveAudioAvailable bool `json:"isDescriptiveAudioAvailable"`141 IsAssistedListeningAvailable bool `json:"isAssistedListeningAvailable"`142 SessionAttributeSlugs []string `json:"sessionAttributeSlugs"`143 RecognitionIds []string `json:"recognitionIds"`144 AgePolicySlug string `json:"agePolicySlug"`145 IsHidden bool `json:"isHidden"`146 TicketingExperience string `json:"ticketingExperience"`147}148149type Market struct {150 ID string `json:"id"`151 Slug string `json:"slug"`152 Name string `json:"name"`153 Status string `json:"status"`154 SubscriptionProgramStatus string `json:"subscriptionProgramStatus"`155 IsOpenAccessSeasonPassMarket bool `json:"isOpenAccessSeasonPassMarket"`156 IsOpenForBusiness bool `json:"isOpenForBusiness"`157 IsFoodPreorderRequired bool `json:"isFoodPreorderRequired"`158 FoodPreorderAvailability string `json:"foodPreorderAvailability"`159 IsMaxSafetyOperation bool `json:"isMaxSafetyOperation"`160 Cinemas []Cinema `json:"cinemas"`161 MarketStrings []MarketString `json:"marketStrings"`162}163164type Cinema struct {165 ID string `json:"id"`166 LoyaltyCinemaId string `json:"loyaltyCinemaId"`167 Slug string `json:"slug"`168 Name string `json:"name"`169 Status string `json:"status"`170 TimeZoneName string `json:"timeZoneName"`171 Latitude float64 `json:"latitude"`172 Longitude float64 `json:"longitude"`173 Street1 string `json:"street1"`174 Street2 *string `json:"street2"`175 City string `json:"city"`176 State string `json:"state"`177 PostalCode string `json:"postalCode"`178 Phone string `json:"phone"`179 Email string `json:"email"`180 HeroImageUrl string `json:"heroImageUrl"`181 GoogleMapsUrl string `json:"googleMapsUrl"`182 AppleMapsUrl string `json:"appleMapsUrl"`183 AttachedBar AttachedBar `json:"attachedBar"`184 IsClosedCaptioningAvailable bool `json:"isClosedCaptioningAvailable"`185 IsDescriptiveAudioAvailable bool `json:"isDescriptiveAudioAvailable"`186 IsAssistedListeningAvailable bool `json:"isAssistedListeningAvailable"`187 Menus Menus `json:"menus"`188 FoodPreorderAvailability string `json:"foodPreorderAvailability"`189 ParkingNotice string `json:"parkingNotice"`190 PostPurchaseNotice PostPurchaseNotice `json:"postPurchaseNotice"`191 IsWageNoticeDisplayed bool `json:"isWageNoticeDisplayed"`192}193194type AttachedBar struct {195 Name string `json:"name"`196 WebsiteURL string `json:"websiteUrl"`197}198199type Menus struct {200 TheaterMenuPdf string `json:"theaterMenuPdf"`201}202203type PostPurchaseNotice struct {204}205206type MarketString struct {207 Key string `json:"key"`208 Value string `json:"value"`209}210211type PresentationAttribute struct {212 Slug string `json:"slug"`213 Name string `json:"name"`214 Description string `json:"description"`215 IsUserVisible bool `json:"isUserVisible"`216 IsUserFilterable bool `json:"isUserFilterable"`217}218219type SessionAttribute struct {220 Slug string `json:"slug"`221 Name string `json:"name"`222 Description string `json:"description"`223 IsUserVisible bool `json:"isUserVisible"`224 IsUserFilterable bool `json:"isUserFilterable"`225}226227type Format struct {228 Slug string `json:"slug"`229 VistaSlug *string `json:"vistaSlug"`230 Title string `json:"title"`231 Headline string `json:"headline"`232 Description string `json:"description"`233 TitleTreatmentImage Image `json:"titleTreatmentImage"`234 HeroImage *Image `json:"heroImage"`235}236237type AgePolicy struct {238 Slug string `json:"slug"`239 Name string `json:"name"`240 Description string `json:"description"`241}