aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Crute <mike@crute.us>2023-08-03 13:42:55 -0700
committerMike Crute <mike@crute.us>2023-08-03 13:42:55 -0700
commitfb4e88c5b1bec3c5d0e35b2c12561778b83f88c0 (patch)
tree2e07b4a86f63219dd08d5b2f2a1bb71015ff5b63
parent377da930efda0851626a515756d1b83fef157511 (diff)
downloadgolib-fb4e88c5b1bec3c5d0e35b2c12561778b83f88c0.tar.bz2
golib-fb4e88c5b1bec3c5d0e35b2c12561778b83f88c0.tar.xz
golib-fb4e88c5b1bec3c5d0e35b2c12561778b83f88c0.zip
db/mongodb: add basic store genericdb/mongodb/v2.1.0
-rw-r--r--db/mongodb/go.mod2
-rw-r--r--db/mongodb/mongodb_basic_store.go71
2 files changed, 72 insertions, 1 deletions
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 @@
1module code.crute.us/mcrute/golib/db/mongodb/v2 1module code.crute.us/mcrute/golib/db/mongodb/v2
2 2
3go 1.17 3go 1.20
4 4
5require ( 5require (
6 code.crute.us/mcrute/golib/secrets v0.1.0 6 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 @@
1package mongodb
2
3import (
4 "context"
5 "time"
6
7 "go.mongodb.org/mongo-driver/bson"
8 "go.mongodb.org/mongo-driver/bson/primitive"
9)
10
11type MongoDbBasicModel interface {
12 MarkDeleted(time.Time)
13 RecordId() string
14}
15
16type MongoDbBasicStore[T MongoDbBasicModel] struct {
17 Db *Mongo
18 CollectionName string
19}
20
21func (s *MongoDbBasicStore[T]) List(ctx context.Context) ([]T, error) {
22 out := []T{}
23
24 filter := bson.M{}
25 filter["deleted"] = primitive.Null{}
26
27 if err := s.Db.FindAllByFilter(ctx, s.CollectionName, filter, &out); err != nil {
28 return nil, err
29 }
30
31 return out, nil
32}
33
34func (s *MongoDbBasicStore[T]) ListAll(ctx context.Context) ([]T, error) {
35 out := []T{}
36
37 if err := s.Db.FindAllByFilter(ctx, s.CollectionName, bson.M{}, &out); err != nil {
38 return nil, err
39 }
40
41 return out, nil
42}
43
44func (s *MongoDbBasicStore[T]) Get(ctx context.Context, name string) (T, error) {
45 var out T
46
47 filter := bson.M{}
48 filter["_id"] = name
49
50 if err := s.Db.FindOneByFilter(ctx, s.CollectionName, filter, &out); err != nil {
51 return out, err
52 }
53
54 return out, nil
55}
56
57func (s *MongoDbBasicStore[T]) Upsert(ctx context.Context, m T) error {
58 if err := s.Db.ReplaceOneById(ctx, s.CollectionName, m.RecordId(), m); err != nil {
59 return err
60 }
61 return nil
62}
63
64func (s *MongoDbBasicStore[T]) Delete(ctx context.Context, m T) error {
65 k, err := s.Get(ctx, m.RecordId())
66 if err != nil {
67 return err
68 }
69 k.MarkDeleted(time.Now())
70 return s.Upsert(ctx, k)
71}