Adds a separate CatalogueDB (pgvector) connection alongside the main nearledb, plus a new catalogue module (repository/service/controller/ routes) to browse it by brand, category, and keyword, with brand optional so the whole ~237-product catalogue can be browsed unfiltered. Adds the actual bridge: importing a catalogue product snapshots it into the tenant's own products table (keyed on brand+catalogueid, since a catalogue row's bare id is only unique within its own brand table), then links it via the existing productlocations upsert. Re-importing tops up stock and refreshes price instead of duplicating. Also adds an imported-refs endpoint so the frontend can badge already-imported items without diffing full product lists, and wires the new AWS S3 image store used to resolve catalogue product photos. Bumps Go/Docker to 1.24 for the AWS SDK dependency this needs. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
43 lines
1.3 KiB
Go
43 lines
1.3 KiB
Go
package services
|
|
|
|
import (
|
|
"nearle/models"
|
|
"nearle/repositories"
|
|
)
|
|
|
|
type CatalogueService interface {
|
|
GetBrands() ([]models.CatalogueBrand, error)
|
|
GetCategories(brand string) ([]string, error)
|
|
GetProducts(brand, category, keyword string, pageno, pagesize int) ([]models.CatalogueProduct, int64, error)
|
|
GetProductBySKU(brand, sku string) (*models.CatalogueProduct, error)
|
|
GetProductByID(brand string, id int64) (*models.CatalogueProduct, error)
|
|
}
|
|
|
|
type catalogueService struct {
|
|
repo repositories.CatalogueRepository
|
|
}
|
|
|
|
func NewCatalogueService(repo repositories.CatalogueRepository) CatalogueService {
|
|
return &catalogueService{repo: repo}
|
|
}
|
|
|
|
func (s *catalogueService) GetBrands() ([]models.CatalogueBrand, error) {
|
|
return s.repo.GetBrands()
|
|
}
|
|
|
|
func (s *catalogueService) GetCategories(brand string) ([]string, error) {
|
|
return s.repo.GetCategories(brand)
|
|
}
|
|
|
|
func (s *catalogueService) GetProducts(brand, category, keyword string, pageno, pagesize int) ([]models.CatalogueProduct, int64, error) {
|
|
return s.repo.GetProducts(brand, category, keyword, pageno, pagesize)
|
|
}
|
|
|
|
func (s *catalogueService) GetProductBySKU(brand, sku string) (*models.CatalogueProduct, error) {
|
|
return s.repo.GetProductBySKU(brand, sku)
|
|
}
|
|
|
|
func (s *catalogueService) GetProductByID(brand string, id int64) (*models.CatalogueProduct, error) {
|
|
return s.repo.GetProductByID(brand, id)
|
|
}
|