Files
simrsx-be/internal/use-case/main-use-case/upload-file/case.go
2025-11-17 15:20:24 +07:00

77 lines
1.4 KiB
Go

package uploadfile
import (
"errors"
pl "simrs-vx/pkg/logger"
dg "github.com/karincake/apem/db-gorm-pg"
d "github.com/karincake/dodol"
"gorm.io/gorm"
ere "simrs-vx/internal/domain/references/encounter"
)
const source = "upload-file"
func Upload(input CreateDto) (*d.Data, error) {
event := pl.Event{
Feature: "Upload",
Source: source,
}
// Start log
pl.SetLogInfo(&event, input, "started", "create")
var (
err error
)
err = dg.I.Transaction(func(tx *gorm.DB) error {
// validate entityType_Code and Type_Code
valid, msg := ere.IsValidUploadCode(input.EntityType_Code, input.Type_Code)
if !valid {
event.Status = "failed"
event.ErrInfo = pl.ErrorInfo{
Code: "invalid-code",
Detail: msg,
Raw: errors.New(msg),
}
return pl.SetLogError(&event, input)
}
// upload file
input.FilePath, err = uploadAndGenerateFileUrl(input, &event)
if err != nil {
return err
}
if input.EntityType_Code == ere.ETCEncounter {
_, err = setEncounterDocument(input, &event, tx)
if err != nil {
return err
}
} else if input.EntityType_Code == ere.ETCPerson {
_, err = setPersonAttachment(input, &event, tx)
}
pl.SetLogInfo(&event, nil, "complete")
return nil
})
if err != nil {
return nil, err
}
return &d.Data{
Meta: d.II{
"source": source,
"structure": "single-data",
"status": "created",
},
Data: d.IS{
"fileUrl": input.FilePath,
},
}, nil
}