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