arnaucube
arnaucube/gogame-oldPublic Self-hosted repository
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}