From fb4e88c5b1bec3c5d0e35b2c12561778b83f88c0 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Thu, 3 Aug 2023 13:42:55 -0700 Subject: db/mongodb: add basic store generic --- db/mongodb/go.mod | 2 +- db/mongodb/mongodb_basic_store.go | 71 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 db/mongodb/mongodb_basic_store.go diff --git a/db/mongodb/go.mod b/db/mongodb/go.mod index 6d5ba3b..432040a 100644 --- a/db/mongodb/go.mod +++ b/db/mongodb/go.mod @@ -1,6 +1,6 @@ module code.crute.us/mcrute/golib/db/mongodb/v2 -go 1.17 +go 1.20 require ( code.crute.us/mcrute/golib/secrets v0.1.0 diff --git a/db/mongodb/mongodb_basic_store.go b/db/mongodb/mongodb_basic_store.go new file mode 100644 index 0000000..64b10db --- /dev/null +++ b/db/mongodb/mongodb_basic_store.go @@ -0,0 +1,71 @@ +package mongodb + +import ( + "context" + "time" + + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" +) + +type MongoDbBasicModel interface { + MarkDeleted(time.Time) + RecordId() string +} + +type MongoDbBasicStore[T MongoDbBasicModel] struct { + Db *Mongo + CollectionName string +} + +func (s *MongoDbBasicStore[T]) List(ctx context.Context) ([]T, error) { + out := []T{} + + filter := bson.M{} + filter["deleted"] = primitive.Null{} + + if err := s.Db.FindAllByFilter(ctx, s.CollectionName, filter, &out); err != nil { + return nil, err + } + + return out, nil +} + +func (s *MongoDbBasicStore[T]) ListAll(ctx context.Context) ([]T, error) { + out := []T{} + + if err := s.Db.FindAllByFilter(ctx, s.CollectionName, bson.M{}, &out); err != nil { + return nil, err + } + + return out, nil +} + +func (s *MongoDbBasicStore[T]) Get(ctx context.Context, name string) (T, error) { + var out T + + filter := bson.M{} + filter["_id"] = name + + if err := s.Db.FindOneByFilter(ctx, s.CollectionName, filter, &out); err != nil { + return out, err + } + + return out, nil +} + +func (s *MongoDbBasicStore[T]) Upsert(ctx context.Context, m T) error { + if err := s.Db.ReplaceOneById(ctx, s.CollectionName, m.RecordId(), m); err != nil { + return err + } + return nil +} + +func (s *MongoDbBasicStore[T]) Delete(ctx context.Context, m T) error { + k, err := s.Get(ctx, m.RecordId()) + if err != nil { + return err + } + k.MarkDeleted(time.Now()) + return s.Upsert(ctx, k) +} -- cgit v1.2.3