diff --git a/endpoint/handlers.go b/endpoint/handlers.go index 9f1bb8c..ddbe670 100644 --- a/endpoint/handlers.go +++ b/endpoint/handlers.go @@ -121,6 +121,28 @@ func handleGetUserPlanets(c *gin.Context) { }) } +func handleGetPlanet(c *gin.Context) { + claims := jwt.ExtractClaims(c) + userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string)) + planetid := c.Param("planetid") + + user, err := userservice.GetUserById(userid) + if err != nil { + fail(c, err, "error on getting user") + return + } + + planet, err := gameservice.GetBuildings(user, bson.ObjectIdHex(planetid)) + if err != nil { + fail(c, err, "error upgrading building") + return + } + + c.JSON(200, gin.H{ + "planet": planet, + }) +} + type BuildMsg struct { PlanetId string Building string diff --git a/endpoint/serve.go b/endpoint/serve.go index 6f638d1..be38e28 100644 --- a/endpoint/serve.go +++ b/endpoint/serve.go @@ -96,6 +96,7 @@ func newApiService() *gin.Engine { api.GET("/", handleGetUser) api.GET("/resources", handleGetResources) api.GET("/planets", handleGetUserPlanets) + api.GET("/planets/:planetid", handleGetPlanet) api.POST("/buildings", handlePostUpgradeBuilding) } return api diff --git a/models/user.go b/models/user.go index a459b5b..29af8d1 100644 --- a/models/user.go +++ b/models/user.go @@ -33,6 +33,7 @@ type User struct { LastUpdated time.Time db *database.Db Resources Resources + Planets []bson.ObjectId } func NewUser(db *database.Db, name, password, email string) (*User, error) { @@ -64,17 +65,16 @@ func UserDbToUser(db *database.Db, u UserDb) *User { LastUpdated: u.LastUpdated, db: db, Resources: u.Resources, + Planets: u.Planets, } } func (u *User) StoreInDb() error { - userDb := UserDb{ - Id: u.Id, - Name: u.Name, - LastUpdated: time.Now(), - Resources: u.Resources, - } - err := u.db.Users.Update(bson.M{"_id": u.Id}, userDb) + err := u.db.Users.Update(bson.M{"_id": u.Id}, bson.M{"$set": bson.M{ + "lastupdated": time.Now(), + "resources": u.Resources, + "planets": u.Planets, + }}) return err } diff --git a/services/gamesrv/gamesrv.go b/services/gamesrv/gamesrv.go index 34d740d..38846e5 100644 --- a/services/gamesrv/gamesrv.go +++ b/services/gamesrv/gamesrv.go @@ -92,6 +92,15 @@ func (srv Service) PutPlanetInSolarSystem(position int64, planet *models.Planet) return &solarSystem, err } +func (srv Service) GetBuildings(user *models.User, planetid bson.ObjectId) (*models.Planet, error) { + var planet models.Planet + err := srv.db.Planets.Find(bson.M{"_id": planetid, "ownerid": user.Id}).One(&planet) + if err != nil { + return nil, err + } + return &planet, nil +} + func (srv Service) UpgradeBuilding(user *models.User, planetid bson.ObjectId, building string) (*models.Planet, error) { // get planet var planet models.Planet diff --git a/services/usersrv/usersrv.go b/services/usersrv/usersrv.go index f2ad783..e8737ab 100644 --- a/services/usersrv/usersrv.go +++ b/services/usersrv/usersrv.go @@ -49,7 +49,10 @@ func (srv Service) Register(name, password, email string) (*models.User, error) return nil, err } - _, _, err = srv.gamesrv.CreatePlanet(user.Id) + _, planet, err := srv.gamesrv.CreatePlanet(user.Id) + + user.Planets = append(user.Planets, planet.Id) + user.StoreInDb() return user, err }