You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

99 lines
2.1 KiB

package models
import (
"time"
"github.com/arnaucube/gogame/database"
"gopkg.in/mgo.v2/bson"
)
// UserDb is the data in DB
type UserDb struct {
Id bson.ObjectId `json:"id" bson:"_id,omitempty"`
Name string
Password string
Email string
LastUpdated time.Time
Planets []bson.ObjectId
Points int64 // real points are this value / 1000
}
// User is the data in memory, after getting it from DB
type User struct {
db *database.Db
Id bson.ObjectId `json:"id" bson:"_id,omitempty"`
Name string
LastUpdated time.Time
Planets []bson.ObjectId
Points int64
}
func NewUser(db *database.Db, name, password, email string) (*User, error) {
newUser := UserDb{
Id: bson.NewObjectId(),
Name: name,
Password: password,
Email: email,
LastUpdated: time.Now(),
Points: 0,
}
err := db.Users.Insert(newUser)
if err != nil {
return nil, err
}
user := UserDbToUser(db, newUser)
return user, nil
}
func UserDbToUser(db *database.Db, u UserDb) *User {
return &User{
Id: u.Id,
Name: u.Name,
LastUpdated: u.LastUpdated,
db: db,
Planets: u.Planets,
Points: u.Points,
}
}
func (u *User) StoreInDb() error {
err := u.db.Users.Update(bson.M{"_id": u.Id}, bson.M{"$set": bson.M{
"lastupdated": time.Now(),
"planets": u.Planets,
}})
return err
}
func (u *User) GetFromDb() error {
var userDb UserDb
err := u.db.Users.Find(bson.M{"_id": u.Id}).One(&userDb)
if err != nil {
return err
}
u = UserDbToUser(u.db, userDb)
return nil
}
func (u *User) GetPlanets() ([]Planet, error) {
var planets []Planet
err := u.db.Planets.Find(bson.M{"ownerid": u.Id}).All(&planets)
if err != nil {
return planets, err
}
return planets, nil
}
func AddPoints(db *database.Db, userId bson.ObjectId, points int64) error {
var userDb UserDb
err := db.Users.Find(bson.M{"_id": userId}).One(&userDb)
if err != nil {
return err
}
newPoints := userDb.Points + points
err = db.Users.Update(bson.M{"_id": userId}, bson.M{"$set": bson.M{
"points": newPoints,
}})
return err
}