package mainHandler import ( "context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/emptypb" pb "imageStorage/pkg/proto/imageStorage" "os" "path/filepath" ) 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") } path := i.utils.MerchImageVolumePath(req.UserUuid, req.MerchUuid) if err := os.MkdirAll(path, 0777); err != nil { return nil, err } fullFile, err := os.Create(filepath.Join(path, i.utils.FilenameFromType("full"))) if err != nil { return nil, err } defer fullFile.Close() thumbnailFile, err := os.Create(filepath.Join(path, i.utils.FilenameFromType("thumbnail"))) 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{ FullImage: i.utils.MerchImageURL(req.UserUuid, req.MerchUuid, "full"), Thumbnail: i.utils.MerchImageURL(req.UserUuid, req.MerchUuid, "thumbnail"), } return response, nil } func (i *ImageHandler) DeleteImage(ctx context.Context, req *pb.DeleteImageRequest) (*emptypb.Empty, error) { path := i.utils.MerchImageVolumePath(req.UserUuid, req.MerchUuid) 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 }