// GetUserAttributes given a user, load all cards and addresses connected to that user func (m *Mongo) GetUserAttributes(u *users.User) error { s := m.Session.Copy() defer s.Close() ids := make([]bson.ObjectId, 0) for _, a := range u.Addresses { if !bson.IsObjectIdHex(a.ID) { return ErrInvalidHexID } ids = append(ids, bson.ObjectIdHex(a.ID)) } var ma []MongoAddress c := s.DB("").C("addresses") err := c.Find(bson.M{"_id": bson.M{"$in": ids}}).All(&ma) if err != nil { return err } na := make([]users.Address, 0) for _, a := range ma { a.Address.ID = a.ID.Hex() na = append(na, a.Address) } u.Addresses = na ids = make([]bson.ObjectId, 0) for _, c := range u.Cards { if !bson.IsObjectIdHex(c.ID) { return ErrInvalidHexID } ids = append(ids, bson.ObjectIdHex(c.ID)) } var mc []MongoCard c = s.DB("").C("cards") err = c.Find(bson.M{"_id": bson.M{"$in": ids}}).All(&mc) if err != nil { return err } nc := make([]users.Card, 0) for _, ca := range mc { ca.Card.ID = ca.ID.Hex() nc = append(nc, ca.Card) } u.Cards = nc return nil }
func (s *fixedService) PostUser(u users.User) (string, error) { u.NewSalt() u.Password = calculatePassHash(u.Password, u.Salt) err := db.CreateUser(&u) return u.UserID, err }
func (f fake) GetUserAttributes(u *users.User) error { u.Addresses = append(u.Addresses, TestAddress) return nil }