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 Points int64 // real points are this value / 1000
19}
20
21// User is the data in memory, after getting it from DB
22type User struct {
23 db *database.Db
24 Id bson.ObjectId `json:"id" bson:"_id,omitempty"`
25 Name string
26 LastUpdated time.Time
27 Planets []bson.ObjectId
28 Points int64
29}
30
31func NewUser(db *database.Db, name, password, email string) (*User, error) {
32 newUser := UserDb{
33 Id: bson.NewObjectId(),
34 Name: name,
35 Password: password,
36 Email: email,
37 LastUpdated: time.Now(),
38 Points: 0,
39 }
40 err := db.Users.Insert(newUser)
41 if err != nil {
42 return nil, err
43 }
44 user := UserDbToUser(db, newUser)
45 return user, nil
46}
47
48func UserDbToUser(db *database.Db, u UserDb) *User {
49 return &User{
50 Id: u.Id,
51 Name: u.Name,
52 LastUpdated: u.LastUpdated,
53 db: db,
54 Planets: u.Planets,
55 Points: u.Points,
56 }
57}
58
59func (u *User) StoreInDb() error {
60 err := u.db.Users.Update(bson.M{"_id": u.Id}, bson.M{"$set": bson.M{
61 "lastupdated": time.Now(),
62 "planets": u.Planets,
63 }})
64 return err
65
66}
67
68func (u *User) GetFromDb() error {
69 var userDb UserDb
70 err := u.db.Users.Find(bson.M{"_id": u.Id}).One(&userDb)
71 if err != nil {
72 return err
73 }
74 u = UserDbToUser(u.db, userDb)
75 return nil
76}
77
78func (u *User) GetPlanets() ([]Planet, error) {
79 var planets []Planet
80 err := u.db.Planets.Find(bson.M{"ownerid": u.Id}).All(&planets)
81 if err != nil {
82 return planets, err
83 }
84 return planets, nil
85}
86
87func AddPoints(db *database.Db, userId bson.ObjectId, points int64) error {
88 var userDb UserDb
89 err := db.Users.Find(bson.M{"_id": userId}).One(&userDb)
90 if err != nil {
91 return err
92 }
93 newPoints := userDb.Points + points
94
95 err = db.Users.Update(bson.M{"_id": userId}, bson.M{"$set": bson.M{
96 "points": newPoints,
97 }})
98 return err
99}