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  }