store.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package dbstore
  2. import (
  3. "git.linuxforward.com/byop/byop-engine/dbmanager"
  4. )
  5. // Store provides a generic implementation of Repository
  6. type Store[T dbmanager.Entity] struct {
  7. Db dbmanager.DbManager[T]
  8. EntityType string
  9. }
  10. // NewStore creates a new generic store
  11. func NewStore[T dbmanager.Entity](db dbmanager.DbManager[T], entityType string) *Store[T] {
  12. return &Store[T]{
  13. Db: db,
  14. EntityType: entityType,
  15. }
  16. }
  17. // Create creates a new entity
  18. func (gs *Store[T]) Create(entity T) error {
  19. return gs.Db.Create(gs.EntityType, entity)
  20. }
  21. // GetByID retrieves an entity by ID
  22. func (gs *Store[T]) GetByID(id string) (T, error) {
  23. entity, err := gs.Db.GetByID(gs.EntityType, id)
  24. var zero T
  25. if err != nil {
  26. return zero, err
  27. }
  28. // No need for nil check and type assertion if Db.GetByID returns T directly
  29. return entity, nil
  30. }
  31. // Update updates an existing entity
  32. func (gs *Store[T]) Update(entity T) error {
  33. return gs.Db.Update(gs.EntityType, entity)
  34. }
  35. // Delete deletes an entity
  36. func (gs *Store[T]) Delete(id string) error {
  37. return gs.Db.Delete(gs.EntityType, id)
  38. }
  39. // List retrieves entities based on a filter
  40. func (gs *Store[T]) List(filter map[string]interface{}) ([]T, error) {
  41. entities, err := gs.Db.List(gs.EntityType, filter)
  42. if err != nil {
  43. return nil, err
  44. }
  45. // No type assertions needed if Db.List returns []T directly
  46. return entities, nil
  47. }