95 lines
2.4 KiB
Go
95 lines
2.4 KiB
Go
package generatefile
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"mime"
|
|
"path/filepath"
|
|
"time"
|
|
|
|
erc "simrs-vx/internal/domain/references/common"
|
|
docscfg "simrs-vx/internal/infra/docs-cfg"
|
|
pc "simrs-vx/pkg/conv-helper"
|
|
pf "simrs-vx/pkg/file-helper"
|
|
pm "simrs-vx/pkg/minio-helper"
|
|
pp "simrs-vx/pkg/pdf-helper"
|
|
pu "simrs-vx/pkg/use-case-helper"
|
|
)
|
|
|
|
// generate temporary file, upload to minio, generate public url, delete temporary file
|
|
func generateFile(input GenerateDto, templateData any) (string, error) {
|
|
newPath, err := pf.PathToSaveFile(fmt.Sprintf("./temporary/%s", input.EntityType_Code))
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
fPath := fmt.Sprintf("%s/%s-%s.%s", newPath, input.Type_Code, time.Now().Format("20060102150405"), input.FormatType)
|
|
|
|
templatePath := docscfg.O.GetPath() + string(input.TemplateName)
|
|
|
|
switch input.FormatType {
|
|
case erc.DFTCPDF:
|
|
if err := generatePDF(GeneratePDFdto{
|
|
TemplatePath: templatePath,
|
|
TemplateData: templateData,
|
|
PdfPath: fPath,
|
|
}); err != nil {
|
|
return "", err
|
|
}
|
|
case erc.DFTCTXLSX:
|
|
// TODO: generate xlsx
|
|
case erc.DFTCTCSV:
|
|
// TODO: generate csv
|
|
default:
|
|
return "", errors.New("invalid format type")
|
|
}
|
|
|
|
bucketName := input.EntityType_Code
|
|
|
|
objectName := fmt.Sprintf("%s/%s-%d.%s", *pc.UintToString(input.Encounter_Id), input.Type_Code, time.Now().UnixNano(), input.FormatType)
|
|
pdfUpload := pm.UploadPathInput{
|
|
BucketName: string(bucketName),
|
|
Name: objectName,
|
|
Path: fPath,
|
|
ContentType: mime.TypeByExtension(filepath.Ext(fPath)),
|
|
}
|
|
|
|
// create bucket if not exist, create object in bucket
|
|
info, err := pm.I.FPutObject(pdfUpload)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
// generate public url
|
|
urlPub := pm.I.GenerateUrl(info.Bucket, info.Key)
|
|
if err := pf.DeleteFolder(fPath); err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return urlPub, nil
|
|
}
|
|
|
|
func generatePDF(input GeneratePDFdto) error {
|
|
// parse template data into html template
|
|
r := pp.NewRequestPdf("")
|
|
if err := r.ParseTemplate(input.TemplatePath, input.TemplateData); err == nil {
|
|
_, err := r.GenerateByCommand(input.PdfPath, input.TemplatePath)
|
|
if err != nil {
|
|
return errors.New("generate pdf by command error : " + err.Error())
|
|
}
|
|
} else {
|
|
return errors.New("parse template error : " + err.Error())
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func removeFile(bucket, fileUrl string) error {
|
|
fPath := pu.GetLastTwoPathSegments(fileUrl)
|
|
err := pm.I.RemoveObject(bucket, fPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|