/
repository_mongodb.go
100 lines (86 loc) · 2.58 KB
/
repository_mongodb.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package post
import (
"context"
"time"
"github.com/Januadrym/seennit/internal/app/types"
"github.com/globalsign/mgo"
"github.com/globalsign/mgo/bson"
"github.com/sirupsen/logrus"
)
type (
MongoDBRepository struct {
sessions *mgo.Session
}
)
func NewMongoDBRepo(session *mgo.Session) *MongoDBRepository {
return &MongoDBRepository{
sessions: session,
}
}
func (r *MongoDBRepository) collection(s *mgo.Session) *mgo.Collection {
return s.DB("").C("posts")
}
func (r *MongoDBRepository) Create(ctx context.Context, req *types.Post) error {
s := r.sessions.Clone()
defer s.Close()
req.UpdatedAt = req.CreatedAt
if err := r.collection(s).Insert(req); err != nil {
return err
}
return nil
}
func (r *MongoDBRepository) CheckPostBelongTo(ctx context.Context, idCom string, idPost string) (*types.Post, error) {
s := r.sessions.Clone()
defer s.Close()
var p *types.Post
if err := r.collection(s).Find(bson.M{"community_id": idCom, "id": idPost}).One(&p); err != nil {
return nil, err
}
return p, nil
}
func (r *MongoDBRepository) FindByID(ctx context.Context, idPost string) (*types.Post, error) {
s := r.sessions.Clone()
defer s.Close()
var p *types.Post
if err := r.collection(s).Find(bson.M{"id": idPost}).One(&p); err != nil {
return nil, err
}
return p, nil
}
func (r *MongoDBRepository) GetAllPost(ctx context.Context, idCom string) ([]*types.Post, error) {
s := r.sessions.Clone()
defer s.Close()
var listPost []*types.Post
param := []types.Status{types.StatusPublic, types.StatusArchived}
if err := r.collection(s).Find(bson.M{"community_id": idCom, "status": bson.M{"$in": param}}).All(&listPost); err != nil {
logrus.Errorf("failed to get posts, err : %v", err)
return nil, err
}
return listPost, nil
}
func (r *MongoDBRepository) UpdatePost(ctx context.Context, id string, p *types.PostUpdateRequest) error {
s := r.sessions.Clone()
defer s.Close()
p.UpdatedAt = time.Now()
if err := r.collection(s).Update(bson.D{{Name: "id", Value: id}}, bson.M{"$set": p}); err != nil {
return err
}
return nil
}
func (r *MongoDBRepository) ChangeStatus(ctx context.Context, id string, status types.Status) error {
s := r.sessions.Clone()
defer s.Close()
if err := r.collection(s).Update(bson.M{"id": id}, bson.M{"$set": bson.M{"status": status}}); err != nil {
return err
}
return nil
}
func (r *MongoDBRepository) GetEntire(ctx context.Context) ([]*types.Post, error) {
s := r.sessions.Clone()
defer s.Close()
var list []*types.Post
if err := r.collection(s).Find(bson.M{"status": types.StatusPublic}).All(&list); err != nil {
return nil, err
}
return list, nil
}