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
124func handleGetPlanet(c *gin.Context) {
125	claims := jwt.ExtractClaims(c)
126	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
127	planetid := c.Param("planetid")
128
129	user, err := userservice.GetUserById(userid)
130	if err != nil {
131		fail(c, err, "error on getting user")
132		return
133	}
134
135	planet, err := gameservice.GetBuildings(user, bson.ObjectIdHex(planetid))
136	if err != nil {
137		fail(c, err, "error upgrading building")
138		return
139	}
140
141	c.JSON(200, gin.H{
142		"planet": planet,
143	})
144}
145
146type BuildMsg struct {
147	PlanetId string
148	Building string
149}
150
151func handlePostUpgradeBuilding(c *gin.Context) {
152	claims := jwt.ExtractClaims(c)
153	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
154	var buildMsg BuildMsg
155	err := c.BindJSON(&buildMsg)
156	if err != nil {
157		fail(c, err, "error parsing json")
158		return
159	}
160
161	user, err := userservice.GetUserById(userid)
162	if err != nil {
163		fail(c, err, "error on getting user")
164		return
165	}
166
167	planet, err := gameservice.UpgradeBuilding(user, bson.ObjectIdHex(buildMsg.PlanetId), buildMsg.Building)
168	if err != nil {
169		fail(c, err, "error upgrading building")
170		return
171	}
172
173	c.JSON(200, gin.H{
174		"planet": planet,
175	})
176}