Skip to content

Commit

Permalink
Move to combining gloabl and ticket configs
Browse files Browse the repository at this point in the history
  • Loading branch information
ahobsonsayers committed Oct 7, 2024
1 parent 878b874 commit f05460c
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 54 deletions.
28 changes: 14 additions & 14 deletions cmd/twitchets/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,43 +42,43 @@ func (c Config) Validate() error {
return nil
}

func (c Config) Filters() []twickets.Filter {
filters := make([]twickets.Filter, 0, len(c.TicketsConfig))
func (c Config) CombineGlobalAndTicketConfig() []TicketConfig {
combinedConfigs := make([]TicketConfig, 0, len(c.TicketsConfig))
for _, ticketConfig := range c.TicketsConfig {

var filter twickets.Filter
filter.Event = ticketConfig.Event
var combinedConfig TicketConfig
combinedConfig.Event = ticketConfig.Event

// Set name similarity
if ticketConfig.EventSimilarity == nil {
filter.EventSimilarity = c.GlobalConfig.EventSimilarity
combinedConfig.EventSimilarity = &c.GlobalConfig.EventSimilarity
} else if *ticketConfig.EventSimilarity > 0 {
filter.EventSimilarity = *ticketConfig.EventSimilarity
combinedConfig.EventSimilarity = ticketConfig.EventSimilarity
}

// Set regions
if ticketConfig.Regions == nil {
filter.Regions = c.GlobalConfig.Regions
combinedConfig.Regions = c.GlobalConfig.Regions
} else {
filter.Regions = ticketConfig.Regions
combinedConfig.Regions = ticketConfig.Regions
}

// Set num tickets
if ticketConfig.NumTickets == nil {
filter.NumTickets = c.GlobalConfig.NumTickets
combinedConfig.NumTickets = &c.GlobalConfig.NumTickets
} else if *ticketConfig.NumTickets > 0 {
filter.NumTickets = *ticketConfig.NumTickets
combinedConfig.NumTickets = ticketConfig.NumTickets
}

// Set discount
if ticketConfig.Discount == nil {
filter.Discount = c.GlobalConfig.Discount
combinedConfig.Discount = &c.GlobalConfig.Discount
} else if *ticketConfig.Discount > 0 {
filter.Discount = *ticketConfig.Discount
combinedConfig.Discount = ticketConfig.Discount
}

filters = append(filters, filter)
combinedConfigs = append(combinedConfigs, combinedConfig)
}

return filters
return combinedConfigs
}
44 changes: 22 additions & 22 deletions cmd/twitchets/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,68 +83,68 @@ func TestLoadConfig(t *testing.T) {
require.EqualValues(t, expectedConfig, actualConfig)
}

func TestConfigFilters(t *testing.T) {
func TestCombineConfigs(t *testing.T) {
configPath := testutils.ProjectDirectoryJoin(t, "test", "testdata", "config", "config.yaml")
conf, err := config.Load(configPath)
require.NoError(t, err)

actualFilters := conf.Filters()
actualCombinedConfigs := conf.CombineGlobalAndTicketConfig()

globalEventSimilarity := 75.0
globalRegions := []twickets.Region{twickets.RegionLondon, twickets.RegionNorthWest}
globalNumTickets := 2
globalDiscount := 25.0

expectedFilters := []twickets.Filter{
expectedCombinedConfigs := []config.TicketConfig{
{
// Ticket with only event name set
Event: "Event 1",
EventSimilarity: globalEventSimilarity,
EventSimilarity: &globalEventSimilarity,
Regions: globalRegions,
NumTickets: globalNumTickets,
Discount: globalDiscount,
NumTickets: &globalNumTickets,
Discount: &globalDiscount,
},
{
// Ticket with event similarity set
Event: "Event 2",
EventSimilarity: 90.0,
EventSimilarity: lo.ToPtr(90.0),
Regions: globalRegions,
NumTickets: globalNumTickets,
Discount: globalDiscount,
NumTickets: &globalNumTickets,
Discount: &globalDiscount,
},
{
// Ticket with regions set
Event: "Event 3",
EventSimilarity: globalEventSimilarity,
EventSimilarity: &globalEventSimilarity,
Regions: []twickets.Region{twickets.RegionSouthWest},
NumTickets: globalNumTickets,
Discount: globalDiscount,
NumTickets: &globalNumTickets,
Discount: &globalDiscount,
},
{
// Ticket with num tickets set
Event: "Event 4",
EventSimilarity: globalEventSimilarity,
EventSimilarity: &globalEventSimilarity,
Regions: globalRegions,
NumTickets: 1,
Discount: globalDiscount,
NumTickets: lo.ToPtr(1),
Discount: &globalDiscount,
},
{
// Ticket with discount set
Event: "Event 5",
EventSimilarity: globalEventSimilarity,
EventSimilarity: &globalEventSimilarity,
Regions: globalRegions,
NumTickets: globalNumTickets,
Discount: 15.0,
NumTickets: &globalNumTickets,
Discount: lo.ToPtr(15.0),
},
{
// Ticket with globals unset
Event: "Event 6",
EventSimilarity: 0.0,
EventSimilarity: nil,
Regions: []twickets.Region{},
NumTickets: 0,
Discount: 0.0,
NumTickets: nil,
Discount: nil,
},
}

require.EqualValues(t, expectedFilters, actualFilters)
require.EqualValues(t, expectedCombinedConfigs, actualCombinedConfigs)
}
23 changes: 23 additions & 0 deletions cmd/twitchets/config/ticket.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,26 @@ func (t TicketConfig) Validate() error {

return nil
}

func (t TicketConfig) Filter() twickets.Filter {
var filter twickets.Filter
filter.Event = t.Event

if t.EventSimilarity != nil {
filter.EventSimilarity = *t.EventSimilarity
}

if t.Regions != nil {
filter.Regions = t.Regions
}

if t.NumTickets != nil {
filter.NumTickets = *t.NumTickets
}

if t.Discount != nil {
filter.Discount = *t.Discount
}

return filter
}
41 changes: 23 additions & 18 deletions cmd/twitchets/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,25 +106,30 @@ func fetchAndProcessTickets(
slog.Warn("Fetched the max number of tickets allowed. It is possible tickets have been missed.")
}

filteredTickets := tickets.Filter(conf.Filters()...)
for _, ticket := range filteredTickets {
slog.Info(
"Found tickets for monitored event",
"eventName", ticket.Event.Name,
"numTickets", ticket.TicketQuantity,
"ticketPrice", ticket.TotalTicketPrice().String(),
"originalTicketPrice", ticket.OriginalTicketPrice().String(),
"link", ticket.Link(),
)

for _, notificationClient := range notificationClients {
err := notificationClient.SendTicketNotification(ticket)
if err != nil {
slog.Error(
"Failed to send notification",
"err", err,
)
ticketConfigs := conf.CombineGlobalAndTicketConfig()
for _, ticketConfig := range ticketConfigs {
filter := ticketConfig.Filter()
filteredTickets := tickets.Filter(filter)
for _, ticket := range filteredTickets {
slog.Info(
"Found tickets for monitored event",
"eventName", ticket.Event.Name,
"numTickets", ticket.TicketQuantity,
"ticketPrice", ticket.TotalTicketPrice().String(),
"originalTicketPrice", ticket.OriginalTicketPrice().String(),
"link", ticket.Link(),
)

for _, notificationClient := range notificationClients {
err := notificationClient.SendTicketNotification(ticket)
if err != nil {
slog.Error(
"Failed to send notification",
"err", err,
)
}
}

}
}
}

0 comments on commit f05460c

Please sign in to comment.