Files
backend_fiesta/services/catalogueService.go
Suriya fab06bb33e Bridge global catalogue DB to per-store product catalogue
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>
2026-07-16 17:34:20 +05:30

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)
}