arnaucube
arnaucube/gogame-oldPublic Self-hosted repository
gogame-old/endpoint/handlers.go
endpoint/handlers.goRaw
  1package endpoint
  2
  3import (
  4	jwt "github.com/appleboy/gin-jwt/v2"
  5	"github.com/arnaucube/gogame/constants"
  6	"github.com/fatih/color"
  7	"github.com/gin-gonic/gin"
  8	"gopkg.in/mgo.v2/bson"
  9)
 10
 11func fail(c *gin.Context, err error, msg string) {
 12	color.Red(msg + ": " + err.Error())
 13	c.JSON(400, gin.H{
 14		"error": msg,
 15	})
 16}
 17func handleMain(c *gin.Context) {
 18	c.JSON(200, gin.H{
 19		"status": "wellcome to gogame",
 20	})
 21}
 22
 23func handleInfo(c *gin.Context) {
 24	c.JSON(200, gin.H{
 25		"info": "info",
 26	})
 27}
 28
 29type RegisterMsg struct {
 30	Name     string `json:"name" binding:"required"`
 31	Password string `json:"password" binding:"required"`
 32	Email    string `json:"email" binding:"required"`
 33}
 34
 35func handleRegister(c *gin.Context) {
 36	var registerMsg RegisterMsg
 37	c.BindJSON(&registerMsg)
 38	user, err := userservice.Register(registerMsg.Name, registerMsg.Password, registerMsg.Email)
 39	if err != nil {
 40		fail(c, err, "error on register")
 41		return
 42	}
 43	c.JSON(200, gin.H{
 44		"user": user,
 45	})
 46}
 47
 48type LoginMsg struct {
 49	Email    string `binding:"required"`
 50	Password string `binding:"required"`
 51}
 52
 53func handleLogin(c *gin.Context) {
 54	var loginMsg LoginMsg
 55	c.BindJSON(&loginMsg)
 56	token, user, err := userservice.Login(loginMsg.Email, loginMsg.Password)
 57	if err != nil {
 58		fail(c, err, "error on login")
 59		return
 60	}
 61	c.JSON(200, gin.H{
 62		"token": token,
 63		"user":  user,
 64	})
 65}
 66
 67func handleGetUser(c *gin.Context) {
 68	claims := jwt.ExtractClaims(c)
 69	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
 70
 71	user, err := userservice.GetUserById(userid)
 72	if err != nil {
 73		fail(c, err, "error on getting user")
 74		return
 75	}
 76	// resources, err := user.GetResources()
 77	// if err != nil {
 78	//         fail(c, err, "error on getting user resources")
 79	//         return
 80	// }
 81
 82	c.JSON(200, gin.H{
 83		"user": user,
 84		// "resources": resources,
 85	})
 86}
 87
 88func handleGetResources(c *gin.Context) {
 89	claims := jwt.ExtractClaims(c)
 90	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
 91
 92	user, err := userservice.GetUserById(userid)
 93	if err != nil {
 94		fail(c, err, "error on getting user")
 95		return
 96	}
 97	resources, err := user.GetResources()
 98	if err != nil {
 99		fail(c, err, "error on getting user resources")
100		return
101	}
102
103	c.JSON(200, gin.H{
104		"user":      user,
105		"resources": resources,
106	})
107}
108
109func handleGetUserPlanets(c *gin.Context) {
110	claims := jwt.ExtractClaims(c)
111	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
112
113	planets, err := userservice.GetUserPlanetsById(userid)
114	if err != nil {
115		fail(c, err, "error on getting user planets")
116		return
117	}
118
119	c.JSON(200, gin.H{
120		"planets": planets,
121	})
122}
123
124type BuildMsg struct {
125	PlanetId string
126	Building string
127}
128
129func handlePostUpgradeBuilding(c *gin.Context) {
130	claims := jwt.ExtractClaims(c)
131	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
132	var buildMsg BuildMsg
133	err := c.BindJSON(&buildMsg)
134	if err != nil {
135		fail(c, err, "error parsing json")
136		return
137	}
138
139	user, err := userservice.GetUserById(userid)
140	if err != nil {
141		fail(c, err, "error on getting user")
142		return
143	}
144
145	planet, err := gameservice.UpgradeBuilding(user, bson.ObjectIdHex(buildMsg.PlanetId), buildMsg.Building)
146	if err != nil {
147		fail(c, err, "error upgrading building")
148		return
149	}
150
151	c.JSON(200, gin.H{
152		"planet": planet,
153	})
154}