214 lines
4.7 KiB
Go
214 lines
4.7 KiB
Go
package ozon
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
core "github.com/diphantxm/ozon-api-client"
|
|
)
|
|
|
|
const (
|
|
DefaultAPIBaseUrl = "https://api-seller.ozon.ru"
|
|
)
|
|
|
|
type ClientOptions struct {
|
|
client core.HttpClient
|
|
|
|
baseUri string
|
|
|
|
apiKey string
|
|
clientId string
|
|
}
|
|
|
|
type Client struct {
|
|
client *core.Client
|
|
|
|
analytics *Analytics
|
|
fbo *FBO
|
|
fbs *FBS
|
|
finance *Finance
|
|
products *Products
|
|
promotions *Promotions
|
|
rating *Rating
|
|
warehouses *Warehouses
|
|
returns *Returns
|
|
reports *Reports
|
|
cancellations *Cancellations
|
|
categories *Categories
|
|
polygons *Polygons
|
|
invoices *Invoices
|
|
brands *Brands
|
|
chats *Chats
|
|
certificates *Certificates
|
|
strategies *Strategies
|
|
barcodes *Barcodes
|
|
}
|
|
|
|
func (c Client) Analytics() *Analytics {
|
|
return c.analytics
|
|
}
|
|
|
|
func (c Client) FBO() *FBO {
|
|
return c.fbo
|
|
}
|
|
|
|
func (c Client) FBS() *FBS {
|
|
return c.fbs
|
|
}
|
|
|
|
func (c Client) Finance() *Finance {
|
|
return c.finance
|
|
}
|
|
|
|
func (c Client) Products() *Products {
|
|
return c.products
|
|
}
|
|
|
|
func (c Client) Promotions() *Promotions {
|
|
return c.promotions
|
|
}
|
|
|
|
func (c Client) Rating() *Rating {
|
|
return c.rating
|
|
}
|
|
|
|
func (c Client) Warehouses() *Warehouses {
|
|
return c.warehouses
|
|
}
|
|
|
|
func (c Client) Returns() *Returns {
|
|
return c.returns
|
|
}
|
|
|
|
func (c Client) Reports() *Reports {
|
|
return c.reports
|
|
}
|
|
|
|
func (c Client) Cancellations() *Cancellations {
|
|
return c.cancellations
|
|
}
|
|
|
|
func (c Client) Categories() *Categories {
|
|
return c.categories
|
|
}
|
|
|
|
func (c Client) Polygons() *Polygons {
|
|
return c.polygons
|
|
}
|
|
|
|
func (c Client) Invoices() *Invoices {
|
|
return c.invoices
|
|
}
|
|
|
|
func (c Client) Brands() *Brands {
|
|
return c.brands
|
|
}
|
|
|
|
func (c Client) Chats() *Chats {
|
|
return c.chats
|
|
}
|
|
|
|
func (c Client) Certificates() *Certificates {
|
|
return c.certificates
|
|
}
|
|
|
|
func (c Client) Strategies() *Strategies {
|
|
return c.strategies
|
|
}
|
|
|
|
func (c Client) Barcodes() *Barcodes {
|
|
return c.barcodes
|
|
}
|
|
|
|
type ClientOption func(c *ClientOptions)
|
|
|
|
func WithHttpClient(httpClient core.HttpClient) ClientOption {
|
|
return func(c *ClientOptions) {
|
|
c.client = httpClient
|
|
}
|
|
}
|
|
|
|
func WithURI(uri string) ClientOption {
|
|
return func(c *ClientOptions) {
|
|
c.baseUri = uri
|
|
}
|
|
}
|
|
|
|
func WithClientId(clientId string) ClientOption {
|
|
return func(c *ClientOptions) {
|
|
c.clientId = clientId
|
|
}
|
|
}
|
|
|
|
func WithAPIKey(apiKey string) ClientOption {
|
|
return func(c *ClientOptions) {
|
|
c.apiKey = apiKey
|
|
}
|
|
}
|
|
|
|
func NewClient(opts ...ClientOption) *Client {
|
|
// default values
|
|
options := &ClientOptions{
|
|
client: http.DefaultClient,
|
|
baseUri: DefaultAPIBaseUrl,
|
|
}
|
|
|
|
for _, opt := range opts {
|
|
opt(options)
|
|
}
|
|
|
|
coreClient := core.NewClient(options.client, options.baseUri, map[string]string{
|
|
"Client-Id": options.clientId,
|
|
"Api-Key": options.apiKey,
|
|
})
|
|
|
|
return &Client{
|
|
client: coreClient,
|
|
analytics: &Analytics{client: coreClient},
|
|
fbo: &FBO{client: coreClient},
|
|
fbs: &FBS{client: coreClient},
|
|
finance: &Finance{client: coreClient},
|
|
products: &Products{client: coreClient},
|
|
promotions: &Promotions{client: coreClient},
|
|
rating: &Rating{client: coreClient},
|
|
warehouses: &Warehouses{client: coreClient},
|
|
returns: &Returns{client: coreClient},
|
|
reports: &Reports{client: coreClient},
|
|
cancellations: &Cancellations{client: coreClient},
|
|
categories: &Categories{client: coreClient},
|
|
polygons: &Polygons{client: coreClient},
|
|
invoices: &Invoices{client: coreClient},
|
|
brands: &Brands{client: coreClient},
|
|
chats: &Chats{client: coreClient},
|
|
certificates: &Certificates{client: coreClient},
|
|
strategies: &Strategies{client: coreClient},
|
|
barcodes: &Barcodes{client: coreClient},
|
|
}
|
|
}
|
|
|
|
func NewMockClient(handler http.HandlerFunc) *Client {
|
|
coreClient := core.NewMockClient(handler)
|
|
|
|
return &Client{
|
|
client: coreClient,
|
|
analytics: &Analytics{client: coreClient},
|
|
fbo: &FBO{client: coreClient},
|
|
fbs: &FBS{client: coreClient},
|
|
finance: &Finance{client: coreClient},
|
|
products: &Products{client: coreClient},
|
|
promotions: &Promotions{client: coreClient},
|
|
rating: &Rating{client: coreClient},
|
|
warehouses: &Warehouses{client: coreClient},
|
|
returns: &Returns{client: coreClient},
|
|
reports: &Reports{client: coreClient},
|
|
cancellations: &Cancellations{client: coreClient},
|
|
categories: &Categories{client: coreClient},
|
|
polygons: &Polygons{client: coreClient},
|
|
invoices: &Invoices{client: coreClient},
|
|
brands: &Brands{client: coreClient},
|
|
chats: &Chats{client: coreClient},
|
|
certificates: &Certificates{client: coreClient},
|
|
strategies: &Strategies{client: coreClient},
|
|
barcodes: &Barcodes{client: coreClient},
|
|
}
|
|
}
|