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 }