gogame-old/models/user.go
models/user.goRaw
1package models
2
3import (
4 "time"
5
6 "github.com/arnaucube/gogame/database"
7 "gopkg.in/mgo.v2/bson"
8)
9
10// UserDb is the data in DB
11type UserDb struct {
12 Id bson.ObjectId `json:"id" bson:"_id,omitempty"`
13 Name string
14 Password string
15 Email string
16 LastUpdated time.Time
17 Planets []bson.ObjectId
18}
19
20// User is the data in memory, after getting it from DB
21type User struct {
22 db *database.Db
23 Id bson.ObjectId `json:"id" bson:"_id,omitempty"`
24 Name string
25 LastUpdated time.Time
26 Planets []bson.ObjectId
27}
28
29func NewUser(db *database.Db, name, password, email string) (*User, error) {
30 newUser := UserDb{
31 Id: bson.NewObjectId(),
32 Name: name,
33 Password: password,
34 Email: email,
35 LastUpdated: time.Now(),
36 }
37 err := db.Users.Insert(newUser)
38 if err != nil {
39 return nil, err
40 }
41 user := UserDbToUser(db, newUser)
42 return user, nil
43}
44
45func UserDbToUser(db *database.Db, u UserDb) *User {
46 return &User{
47 Id: u.Id,
48 Name: u.Name,
49 LastUpdated: u.LastUpdated,
50 db: db,
51 Planets: u.Planets,
52 }
53}
54
55func (u *User) StoreInDb() error {
56 err := u.db.Users.Update(bson.M{"_id": u.Id}, bson.M{"$set": bson.M{
57 "lastupdated": time.Now(),
58 "planets": u.Planets,
59 }})
60 return err
61
62}
63
64func (u *User) GetFromDb() error {
65 var userDb UserDb
66 err := u.db.Users.Find(bson.M{"_id": u.Id}).One(&userDb)
67 if err != nil {
68 return err
69 }
70 u = UserDbToUser(u.db, userDb)
71 return nil
72}
73
74func (u *User) GetPlanets() ([]Planet, error) {
75 var planets []Planet
76 err := u.db.Planets.Find(bson.M{"ownerid": u.Id}).All(&planets)
77 if err != nil {
78 return planets, err
79 }
80 return planets, nil
81}