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  }