github.com/iron-io/functions@v0.0.0-20180820112432-d59d7d1c40b2/examples/blog/database/post.go (about) 1 package database 2 3 import ( 4 "errors" 5 6 "github.com/iron-io/functions/examples/blog/models" 7 "gopkg.in/mgo.v2" 8 "gopkg.in/mgo.v2/bson" 9 ) 10 11 var ( 12 ErrNotObjectIdHex = errors.New("Invalid ID") 13 ) 14 15 func (db *Database) SavePost(post *models.Post) (*models.Post, error) { 16 s := db.Session.Copy() 17 defer s.Close() 18 19 c := s.DB("").C("post") 20 21 if post.ID.Hex() == "" { 22 post.ID = bson.NewObjectId() 23 } 24 id := post.ID 25 26 change := mgo.Change{ 27 Update: bson.M{"$set": post}, 28 ReturnNew: true, 29 Upsert: true, 30 } 31 32 _, err := c.Find(bson.M{"_id": id}).Apply(change, &post) 33 34 if err != nil { 35 return nil, err 36 } 37 38 return post, nil 39 } 40 41 func (db *Database) GetPost(id string) (*models.Post, error) { 42 s := db.Session.Copy() 43 defer s.Close() 44 45 c := s.DB("").C("post") 46 47 var post models.Post 48 if !bson.IsObjectIdHex(id) { 49 return nil, ErrNotObjectIdHex 50 } 51 52 err := c.Find(bson.M{"_id": bson.ObjectIdHex(id)}).One(&post) 53 if err != nil { 54 return nil, err 55 } 56 57 return &post, nil 58 } 59 60 func (db *Database) GetPosts(query []bson.M) ([]*models.Post, error) { 61 s := db.Session.Copy() 62 defer s.Close() 63 64 c := s.DB("").C("post") 65 66 var posts []*models.Post 67 68 err := c.Pipe(query).All(&posts) 69 if err != nil { 70 return nil, err 71 } 72 return posts, nil 73 }