package crawler import ( "github.com/mrahbar/my-bloody-hetzner-sb-notifier/hetzner" "sort" ) type Parameter struct { MinPrice float64 MaxPrice float64 MinRam int64 MaxRam int64 MinHddSize int64 MaxHddSize int64 MinHddCount int64 MaxHddCount int64 MinBenchmark int64 MaxBenchmark int64 } type Crawler struct { parameter Parameter } func NewCrawler(parameter Parameter) *Crawler { crawler := &Crawler{ parameter: parameter, } return crawler } func (c *Crawler) Filter(servers []hetzner.Server) hetzner.Deals { var filteredServers []hetzner.Server for _, server := range servers { if !c.isFiltered(server) { filteredServers = append(filteredServers, server) } } sort.Slice(servers, func(i, j int) bool { return servers[i].Score() > servers[j].Score() }) deals := hetzner.Deals{ ResultStats: hetzner.FilterResultStats{OriginalCount: len(servers), FilteredCount: len(filteredServers)}, Servers: filteredServers, } return deals } func (c *Crawler) isFiltered(server hetzner.Server) bool { filtered := true priceParsed := server.ParsePrice() if server.CpuBenchmark >= c.parameter.MinBenchmark && server.CpuBenchmark <= c.parameter.MaxBenchmark && priceParsed >= c.parameter.MinPrice && priceParsed <= c.parameter.MaxPrice && server.Ram >= c.parameter.MinRam && server.Ram <= c.parameter.MaxRam && server.TotalHdd() >= c.parameter.MinHddSize && server.TotalHdd() <= c.parameter.MaxHddSize && server.HddCount >= c.parameter.MinHddCount && server.HddCount <= c.parameter.MaxHddCount { filtered = false } return filtered }