57 lines
1.0 KiB
Go
57 lines
1.0 KiB
Go
package adssvc
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
adsdomain "legalgo-BE-go/internal/domain/ads"
|
|
"path"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
func (i *impl) Create(ctx context.Context, spec adsdomain.AdsReq) error {
|
|
id := uuid.NewString()
|
|
|
|
file := spec.Image.FileHeader
|
|
spec.Image.FileSize = file.Size
|
|
spec.Image.Ext = path.Ext(file.Filename)
|
|
|
|
if err := i.validate.Struct(spec); err != nil {
|
|
return err
|
|
}
|
|
|
|
// Open the file and read its content
|
|
srcFile, err := file.Open()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer srcFile.Close()
|
|
|
|
fileContent := make([]byte, file.Size)
|
|
_, err = srcFile.Read(fileContent)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
filePath := fmt.Sprintf("%v/%v%v", spec.Image.FolderName, id, spec.Image.Ext)
|
|
fileUrl, err := i.ossRepo.UploadFile(ctx, filePath, fileContent)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
newSpec := adsdomain.Ads{
|
|
ID: id,
|
|
ImageUrl: fileUrl,
|
|
Url: spec.Url,
|
|
}
|
|
|
|
if err := i.adsRepo.Create(newSpec); err != nil {
|
|
if err := i.ossRepo.DeleteObject(ctx, id); err != nil {
|
|
return err
|
|
}
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|