75 lines
2.0 KiB
Go
75 lines
2.0 KiB
Go
package client
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"github.com/gofiber/fiber/v2"
|
|
"go.uber.org/zap"
|
|
"gitea.pena/SQuiz/shutterstock/internal/model"
|
|
"strings"
|
|
)
|
|
|
|
type Deps struct {
|
|
ShutterStockUrl string
|
|
ShutterStockApiToken string
|
|
Logger *zap.Logger
|
|
}
|
|
|
|
type ShutterStockClient struct {
|
|
shutterStockUrl string
|
|
shutterStockApiToken string
|
|
fiberClient *fiber.Client
|
|
logger *zap.Logger
|
|
}
|
|
|
|
func NewShutterStockClient(deps Deps) *ShutterStockClient {
|
|
fiberClient := fiber.AcquireClient()
|
|
return &ShutterStockClient{
|
|
shutterStockUrl: deps.ShutterStockUrl,
|
|
shutterStockApiToken: deps.ShutterStockApiToken,
|
|
fiberClient: fiberClient,
|
|
logger: deps.Logger,
|
|
}
|
|
}
|
|
|
|
func (s *ShutterStockClient) ImgSearch(params map[model.ShutterStockParams]string) (*model.ImgSearchResp, error) {
|
|
url := fmt.Sprintf("%s/v2/images/search", s.shutterStockUrl)
|
|
|
|
if len(params) > 0 {
|
|
queryParams := make([]string, 0, len(params))
|
|
for key, value := range params {
|
|
queryParams = append(queryParams, fmt.Sprintf("%s=%s", key, value))
|
|
}
|
|
url = fmt.Sprintf("%s?%s", url, strings.Join(queryParams, "&"))
|
|
}
|
|
|
|
fmt.Println(url)
|
|
|
|
agent := s.fiberClient.Get(url)
|
|
agent.Set("Authorization", fmt.Sprintf("Bearer %s", s.shutterStockApiToken))
|
|
agent.Set("Accept", "application/json")
|
|
|
|
statusCode, resBody, errs := agent.Bytes()
|
|
if len(errs) > 0 {
|
|
for _, err := range errs {
|
|
s.logger.Error("Error Img Search Shutter Stock", zap.Error(err))
|
|
}
|
|
return nil, fmt.Errorf("request failed: %v", errs)
|
|
}
|
|
|
|
if statusCode != fiber.StatusOK {
|
|
errorMessage := fmt.Sprintf("received an incorrect response from Img Search Shutter Stock: %d", statusCode)
|
|
s.logger.Error(errorMessage, zap.Int("status", statusCode), zap.String("respBody", string(resBody)))
|
|
return nil, errors.New(errorMessage)
|
|
}
|
|
|
|
resp := new(model.ImgSearchResp)
|
|
if err := json.Unmarshal(resBody, resp); err != nil {
|
|
s.logger.Error("failed to unmarshal Img Search Shutter Stock response", zap.Error(err))
|
|
return nil, err
|
|
}
|
|
|
|
return resp, nil
|
|
}
|