github.com/hellofresh/janus@v0.0.0-20230925145208-ce8de8183c67/pkg/api/in_memory_repository.go (about) 1 package api 2 3 import ( 4 "context" 5 "sync" 6 7 log "github.com/sirupsen/logrus" 8 ) 9 10 // InMemoryRepository represents a in memory repository 11 type InMemoryRepository struct { 12 sync.RWMutex 13 definitions map[string]*Definition 14 } 15 16 // NewInMemoryRepository creates a in memory repository 17 func NewInMemoryRepository() *InMemoryRepository { 18 return &InMemoryRepository{definitions: make(map[string]*Definition)} 19 } 20 21 // Close terminates the session. It's a runtime error to use a session 22 // after it has been closed. 23 func (r *InMemoryRepository) Close() error { 24 return nil 25 } 26 27 // Watch watches for changes on the database 28 func (r *InMemoryRepository) Watch(ctx context.Context, cfgChan chan<- ConfigurationChanged) { 29 30 } 31 32 // FindAll fetches all the api definitions available 33 func (r *InMemoryRepository) FindAll() ([]*Definition, error) { 34 r.RLock() 35 defer r.RUnlock() 36 37 var definitions []*Definition 38 for _, definition := range r.definitions { 39 definitions = append(definitions, definition) 40 } 41 42 return definitions, nil 43 } 44 45 func (r *InMemoryRepository) findByName(name string) (*Definition, error) { 46 definition, ok := r.definitions[name] 47 if false == ok { 48 return nil, ErrAPIDefinitionNotFound 49 } 50 51 return definition, nil 52 } 53 54 // Add adds an api definition to the repository 55 func (r *InMemoryRepository) add(definition *Definition) error { 56 r.Lock() 57 defer r.Unlock() 58 59 isValid, err := definition.Validate() 60 if false == isValid && err != nil { 61 log.WithError(err).Error("Validation errors") 62 return err 63 } 64 65 r.definitions[definition.Name] = definition 66 67 return nil 68 } 69 70 // Remove removes an api definition from the repository 71 func (r *InMemoryRepository) remove(name string) error { 72 r.Lock() 73 defer r.Unlock() 74 75 if _, err := r.findByName(name); err != nil { 76 return err 77 } 78 79 delete(r.definitions, name) 80 81 return nil 82 }