github.com/k0marov/go-socnet@v0.0.0-20220715154813-90d07867c782/features/posts/store/file_storage/file_storage.go (about) 1 package file_storage 2 3 import ( 4 "github.com/k0marov/go-socnet/core/general/core_err" 5 "github.com/k0marov/go-socnet/core/general/core_values" 6 "github.com/k0marov/go-socnet/core/general/static_store" 7 "path/filepath" 8 "strconv" 9 10 "github.com/k0marov/go-socnet/features/posts/domain/values" 11 12 profiles "github.com/k0marov/go-socnet/features/profiles/store/file_storage" 13 ) 14 15 const PostPrefix = "post_" 16 const ImagePrefix = "image_" 17 18 type PostImageFilesCreator = func(values.PostId, core_values.UserId, []values.PostImageFile) ([]core_values.StaticPath, error) 19 type PostFilesDeleter = func(values.PostId, core_values.UserId) error 20 21 func NewPostImageFilesCreator(createFile static_store.StaticFileCreator) PostImageFilesCreator { 22 return func(post values.PostId, author core_values.UserId, images []values.PostImageFile) (paths []core_values.StaticPath, err error) { 23 dir := filepath.Join(profiles.ProfilePrefix+author, PostPrefix+post) 24 for _, image := range images { 25 filename := ImagePrefix + strconv.Itoa(image.Index) 26 path, err := createFile(image.File, dir, filename) 27 if err != nil { 28 return paths, core_err.Rethrow("storing a file", err) 29 } 30 paths = append(paths, path) 31 } 32 return 33 } 34 } 35 36 func NewPostFilesDeleter(deleteDir static_store.StaticDirDeleter) PostFilesDeleter { 37 return func(post values.PostId, author core_values.UserId) error { 38 err := deleteDir(GetPostDir(post, author)) 39 if err != nil { 40 return core_err.Rethrow("deleting the post directory", err) 41 } 42 return nil 43 } 44 } 45 46 func GetPostDir(post values.PostId, author core_values.UserId) string { 47 return filepath.Join(profiles.GetProfileDir(author), PostPrefix+post) 48 }