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  }