Refactor marketplace product fetching and caching logic; update environment configuration for Redis and PostgreSQL

This commit is contained in:
2025-07-07 19:20:05 +03:00
parent c7be7e2cea
commit 3976c7d0cf
22 changed files with 319 additions and 349 deletions

View File

@@ -1,5 +1,17 @@
package marketplace
import (
"encoding/json"
"github.com/go-faster/errors"
"sipro-mps/pkg/utils"
)
const (
WildberriesBaseMarketplace = 0
OzonBaseMarketplace = 1
YandexBaseMarketplace = 2
)
type Marketplace struct {
ID int `json:"id"`
BaseMarketplace int `json:"base_marketplace"`
@@ -7,3 +19,39 @@ type Marketplace struct {
WarehouseID string `json:"warehouse_id"`
AuthDataJson []byte `json:"auth_data_json,omitempty"`
}
func (m *Marketplace) getIdentifierWildberries() (string, error) {
_, claims, err := utils.DecodeWildberriesJwt(m.AuthDataJson)
if err != nil {
return "", err
}
sellerId := claims["sid"].(string)
return sellerId, err
}
func (m *Marketplace) getIdentifierOzon() (string, error) {
if m.AuthDataJson == nil {
return "", nil
}
var authData map[string]interface{}
if err := json.Unmarshal(m.AuthDataJson, &authData); err != nil {
return "", errors.Wrap(err, "unmarshal AuthDataJson")
}
if identifier, ok := authData["clientId"].(string); ok {
return identifier, nil
}
return "", errors.New("identifier not found in AuthDataJson")
}
func (m *Marketplace) GetIdentifier() (string, error) {
switch m.BaseMarketplace {
case WildberriesBaseMarketplace:
return m.getIdentifierWildberries()
case OzonBaseMarketplace:
return m.getIdentifierOzon()
case YandexBaseMarketplace:
return "", errors.New("Yandex marketplace does not support identifier retrieval")
default:
return "", errors.Errorf("unknown base marketplace: %d", m.BaseMarketplace)
}
}