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.

81 lines
1.6 KiB

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