feat: create ads
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
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.ads.Create(newSpec); err != nil {
|
||||
if err := i.ossRepo.DeleteObject(ctx, id); err != nil {
|
||||
return err
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package adssvc
|
||||
|
||||
import (
|
||||
"context"
|
||||
adsrepository "legalgo-BE-go/internal/accessor/ads"
|
||||
"legalgo-BE-go/internal/accessor/oss"
|
||||
adsdomain "legalgo-BE-go/internal/domain/ads"
|
||||
|
||||
"github.com/go-playground/validator/v10"
|
||||
)
|
||||
|
||||
type impl struct {
|
||||
ossRepo oss.OSSRepository
|
||||
ads adsrepository.Ads
|
||||
validate *validator.Validate
|
||||
}
|
||||
|
||||
type Ads interface {
|
||||
Create(context.Context, adsdomain.AdsReq) error
|
||||
}
|
||||
|
||||
func New(
|
||||
ossRepo oss.OSSRepository,
|
||||
ads adsrepository.Ads,
|
||||
validate *validator.Validate,
|
||||
) Ads {
|
||||
return &impl{
|
||||
ossRepo,
|
||||
ads,
|
||||
validate,
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
adssvc "legalgo-BE-go/internal/services/ads"
|
||||
serviceauth "legalgo-BE-go/internal/services/auth"
|
||||
categorysvc "legalgo-BE-go/internal/services/category"
|
||||
newssvc "legalgo-BE-go/internal/services/news"
|
||||
@@ -23,5 +24,6 @@ var Module = fx.Module("services",
|
||||
newssvc.New,
|
||||
oss.NewOSSService,
|
||||
usersvc.New,
|
||||
adssvc.New,
|
||||
),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user