diff options
author | Mike Crute <mike@crute.us> | 2023-08-03 13:42:55 -0700 |
---|---|---|
committer | Mike Crute <mike@crute.us> | 2023-08-03 13:42:55 -0700 |
commit | fb4e88c5b1bec3c5d0e35b2c12561778b83f88c0 (patch) | |
tree | 2e07b4a86f63219dd08d5b2f2a1bb71015ff5b63 | |
parent | 377da930efda0851626a515756d1b83fef157511 (diff) | |
download | golib-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.mod | 2 | ||||
-rw-r--r-- | db/mongodb/mongodb_basic_store.go | 71 |
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 @@ | |||
1 | module code.crute.us/mcrute/golib/db/mongodb/v2 | 1 | module code.crute.us/mcrute/golib/db/mongodb/v2 |
2 | 2 | ||
3 | go 1.17 | 3 | go 1.20 |
4 | 4 | ||
5 | require ( | 5 | require ( |
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 @@ | |||
1 | package mongodb | ||
2 | |||
3 | import ( | ||
4 | "context" | ||
5 | "time" | ||
6 | |||
7 | "go.mongodb.org/mongo-driver/bson" | ||
8 | "go.mongodb.org/mongo-driver/bson/primitive" | ||
9 | ) | ||
10 | |||
11 | type MongoDbBasicModel interface { | ||
12 | MarkDeleted(time.Time) | ||
13 | RecordId() string | ||
14 | } | ||
15 | |||
16 | type MongoDbBasicStore[T MongoDbBasicModel] struct { | ||
17 | Db *Mongo | ||
18 | CollectionName string | ||
19 | } | ||
20 | |||
21 | func (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 | |||
34 | func (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 | |||
44 | func (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 | |||
57 | func (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 | |||
64 | func (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 | } | ||