github.com/EngineerKamesh/gofullstack@v0.0.0-20180609171605-d41341d7d4ee/volume2/section5/gopherfacedb/common/datastore/mongodb.go (about) 1 package datastore 2 3 import ( 4 "github.com/EngineerKamesh/gofullstack/volume2/section5/gopherfacedb/models" 5 6 mgo "gopkg.in/mgo.v2" 7 "gopkg.in/mgo.v2/bson" 8 ) 9 10 type MongoDBDatastore struct { 11 *mgo.Session 12 } 13 14 func NewMongoDBDatastore(url string) (*MongoDBDatastore, error) { 15 session, err := mgo.Dial(url) 16 if err != nil { 17 return nil, err 18 } 19 return &MongoDBDatastore{ 20 Session: session, 21 }, nil 22 } 23 24 func (m *MongoDBDatastore) CreateUser(user *models.User) error { 25 26 session := m.Copy() 27 28 defer session.Close() 29 userCollection := session.DB("gopherface").C("User") 30 err := userCollection.Insert(user) 31 if err != nil { 32 return err 33 } 34 35 return nil 36 } 37 38 func (m *MongoDBDatastore) GetUser(username string) (*models.User, error) { 39 40 session := m.Copy() 41 defer session.Close() 42 userCollection := session.DB("gopherface").C("User") 43 u := models.User{} 44 err := userCollection.Find(bson.M{"username": username}).One(&u) 45 if err != nil { 46 return nil, err 47 } 48 return &u, nil 49 50 } 51 52 func (m *MongoDBDatastore) Close() { 53 m.Close() 54 }