From ce787d26ffe9b573cc5bcf37130c9de2e328c33d Mon Sep 17 00:00:00 2001 From: Floriansylvain Date: Mon, 22 Dec 2025 02:41:09 +0100 Subject: [PATCH] fix: remove low file code from domain --- api/handlers/image/imageHandler.go | 9 ++++++++- internal/domain/image/imageDomain.go | 8 ++++++++ .../domain/image/imageRepositoryInterface.go | 6 +----- .../persistence/repositories/imageRepository.go | 16 +++++++--------- internal/infrastructure/useCases/CreateImage.go | 5 ++--- 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/api/handlers/image/imageHandler.go b/api/handlers/image/imageHandler.go index 5766d59..0013efb 100644 --- a/api/handlers/image/imageHandler.go +++ b/api/handlers/image/imageHandler.go @@ -1,6 +1,7 @@ package image import ( + "RenewCMS/internal/domain/image" "RenewCMS/internal/infrastructure/useCases" "encoding/json" "net/http" @@ -32,8 +33,14 @@ func (h *Handler) PostImage(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), http.StatusBadRequest) return } + defer file.Close() - newImage, err := h.CreateUseCase.CreateImage(file, *fileHeader) + newImage, err := h.CreateUseCase.CreateImage(image.ImageInput{ + Content: file, + Filename: fileHeader.Filename, + Size: fileHeader.Size, + ContentType: fileHeader.Header.Get("Content-Type"), + }) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return diff --git a/internal/domain/image/imageDomain.go b/internal/domain/image/imageDomain.go index c3d740a..595fb80 100644 --- a/internal/domain/image/imageDomain.go +++ b/internal/domain/image/imageDomain.go @@ -1,9 +1,17 @@ package image import ( + "io" "time" ) +type ImageInput struct { + Content io.Reader + Filename string + Size int64 + ContentType string +} + type Image struct { ID uint32 `json:"id"` Path string `json:"path"` diff --git a/internal/domain/image/imageRepositoryInterface.go b/internal/domain/image/imageRepositoryInterface.go index 3c4e429..e10f9ca 100644 --- a/internal/domain/image/imageRepositoryInterface.go +++ b/internal/domain/image/imageRepositoryInterface.go @@ -1,10 +1,6 @@ package image -import ( - "mime/multipart" -) - type Repository interface { - Create(file multipart.File, fileHeader multipart.FileHeader) (Image, error) + Create(input ImageInput) (Image, error) Delete(id uint32) error } diff --git a/internal/infrastructure/persistence/repositories/imageRepository.go b/internal/infrastructure/persistence/repositories/imageRepository.go index 7984308..58f7046 100644 --- a/internal/infrastructure/persistence/repositories/imageRepository.go +++ b/internal/infrastructure/persistence/repositories/imageRepository.go @@ -5,7 +5,7 @@ import ( "RenewCMS/internal/infrastructure/persistence/mappers" entity "RenewCMS/internal/infrastructure/persistence/models" "errors" - "mime/multipart" + "io" "os" "path/filepath" @@ -28,11 +28,10 @@ var contentTypeExtensions = map[string]string{ "image/svg+xml": ".svg", } -func (i ImageRepository) Create(file multipart.File, fileHeader multipart.FileHeader) (domain.Image, error) { +func (i ImageRepository) Create(input domain.ImageInput) (domain.Image, error) { uploadDir := os.Getenv("UPLOAD_DIR") - fileBytes := make([]byte, fileHeader.Size) - _, err := file.Read(fileBytes) + fileBytes, err := io.ReadAll(input.Content) if err != nil { return domain.Image{}, err } @@ -42,8 +41,7 @@ func (i ImageRepository) Create(file multipart.File, fileHeader multipart.FileHe return domain.Image{}, err } - contentType := fileHeader.Header.Get("Content-Type") - extension := contentTypeExtensions[contentType] + extension := contentTypeExtensions[input.ContentType] if extension == "" { return domain.Image{}, errors.New("the file must be a PNG, JPEG, WEBP, or SVG image") } @@ -64,13 +62,13 @@ func (i ImageRepository) Create(file multipart.File, fileHeader multipart.FileHe func (i ImageRepository) Delete(id uint32) error { uploadDir := os.Getenv("UPLOAD_DIR") - var image entity.Image - err := i.db.Model(&entity.Image{}).First(&image, id).Error + var entityImage entity.Image + err := i.db.Model(&entity.Image{}).First(&entityImage, id).Error if err != nil { return err } - fileName := filepath.Base(image.Path) + fileName := filepath.Base(entityImage.Path) err = os.Remove(filepath.Join(uploadDir, fileName)) if err != nil { return err diff --git a/internal/infrastructure/useCases/CreateImage.go b/internal/infrastructure/useCases/CreateImage.go index 3425444..cc9c18f 100644 --- a/internal/infrastructure/useCases/CreateImage.go +++ b/internal/infrastructure/useCases/CreateImage.go @@ -2,7 +2,6 @@ package useCases import ( "RenewCMS/internal/domain/image" - "mime/multipart" ) type CreateImageUseCase struct { @@ -13,6 +12,6 @@ func NewCreateImageUseCase(imageRepository image.Repository) *CreateImageUseCase return &CreateImageUseCase{imageRepository} } -func (g *CreateImageUseCase) CreateImage(file multipart.File, fileHeader multipart.FileHeader) (image.Image, error) { - return g.imageRepository.Create(file, fileHeader) +func (g *CreateImageUseCase) CreateImage(input image.ImageInput) (image.Image, error) { + return g.imageRepository.Create(input) }