bazaar/pkg/manager/main.go

55 lines
1.0 KiB
Go

package manager
import (
"fmt"
"net/url"
"github.com/fmartingr/bazaar/pkg/clients"
"github.com/fmartingr/bazaar/pkg/models"
)
var ErrShopNotFound = fmt.Errorf("shop not found for domain")
type Manager struct {
domains map[string]models.Shop
}
func (m *Manager) Register(domains []string, shopFactory models.ShopFactory) {
baseShop := models.NewShopOptions(clients.NewBasicHttpClient())
shop := shopFactory(baseShop)
for _, domain := range domains {
if _, exists := m.domains[domain]; !exists {
m.domains[domain] = shop
}
}
}
func (m *Manager) GetShop(host string) models.Shop {
shop, exists := m.domains[host]
if !exists {
return nil
}
return shop
}
func (m *Manager) Retrieve(productURL string) (*models.Product, error) {
itemUrl, err := url.Parse(productURL)
if err != nil {
return nil, fmt.Errorf("error parsing url: %s", err)
}
shop := m.GetShop(itemUrl.Host)
if shop == nil {
return nil, ErrShopNotFound
}
return shop.Get(itemUrl)
}
func NewManager() Manager {
return Manager{
domains: make(map[string]models.Shop),
}
}