customer/internal/interface/client/templategen.go

90 lines
1.9 KiB
Go
Raw Normal View History

package client
import (
2023-11-29 19:01:14 +00:00
"bytes"
"context"
2023-11-29 19:01:14 +00:00
"encoding/json"
2024-11-26 15:28:42 +00:00
"fmt"
"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"
)
type TemplateClientDeps struct {
Logger *zap.Logger
2024-11-26 15:28:42 +00:00
URL string
}
type TemplateClient struct {
logger *zap.Logger
2024-11-26 15:28:42 +00:00
url string
}
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 == "" {
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-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()
if err != nil {
2023-11-29 19:01:14 +00:00
return errors.New(err, errors.ErrInternalError)
}
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-29 19:01:14 +00:00
resp, err := http.DefaultClient.Do(req)
if err != nil {
return errors.New(err, errors.ErrInternalError)
}
2023-11-29 19:01:14 +00:00
defer resp.Body.Close()
return nil
}