47 lines
1020 B
Go
47 lines
1020 B
Go
package http
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"enaklo-pos-be/internal/common/logger"
|
|
)
|
|
|
|
type HttpClient struct {
|
|
Client *http.Client
|
|
}
|
|
|
|
func NewHttpClient() *HttpClient {
|
|
return &HttpClient{
|
|
Client: &http.Client{},
|
|
}
|
|
}
|
|
|
|
func (c *HttpClient) Do(ctx context.Context, req *http.Request) (int, []byte, error) {
|
|
start := time.Now()
|
|
logger.ContextLogger(ctx).Info(fmt.Sprintf("Sending request: %v %v", req.Method, req.URL))
|
|
resp, err := c.Client.Do(req)
|
|
if err != nil {
|
|
logger.ContextLogger(ctx).Error(" Failed to send request:", zap.Error(err))
|
|
return 0, nil, err
|
|
}
|
|
|
|
logger.ContextLogger(ctx).Info(fmt.Sprintf("Received Response: : %v", resp.StatusCode))
|
|
|
|
defer resp.Body.Close()
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
logger.ContextLogger(ctx).Error(" Failed to read response:", zap.Error(err))
|
|
return 0, nil, err
|
|
}
|
|
|
|
logger.ContextLogger(ctx).Info(fmt.Sprintf("Latency : %v", time.Since(start)))
|
|
|
|
return resp.StatusCode, body, nil
|
|
}
|