2025-10-20 22:21:55 +03:00
|
|
|
package mainHandler
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
2025-10-22 21:34:17 +03:00
|
|
|
"google.golang.org/grpc/codes"
|
|
|
|
|
"google.golang.org/grpc/status"
|
|
|
|
|
"google.golang.org/protobuf/types/known/emptypb"
|
2025-10-20 22:21:55 +03:00
|
|
|
pb "imageStorage/pkg/proto/imageStorage"
|
2025-10-22 21:34:17 +03:00
|
|
|
"os"
|
|
|
|
|
"path/filepath"
|
2025-10-20 22:21:55 +03:00
|
|
|
)
|
|
|
|
|
|
2025-10-22 21:34:17 +03:00
|
|
|
func (i *ImageHandler) UploadImage(ctx context.Context, req *pb.UploadMerchImageRequest) (*pb.UploadMerchImageResponse, error) {
|
|
|
|
|
if len(req.ImageData) == 0 {
|
|
|
|
|
return nil, status.Errorf(codes.InvalidArgument, "image data is empty")
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-25 17:41:04 +03:00
|
|
|
path := i.utils.MerchImageVolumePath(req.UserUuid, req.MerchUuid)
|
2025-10-22 21:34:17 +03:00
|
|
|
if err := os.MkdirAll(path, 0777); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-25 17:41:04 +03:00
|
|
|
fullFile, err := os.Create(filepath.Join(path, i.utils.FilenameFromType("full")))
|
2025-10-22 21:34:17 +03:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
defer fullFile.Close()
|
|
|
|
|
|
2025-10-25 17:41:04 +03:00
|
|
|
thumbnailFile, err := os.Create(filepath.Join(path, i.utils.FilenameFromType("thumbnail")))
|
2025-10-22 21:34:17 +03:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
defer thumbnailFile.Close()
|
|
|
|
|
|
|
|
|
|
if err = i.converter.ConvertAndSave(req.ImageData, fullFile, thumbnailFile); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
response := &pb.UploadMerchImageResponse{
|
2025-10-25 17:41:04 +03:00
|
|
|
FullImage: i.utils.MerchImageURL(req.UserUuid, req.MerchUuid, "full"),
|
|
|
|
|
Thumbnail: i.utils.MerchImageURL(req.UserUuid, req.MerchUuid, "thumbnail"),
|
2025-10-22 21:34:17 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response, nil
|
2025-10-20 22:21:55 +03:00
|
|
|
}
|
|
|
|
|
|
2025-10-22 21:34:17 +03:00
|
|
|
func (i *ImageHandler) DeleteImage(ctx context.Context, req *pb.DeleteImageRequest) (*emptypb.Empty, error) {
|
2025-10-25 17:41:04 +03:00
|
|
|
path := i.utils.MerchImageVolumePath(req.UserUuid, req.MerchUuid)
|
2025-10-22 21:34:17 +03:00
|
|
|
|
|
|
|
|
entries, err := os.ReadDir(path)
|
|
|
|
|
if err != nil {
|
|
|
|
|
if os.IsNotExist(err) {
|
|
|
|
|
return &emptypb.Empty{}, nil
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, entry := range entries {
|
|
|
|
|
if !entry.IsDir() {
|
|
|
|
|
filePath := filepath.Join(path, entry.Name())
|
|
|
|
|
if err := os.Remove(filePath); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &emptypb.Empty{}, nil
|
|
|
|
|
}
|