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}
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}