This commit is contained in:
nquidox 2025-10-25 17:41:04 +03:00
parent d5610fbb30
commit a995f4c75a
3 changed files with 16 additions and 46 deletions

View file

@ -1,5 +1,7 @@
package config package config
import "strings"
type Config struct { type Config struct {
App AppConfig App AppConfig
} }
@ -19,9 +21,13 @@ func NewConfig() *Config {
Host: getEnv("HOST", ""), Host: getEnv("HOST", ""),
HttpPort: getEnv("HTTP_PORT", ""), HttpPort: getEnv("HTTP_PORT", ""),
GrpcPort: getEnv("GRPC_PORT", ""), GrpcPort: getEnv("GRPC_PORT", ""),
Domain: getEnv("DOMAIN", ""), Domain: formatDomain(getEnv("DOMAIN", "")),
Volume: getEnv("VOLUME", ""), Volume: getEnv("VOLUME", ""),
LogLevel: getEnv("LOG_LEVEL", ""), LogLevel: getEnv("LOG_LEVEL", ""),
}, },
} }
} }
func formatDomain(domain string) string {
return strings.TrimRight(domain, "/")
}

View file

@ -9,22 +9,22 @@ import (
type ImageHandler struct { type ImageHandler struct {
pb.UnimplementedImageStorageServer pb.UnimplementedImageStorageServer
converter interfaces.Converter converter interfaces.Converter
domain string
volume string volume string
utils interfaces.Utils
} }
type Deps struct { type Deps struct {
Converter interfaces.Converter Converter interfaces.Converter
Domain string
Volume string Volume string
Utils interfaces.Utils
} }
func NewHandler(deps Deps) *grpc.Server { func NewHandler(deps Deps) *grpc.Server {
srv := grpc.NewServer() srv := grpc.NewServer()
imgSrv := ImageHandler{ imgSrv := ImageHandler{
converter: deps.Converter, converter: deps.Converter,
domain: deps.Domain,
volume: deps.Volume, volume: deps.Volume,
utils: deps.Utils,
} }
pb.RegisterImageStorageServer(srv, &imgSrv) pb.RegisterImageStorageServer(srv, &imgSrv)

View file

@ -2,14 +2,12 @@ package mainHandler
import ( import (
"context" "context"
"fmt"
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/emptypb" "google.golang.org/protobuf/types/known/emptypb"
pb "imageStorage/pkg/proto/imageStorage" pb "imageStorage/pkg/proto/imageStorage"
"os" "os"
"path/filepath" "path/filepath"
"strings"
) )
func (i *ImageHandler) UploadImage(ctx context.Context, req *pb.UploadMerchImageRequest) (*pb.UploadMerchImageResponse, error) { func (i *ImageHandler) UploadImage(ctx context.Context, req *pb.UploadMerchImageRequest) (*pb.UploadMerchImageResponse, error) {
@ -17,20 +15,18 @@ func (i *ImageHandler) UploadImage(ctx context.Context, req *pb.UploadMerchImage
return nil, status.Errorf(codes.InvalidArgument, "image data is empty") return nil, status.Errorf(codes.InvalidArgument, "image data is empty")
} }
path := i._makeMerchImagePath(req.UserUuid, req.MerchUuid) path := i.utils.MerchImageVolumePath(req.UserUuid, req.MerchUuid)
if err := os.MkdirAll(path, 0777); err != nil { if err := os.MkdirAll(path, 0777); err != nil {
return nil, err return nil, err
} }
full := filepath.Join(path, "full.jpg")
thumbnail := filepath.Join(path, "thumbnail.jpg")
fullFile, err := os.Create(full) fullFile, err := os.Create(filepath.Join(path, i.utils.FilenameFromType("full")))
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer fullFile.Close() defer fullFile.Close()
thumbnailFile, err := os.Create(thumbnail) thumbnailFile, err := os.Create(filepath.Join(path, i.utils.FilenameFromType("thumbnail")))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -41,38 +37,15 @@ func (i *ImageHandler) UploadImage(ctx context.Context, req *pb.UploadMerchImage
} }
response := &pb.UploadMerchImageResponse{ response := &pb.UploadMerchImageResponse{
FullImage: i._makeMerchImageURL(req.UserUuid, req.MerchUuid, full), FullImage: i.utils.MerchImageURL(req.UserUuid, req.MerchUuid, "full"),
Thumbnail: i._makeMerchImageURL(req.UserUuid, req.MerchUuid, thumbnail), Thumbnail: i.utils.MerchImageURL(req.UserUuid, req.MerchUuid, "thumbnail"),
} }
return response, nil return response, nil
} }
func (i *ImageHandler) GetImage(ctx context.Context, req *pb.GetImageRequest) (*pb.GetImageResponse, error) {
path := i._makeMerchImagePath(req.UserUuid, req.MerchUuid)
unk := status.Error(codes.InvalidArgument, "unknown image type")
switch req.ImgType {
case pb.ImageType_UNKNOWN:
return nil, unk
case pb.ImageType_FULL:
return &pb.GetImageResponse{
Url: fmt.Sprintf("%s/%s", i.domain, filepath.Join(path, "full.jpg")),
Etag: "",
}, nil
case pb.ImageType_THUMBNAIL:
return &pb.GetImageResponse{
Url: fmt.Sprintf("%s/%s", i.domain, filepath.Join(path, "thumbnail.jpg")),
Etag: "",
}, nil
default:
return nil, unk
}
}
func (i *ImageHandler) DeleteImage(ctx context.Context, req *pb.DeleteImageRequest) (*emptypb.Empty, error) { func (i *ImageHandler) DeleteImage(ctx context.Context, req *pb.DeleteImageRequest) (*emptypb.Empty, error) {
path := i._makeMerchImagePath(req.UserUuid, req.MerchUuid) path := i.utils.MerchImageVolumePath(req.UserUuid, req.MerchUuid)
entries, err := os.ReadDir(path) entries, err := os.ReadDir(path)
if err != nil { if err != nil {
@ -93,12 +66,3 @@ func (i *ImageHandler) DeleteImage(ctx context.Context, req *pb.DeleteImageReque
return &emptypb.Empty{}, nil return &emptypb.Empty{}, nil
} }
func (i *ImageHandler) _makeMerchImagePath(u, m string) string {
return fmt.Sprintf("%s/merchImages/%s/%s", i.volume, u, m)
}
func (i *ImageHandler) _makeMerchImageURL(u, m, n string) string {
d := strings.TrimSuffix(i.domain, "/")
return fmt.Sprintf("%s/merchImages/%s/%s/%s", d, u, m, n)
}