api /resources/:userid working
arnaucube arnaucube@gmail.com
Fri, 14 Jun 2019 20:43:18 +0200
7 files changed,
78 insertions(+),
19 deletions(-)
M
cmd/server.go
→
cmd/server.go
@@ -4,6 +4,7 @@ import (
"github.com/arnaucube/gogame/config" "github.com/arnaucube/gogame/database" "github.com/arnaucube/gogame/endpoint" + "github.com/arnaucube/gogame/services/gamesrv" "github.com/arnaucube/gogame/services/usersrv" "github.com/urfave/cli" )@@ -28,7 +29,8 @@ return err
} // services - userservice := usersrv.New(db) + gameservice := gamesrv.New(db) + userservice := usersrv.New(db, gameservice) if err != nil { return err }
M
endpoint/handlers.go
→
endpoint/handlers.go
@@ -60,3 +60,23 @@ "token": token,
"user": user, }) } + +func handleGetResources(c *gin.Context) { + userid := c.Param("userid") + + user, err := userservice.GetUserById(userid) + if err != nil { + fail(c, err, "error on getting user") + return + } + resources, err := user.GetResources() + if err != nil { + fail(c, err, "error on getting user") + return + } + + c.JSON(200, gin.H{ + "user": user, + "resources": resources, + }) +}
M
endpoint/serve.go
→
endpoint/serve.go
@@ -19,6 +19,9 @@ api.GET("/", handleMain)
api.GET("/info", handleInfo) api.POST("/register", handleRegister) api.POST("/login", handleLogin) + + // TODO add jwt checker + api.GET("/resources/:userid", handleGetResources) return api }
M
models/user.go
→
models/user.go
@@ -65,7 +65,7 @@ func (u *User) StoreInDb() error {
userDb := UserDb{ Id: u.Id, Name: u.Name, - LastUpdated: u.LastUpdated, + LastUpdated: time.Now(), Resources: u.Resources, } err := u.db.Users.Update(bson.M{"_id": u.Id}, userDb)@@ -85,16 +85,16 @@ }
func (u *User) GetPlanets() ([]Planet, error) { var planets []Planet - err := u.db.Users.Find(bson.M{"OwnerId": u.Id}).All(&planets) + err := u.db.Planets.Find(bson.M{"ownerid": u.Id}).All(&planets) if err != nil { return planets, err } return planets, nil } -// GetResources updates the values of resources and returns the value +// GetResources updates the values of resources and returns the value, also updates the user.Resources // Resource types: metal, crystal, deuterium, energy -func (u *User) GetResources() (*User, error) { +func (u *User) GetResources() (*Resources, error) { // get current values err := u.GetFromDb() if err != nil {@@ -112,16 +112,17 @@ return nil, err
} // get Resource-Plant level in each planet + // and calculate growth = ResourcePlant.Level for each planet var metalGrowth, crystalGrowth, deuteriumGrowth, energyGrowth int64 for _, planet := range planets { - // calculate growth = ResourcePlant.Level for each planet + fmt.Println("planet", planet) // TODO find correct formulas - metalGrowth = metalGrowth + (planet.Buildings.MetalMine * int64(delta)) - crystalGrowth = crystalGrowth + (planet.Buildings.CrystalMine * int64(delta)) - deuteriumGrowth = deuteriumGrowth + (planet.Buildings.DeuteriumMine * int64(delta)) - energyGrowth = energyGrowth + (planet.Buildings.EnergyMine * int64(delta)) + metalGrowth = metalGrowth + ((1 + planet.Buildings.MetalMine) * int64(delta)) + crystalGrowth = crystalGrowth + ((1 * planet.Buildings.CrystalMine) * int64(delta)) + deuteriumGrowth = deuteriumGrowth + ((1 * planet.Buildings.DeuteriumMine) * int64(delta)) + energyGrowth = energyGrowth + ((1 * planet.Buildings.EnergyMine) * int64(delta)) } - // calculate newAmount = oldAmount + (growth & DeltaTime) + // calculate newAmount = oldAmount + growth u.Resources.Metal = u.Resources.Metal + metalGrowth u.Resources.Crystal = u.Resources.Crystal + crystalGrowth u.Resources.Deuterium = u.Resources.Deuterium + deuteriumGrowth@@ -134,5 +135,5 @@ return nil, err
} // return user - return u, nil + return &u.Resources, nil }
M
services/gamesrv/gamesrv.go
→
services/gamesrv/gamesrv.go
@@ -29,6 +29,12 @@ newPlanet := models.Planet{
Size: size, Name: name, OwnerId: userId, + Buildings: models.BuildingsList{ + MetalMine: 1, + CrystalMine: 1, + DeuteriumMine: 1, + EnergyMine: 1, + }, } err := srv.db.Planets.Insert(newPlanet) if err != nil {
M
services/usersrv/usersrv.go
→
services/usersrv/usersrv.go
@@ -6,18 +6,21 @@ "time"
"github.com/arnaucube/gogame/database" "github.com/arnaucube/gogame/models" + "github.com/arnaucube/gogame/services/gamesrv" jwt "github.com/dgrijalva/jwt-go" "golang.org/x/crypto/bcrypt" "gopkg.in/mgo.v2/bson" ) type Service struct { - db *database.Db + db *database.Db + gamesrv *gamesrv.Service } -func New(db *database.Db) *Service { +func New(db *database.Db, gameservice *gamesrv.Service) *Service { return &Service{ - db, + db: db, + gamesrv: gameservice, } }@@ -42,6 +45,12 @@ if err != nil {
return nil, err } user, err := models.NewUser(srv.db, name, hashedPassword, email) + if err != nil { + return nil, err + } + + _, _, err = srv.gamesrv.CreatePlanet(user.Id) + return user, err }@@ -71,6 +80,15 @@ return nil, nil, errors.New("error creating token")
} return &tokenString, user, err +} + +func (srv Service) GetUserById(userid string) (*models.User, error) { + var userDb models.UserDb + err := srv.db.Users.Find(bson.M{"_id": bson.ObjectIdHex(userid)}).One(&userDb) + if err != nil { + return nil, err + } + return models.UserDbToUser(srv.db, userDb), nil } // func (srv Service) GetUser(id bson.ObjectId) (*models.User, error) {
M
test/test.py
→
test/test.py
@@ -7,10 +7,9 @@ import requests
import provoj import time -import subprocess -subprocess.check_call(["mongo", "gogame", "--eval", "'db.dropDatabase()'"]) +import os +os.system("mongo gogame --eval 'db.dropDatabase()'") -time.sleep(1) URL = "http://127.0.0.1:5000"@@ -26,7 +25,6 @@ t.rStatus("post /register", r)
jsonR = r.json() print(jsonR) -time.sleep(1) loginData = { "email": "user00@email.com",@@ -37,6 +35,17 @@ t.rStatus("post /login", r)
jsonR = r.json() print(jsonR) +userid = jsonR["user"]["id"] +r = requests.get(URL + "/resources/"+ userid) +t.rStatus("get /resources", r) +jsonR = r.json() +print(jsonR) + +time.sleep(4) +r = requests.get(URL + "/resources/"+ userid) +t.rStatus("get /resources", r) +jsonR = r.json() +print(jsonR) t.printScores()