arnaucube
arnaucube/gogame-oldPublic Self-hosted repository
api /resources/:userid working
arnaucube arnaucube@gmail.com
Fri, 14 Jun 2019 20:43:18 +0200
commit

c07b4edd62d0e0e3c57ee182931522bc58a42908

parent

be27edda8898b583f774f39873fd3abb5495b46c

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()