mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 21:41:55 +00:00
feat(BE): add function read and download in document
This commit is contained in:
@@ -71,13 +71,14 @@ func (u *UniformityController) GetOne(c *fiber.Ctx) error {
|
||||
withDetails := c.QueryBool("with_details", false)
|
||||
calculation := service.UniformityCalculation{}
|
||||
var document *entity.Document
|
||||
var documentURL string
|
||||
var meanWeight float64
|
||||
if result.MeanUp > 0 {
|
||||
meanWeight = math.Round(result.MeanUp / 1.10)
|
||||
}
|
||||
if withDetails {
|
||||
var err error
|
||||
calculation, document, err = u.UniformityService.CalculateUniformityFromDocument(c, id)
|
||||
calculation, document, documentURL, err = u.UniformityService.CalculateUniformityFromDocument(c, id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -111,7 +112,7 @@ func (u *UniformityController) GetOne(c *fiber.Ctx) error {
|
||||
Code: fiber.StatusOK,
|
||||
Status: "success",
|
||||
Message: "Get production uniformity successfully",
|
||||
Data: dto.ToUniformityDetailDTO(*result, calculation, document, standardDTO),
|
||||
Data: dto.ToUniformityDetailDTO(*result, calculation, document, documentURL, standardDTO),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -154,7 +155,7 @@ func (u *UniformityController) CreateOne(c *fiber.Ctx) error {
|
||||
Code: fiber.StatusCreated,
|
||||
Status: "success",
|
||||
Message: "Create uniformity successfully",
|
||||
Data: dto.ToUniformityDetailDTO(*result, calculation, document, standardDTO),
|
||||
Data: dto.ToUniformityDetailDTO(*result, calculation, document, "", standardDTO),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -237,7 +238,7 @@ func (u *UniformityController) UpdateOne(c *fiber.Ctx) error {
|
||||
Code: fiber.StatusOK,
|
||||
Status: "success",
|
||||
Message: "Update uniformity successfully",
|
||||
Data: dto.ToUniformityDetailDTO(*result, calculation, document, standardDTO),
|
||||
Data: dto.ToUniformityDetailDTO(*result, calculation, document, "", standardDTO),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@ type UniformityInfoDTO struct {
|
||||
ProjectFlock string `json:"project_flock"`
|
||||
Kandang string `json:"kandang"`
|
||||
FileName string `json:"file_name"`
|
||||
FileURL string `json:"file_url"`
|
||||
}
|
||||
|
||||
type UniformityDetailDTO struct {
|
||||
@@ -97,6 +98,7 @@ func ToUniformityDetailDTO(
|
||||
entityData entity.ProjectFlockKandangUniformity,
|
||||
calc service.UniformityCalculation,
|
||||
document *entity.Document,
|
||||
documentURL string,
|
||||
standard *UniformityStandardDTO,
|
||||
) UniformityDetailDTO {
|
||||
info := UniformityInfoDTO{
|
||||
@@ -105,10 +107,14 @@ func ToUniformityDetailDTO(
|
||||
ProjectFlock: resolveProjectFlockName(entityData.ProjectFlockKandang),
|
||||
Kandang: resolveKandangName(entityData.ProjectFlockKandang),
|
||||
FileName: "",
|
||||
FileURL: "",
|
||||
}
|
||||
if document != nil {
|
||||
info.FileName = document.Name
|
||||
}
|
||||
if documentURL != "" {
|
||||
info.FileURL = documentURL
|
||||
}
|
||||
|
||||
return UniformityDetailDTO{
|
||||
Id: entityData.Id,
|
||||
|
||||
@@ -39,7 +39,7 @@ type UniformityService interface {
|
||||
Approval(ctx *fiber.Ctx, req *validation.Approve) ([]entity.ProjectFlockKandangUniformity, error)
|
||||
ParseBodyWeightExcel(ctx *fiber.Ctx, file *multipart.FileHeader) ([]BodyWeightExcelRow, error)
|
||||
ComputeUniformity(rows []BodyWeightExcelRow) (UniformityCalculation, error)
|
||||
CalculateUniformityFromDocument(ctx *fiber.Ctx, uniformityID uint) (UniformityCalculation, *entity.Document, error)
|
||||
CalculateUniformityFromDocument(ctx *fiber.Ctx, uniformityID uint) (UniformityCalculation, *entity.Document, string, error)
|
||||
}
|
||||
|
||||
type uniformityService struct {
|
||||
@@ -592,50 +592,53 @@ func (s uniformityService) ComputeUniformity(rows []BodyWeightExcelRow) (Uniform
|
||||
return computeUniformity(rows)
|
||||
}
|
||||
|
||||
func (s uniformityService) CalculateUniformityFromDocument(c *fiber.Ctx, uniformityID uint) (UniformityCalculation, *entity.Document, error) {
|
||||
func (s uniformityService) CalculateUniformityFromDocument(c *fiber.Ctx, uniformityID uint) (UniformityCalculation, *entity.Document, string, error) {
|
||||
if s.DocumentSvc == nil {
|
||||
return UniformityCalculation{}, nil, fiber.NewError(fiber.StatusInternalServerError, "Document service not available")
|
||||
return UniformityCalculation{}, nil, "", fiber.NewError(fiber.StatusInternalServerError, "Document service not available")
|
||||
}
|
||||
|
||||
documents, err := s.DocumentSvc.ListByTarget(c.Context(), "UNIFORMITY", uint64(uniformityID))
|
||||
if err != nil {
|
||||
return UniformityCalculation{}, nil, err
|
||||
return UniformityCalculation{}, nil, "", err
|
||||
}
|
||||
if len(documents) == 0 {
|
||||
return UniformityCalculation{}, nil, fiber.NewError(fiber.StatusNotFound, "Uniformity document not found")
|
||||
return UniformityCalculation{}, nil, "", fiber.NewError(fiber.StatusNotFound, "Uniformity document not found")
|
||||
}
|
||||
|
||||
document := documents[0]
|
||||
url := s.DocumentSvc.PublicURL(document)
|
||||
url, err := s.DocumentSvc.PresignURL(c.Context(), document, 15*time.Minute)
|
||||
if err != nil {
|
||||
return UniformityCalculation{}, nil, "", err
|
||||
}
|
||||
if url == "" {
|
||||
return UniformityCalculation{}, nil, fiber.NewError(fiber.StatusBadRequest, "Uniformity document URL not available")
|
||||
return UniformityCalculation{}, nil, "", fiber.NewError(fiber.StatusBadRequest, "Uniformity document URL not available")
|
||||
}
|
||||
|
||||
req, err := http.NewRequestWithContext(c.Context(), http.MethodGet, url, nil)
|
||||
if err != nil {
|
||||
return UniformityCalculation{}, nil, err
|
||||
return UniformityCalculation{}, nil, "", err
|
||||
}
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return UniformityCalculation{}, nil, err
|
||||
return UniformityCalculation{}, nil, "", err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
|
||||
return UniformityCalculation{}, nil, fiber.NewError(fiber.StatusBadRequest, "Failed to download uniformity document")
|
||||
return UniformityCalculation{}, nil, "", fiber.NewError(fiber.StatusBadRequest, "Failed to download uniformity document")
|
||||
}
|
||||
|
||||
rows, err := parseBodyWeightExcelReader(resp.Body)
|
||||
if err != nil {
|
||||
return UniformityCalculation{}, nil, err
|
||||
return UniformityCalculation{}, nil, "", err
|
||||
}
|
||||
|
||||
calculation, err := computeUniformity(rows)
|
||||
if err != nil {
|
||||
return UniformityCalculation{}, nil, err
|
||||
return UniformityCalculation{}, nil, "", err
|
||||
}
|
||||
|
||||
return calculation, &document, nil
|
||||
return calculation, &document, url, nil
|
||||
}
|
||||
|
||||
func (s *uniformityService) createUniformityApproval(
|
||||
|
||||
Reference in New Issue
Block a user