github.com/moov-io/imagecashletter@v0.10.1/internal/storage/storage.go (about) 1 // Copyright 2020 The Moov Authors 2 // Use of this source code is governed by an Apache License 3 // license that can be found in the LICENSE file. 4 5 package storage 6 7 import ( 8 "errors" 9 "sync" 10 11 "github.com/moov-io/imagecashletter" 12 ) 13 14 type ICLFileRepository interface { 15 GetFiles() ([]*imagecashletter.File, error) 16 GetFile(fileId string) (*imagecashletter.File, error) 17 18 SaveFile(file *imagecashletter.File) error 19 DeleteFile(fileId string) error 20 } 21 22 type memoryICLFileRepository struct { 23 mu sync.Mutex 24 files map[string]*imagecashletter.File 25 } 26 27 func NewInMemoryRepo() ICLFileRepository { 28 return &memoryICLFileRepository{ 29 files: make(map[string]*imagecashletter.File), 30 } 31 } 32 33 func (r *memoryICLFileRepository) GetFiles() ([]*imagecashletter.File, error) { 34 r.mu.Lock() 35 defer r.mu.Unlock() 36 37 var out []*imagecashletter.File 38 for _, v := range r.files { 39 f := *v 40 out = append(out, &f) 41 } 42 return out, nil 43 } 44 45 func (r *memoryICLFileRepository) GetFile(fileId string) (*imagecashletter.File, error) { 46 r.mu.Lock() 47 defer r.mu.Unlock() 48 49 for i := range r.files { 50 if r.files[i].ID == fileId { 51 f := *r.files[i] 52 return &f, nil 53 } 54 } 55 return nil, nil 56 } 57 58 func (r *memoryICLFileRepository) SaveFile(file *imagecashletter.File) error { 59 r.mu.Lock() 60 defer r.mu.Unlock() 61 62 if file.ID == "" { 63 return errors.New("empty ICL File ID") 64 } 65 r.files[file.ID] = file 66 return nil 67 } 68 69 func (r *memoryICLFileRepository) DeleteFile(fileId string) error { 70 r.mu.Lock() 71 defer r.mu.Unlock() 72 73 if fileId == "" { 74 return errors.New("empty ICL File Id") 75 } 76 77 delete(r.files, fileId) 78 79 return nil 80 }