This repository has been archived by the owner on May 26, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 92
/
repository_mongodb.go
88 lines (80 loc) · 2.01 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
package bookmark
import (
"github.com/eminetto/clean-architecture-go/pkg/entity"
"github.com/juju/mgosession"
mgo "gopkg.in/mgo.v2"
bson "gopkg.in/mgo.v2/bson"
)
//MongoRepository mongodb repo
type MongoRepository struct {
pool *mgosession.Pool
db string
}
//NewMongoRepository create new repository
func NewMongoRepository(p *mgosession.Pool, db string) *MongoRepository {
return &MongoRepository{
pool: p,
db: db,
}
}
//Find a bookmark
func (r *MongoRepository) Find(id entity.ID) (*entity.Bookmark, error) {
result := entity.Bookmark{}
session := r.pool.Session(nil)
coll := session.DB(r.db).C("bookmark")
err := coll.Find(bson.M{"_id": id}).One(&result)
switch err {
case nil:
return &result, nil
case mgo.ErrNotFound:
return nil, entity.ErrNotFound
default:
return nil, err
}
}
//Store a bookmark
func (r *MongoRepository) Store(b *entity.Bookmark) (entity.ID, error) {
session := r.pool.Session(nil)
coll := session.DB(r.db).C("bookmark")
err := coll.Insert(b)
if err != nil {
return entity.ID(0), err
}
return b.ID, nil
}
//FindAll bookmarks
func (r *MongoRepository) FindAll() ([]*entity.Bookmark, error) {
var d []*entity.Bookmark
session := r.pool.Session(nil)
coll := session.DB(r.db).C("bookmark")
err := coll.Find(nil).Sort("name").All(&d)
switch err {
case nil:
return d, nil
case mgo.ErrNotFound:
return nil, entity.ErrNotFound
default:
return nil, err
}
}
//Search bookmarks
func (r *MongoRepository) Search(query string) ([]*entity.Bookmark, error) {
var d []*entity.Bookmark
session := r.pool.Session(nil)
coll := session.DB(r.db).C("bookmark")
err := coll.Find(bson.M{"name": &bson.RegEx{Pattern: query, Options: "i"}}).Limit(10).Sort("name").All(&d)
switch err {
case nil:
return d, nil
case mgo.ErrNotFound:
return nil, entity.ErrNotFound
default:
return nil, err
}
}
//Delete a bookmark
func (r *MongoRepository) Delete(id entity.ID) error {
session := r.pool.Session(nil)
coll := session.DB(r.db).C("bookmark")
return coll.Remove(bson.M{"_id": id})
}