mirror of
https://github.com/arnaucube/gogame.git
synced 2026-02-06 19:16:40 +01:00
api /resources/:userid working
This commit is contained in:
@@ -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 @@ func start(c *cli.Context) error {
|
||||
}
|
||||
|
||||
// services
|
||||
userservice := usersrv.New(db)
|
||||
gameservice := gamesrv.New(db)
|
||||
userservice := usersrv.New(db, gameservice)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -60,3 +60,23 @@ func handleLogin(c *gin.Context) {
|
||||
"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,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -19,6 +19,9 @@ func newApiService() *gin.Engine {
|
||||
api.GET("/info", handleInfo)
|
||||
api.POST("/register", handleRegister)
|
||||
api.POST("/login", handleLogin)
|
||||
|
||||
// TODO add jwt checker
|
||||
api.GET("/resources/:userid", handleGetResources)
|
||||
return api
|
||||
}
|
||||
|
||||
|
||||
@@ -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) GetFromDb() error {
|
||||
|
||||
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 @@ func (u *User) GetResources() (*User, error) {
|
||||
}
|
||||
|
||||
// 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 @@ func (u *User) GetResources() (*User, error) {
|
||||
}
|
||||
|
||||
// return user
|
||||
return u, nil
|
||||
return &u.Resources, nil
|
||||
}
|
||||
|
||||
@@ -29,6 +29,12 @@ func (srv Service) CreatePlanet(userId bson.ObjectId) (*models.SolarSystem, *mod
|
||||
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 {
|
||||
|
||||
@@ -6,18 +6,21 @@ import (
|
||||
|
||||
"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 @@ func (srv Service) Register(name, password, email string) (*models.User, error)
|
||||
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
|
||||
}
|
||||
|
||||
@@ -73,6 +82,15 @@ func (srv Service) Login(email, password string) (*string, *models.User, error)
|
||||
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) {
|
||||
// // update user stats
|
||||
// user := getUserFromDB
|
||||
|
||||
17
test/test.py
17
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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user