add book store

This commit is contained in:
rmanach
2025-01-03 16:18:39 +01:00
parent e0d7eeadc3
commit ae27d07170
6 changed files with 89 additions and 31 deletions
+69
View File
@@ -0,0 +1,69 @@
package services
import (
"errors"
"io"
"os"
"path/filepath"
"sync"
"github.com/rs/zerolog/log"
)
var (
ErrFileCreation = errors.New("unexpected error occurred while creating book file")
ErrFileCopy = errors.New("unexpected error occurred while copying book file")
)
type IStore interface {
Save(name string, content io.ReadCloser) error
}
var _ IStore = (*BookStore)(nil)
type BookStore struct {
processing *sync.WaitGroup
dir string
}
func NewBookStore(dir string) *BookStore {
if err := os.MkdirAll(dir, 0755); err != nil { //nolint
log.Fatal().Err(err).Msg("unable to create store dir")
}
return &BookStore{
processing: &sync.WaitGroup{},
dir: dir,
}
}
func (bs *BookStore) Done() <-chan struct{} {
chDone := make(chan struct{})
go func() {
bs.processing.Wait()
chDone <- struct{}{}
log.Info().Msg("book store processing done")
}()
return chDone
}
func (bs *BookStore) Save(name string, content io.ReadCloser) error {
bs.processing.Add(1)
defer bs.processing.Done()
defer content.Close()
dst, err := os.Create(filepath.Join(GetEnv().GetDir(), name))
if err != nil {
log.Err(err).Msg(ErrFileCreation.Error())
return ErrFileCreation
}
defer dst.Close()
if _, err := io.Copy(dst, content); err != nil {
log.Err(err).Msg(ErrFileCopy.Error())
return ErrFileCopy
}
return nil
}
-5
View File
@@ -71,11 +71,6 @@ func newEnv() environment {
if storeDir == "" {
storeDir = defaultMainDir
}
if err := os.MkdirAll(storeDir, 0755); err != nil { //nolint
log.Fatal().Err(err).Msg("unable to create store dir")
}
env.storeDir = storeDir
return env