2023-11-26 13:02:01 +00:00
|
|
|
package client
|
|
|
|
|
|
|
|
import (
|
2023-11-29 19:01:14 +00:00
|
|
|
"bytes"
|
2023-11-26 13:02:01 +00:00
|
|
|
"context"
|
2023-11-29 19:01:14 +00:00
|
|
|
"encoding/json"
|
2024-11-26 15:28:42 +00:00
|
|
|
"fmt"
|
2023-11-26 13:02:01 +00:00
|
|
|
"log"
|
2023-11-29 19:01:14 +00:00
|
|
|
"mime/multipart"
|
|
|
|
"net/http"
|
2023-12-01 11:59:27 +00:00
|
|
|
|
2024-11-18 07:23:41 +00:00
|
|
|
"gitea.pena/PenaSide/customer/internal/errors"
|
|
|
|
"gitea.pena/PenaSide/customer/internal/models"
|
2024-11-26 15:28:42 +00:00
|
|
|
"go.uber.org/zap"
|
2023-11-26 13:02:01 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type TemplateClientDeps struct {
|
|
|
|
Logger *zap.Logger
|
2024-11-26 15:28:42 +00:00
|
|
|
URL string
|
2023-11-26 13:02:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type TemplateClient struct {
|
|
|
|
logger *zap.Logger
|
2024-11-26 15:28:42 +00:00
|
|
|
url string
|
2023-11-26 13:02:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func NewTemplateClient(deps TemplateClientDeps) *TemplateClient {
|
|
|
|
if deps.Logger == nil {
|
|
|
|
log.Panicln("logger is nil on <NewTemplateClient>")
|
|
|
|
}
|
|
|
|
|
2024-11-26 15:28:42 +00:00
|
|
|
if deps.URL == "" {
|
2023-11-26 13:02:01 +00:00
|
|
|
log.Panicln("urls is nil on <NewTemplateClient>")
|
|
|
|
}
|
|
|
|
|
|
|
|
return &TemplateClient{
|
|
|
|
logger: deps.Logger,
|
2024-11-26 15:28:42 +00:00
|
|
|
url: deps.URL,
|
2023-11-26 13:02:01 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-11-29 19:01:14 +00:00
|
|
|
func (receiver *TemplateClient) SendData(ctx context.Context, data models.RespGeneratorService, fileContents []byte, email string) errors.Error {
|
2024-11-26 15:28:42 +00:00
|
|
|
tmplURL := fmt.Sprintf("%s/generator/service", receiver.url)
|
2023-11-29 19:01:14 +00:00
|
|
|
|
|
|
|
body := &bytes.Buffer{}
|
|
|
|
writer := multipart.NewWriter(body)
|
|
|
|
|
|
|
|
err := writer.WriteField("email", email)
|
|
|
|
if err != nil {
|
|
|
|
return errors.New(err, errors.ErrInternalError)
|
|
|
|
}
|
|
|
|
|
|
|
|
jsonData, err := json.Marshal(data)
|
|
|
|
if err != nil {
|
|
|
|
return errors.New(err, errors.ErrInternalError)
|
|
|
|
}
|
|
|
|
err = writer.WriteField("data", string(jsonData))
|
|
|
|
if err != nil {
|
|
|
|
return errors.New(err, errors.ErrInternalError)
|
|
|
|
}
|
|
|
|
|
|
|
|
fileWriter, err := writer.CreateFormFile("file", "report.docx")
|
|
|
|
if err != nil {
|
|
|
|
return errors.New(err, errors.ErrInternalError)
|
|
|
|
}
|
|
|
|
_, err = fileWriter.Write(fileContents)
|
|
|
|
if err != nil {
|
|
|
|
return errors.New(err, errors.ErrInternalError)
|
|
|
|
}
|
|
|
|
|
|
|
|
err = writer.Close()
|
2023-11-26 13:02:01 +00:00
|
|
|
if err != nil {
|
2023-11-29 19:01:14 +00:00
|
|
|
return errors.New(err, errors.ErrInternalError)
|
2023-11-26 13:02:01 +00:00
|
|
|
}
|
|
|
|
|
2023-12-01 11:27:44 +00:00
|
|
|
req, err := http.NewRequestWithContext(ctx, http.MethodPost, tmplURL, body)
|
2023-11-29 19:01:14 +00:00
|
|
|
if err != nil {
|
|
|
|
return errors.New(err, errors.ErrInternalError)
|
|
|
|
}
|
|
|
|
req.Header.Set("Content-Type", writer.FormDataContentType())
|
2023-11-26 13:02:01 +00:00
|
|
|
|
2023-11-29 19:01:14 +00:00
|
|
|
resp, err := http.DefaultClient.Do(req)
|
2023-11-26 13:02:01 +00:00
|
|
|
if err != nil {
|
|
|
|
return errors.New(err, errors.ErrInternalError)
|
|
|
|
}
|
2023-11-29 19:01:14 +00:00
|
|
|
defer resp.Body.Close()
|
2023-11-26 13:02:01 +00:00
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|