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	err := c.BindJSON(&registerMsg)
 38	if err != nil {
 39		fail(c, err, "error on json")
 40		return
 41	}
 42	user, err := userservice.Register(registerMsg.Name, registerMsg.Password, registerMsg.Email)
 43	if err != nil {
 44		fail(c, err, "error on register")
 45		return
 46	}
 47	c.JSON(200, gin.H{
 48		"user": user,
 49	})
 50}
 51
 52type LoginMsg struct {
 53	Email    string `binding:"required"`
 54	Password string `binding:"required"`
 55}
 56
 57func handleLogin(c *gin.Context) {
 58	var loginMsg LoginMsg
 59	err := c.BindJSON(&loginMsg)
 60	if err != nil {
 61		fail(c, err, "error on json")
 62		return
 63	}
 64	token, user, err := userservice.Login(loginMsg.Email, loginMsg.Password)
 65	if err != nil {
 66		fail(c, err, "error on login")
 67		return
 68	}
 69	c.JSON(200, gin.H{
 70		"token": token,
 71		"user":  user,
 72	})
 73}
 74
 75func handleGetUser(c *gin.Context) {
 76	claims := jwt.ExtractClaims(c)
 77	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
 78
 79	user, err := userservice.GetUserById(userid)
 80	if err != nil {
 81		fail(c, err, "error on getting user")
 82		return
 83	}
 84
 85	c.JSON(200, gin.H{
 86		"user": user,
 87	})
 88}
 89
 90func handleGetResources(c *gin.Context) {
 91	claims := jwt.ExtractClaims(c)
 92	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
 93
 94	user, err := userservice.GetUserById(userid)
 95	if err != nil {
 96		fail(c, err, "error on getting user")
 97		return
 98	}
 99
100	c.JSON(200, gin.H{
101		"user": user,
102	})
103}
104
105func handleGetUserPlanets(c *gin.Context) {
106	claims := jwt.ExtractClaims(c)
107	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
108
109	planets, err := userservice.GetUserPlanetsById(userid)
110	if err != nil {
111		fail(c, err, "error on getting user planets")
112		return
113	}
114
115	c.JSON(200, gin.H{
116		"planets": planets,
117	})
118}
119
120func handleGetPlanet(c *gin.Context) {
121	claims := jwt.ExtractClaims(c)
122	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
123	planetid := c.Param("planetid")
124
125	user, err := userservice.GetUserById(userid)
126	if err != nil {
127		fail(c, err, "error on getting user")
128		return
129	}
130
131	planet, err := gameservice.GetPlanet(user, bson.ObjectIdHex(planetid))
132	if err != nil {
133		fail(c, err, "error upgrading building")
134		return
135	}
136
137	c.JSON(200, gin.H{
138		"planet": planet,
139	})
140}
141
142type BuildMsg struct {
143	PlanetId string
144	Building string
145}
146
147func handlePostUpgradeBuilding(c *gin.Context) {
148	claims := jwt.ExtractClaims(c)
149	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
150	var buildMsg BuildMsg
151	err := c.BindJSON(&buildMsg)
152	if err != nil {
153		fail(c, err, "error parsing json")
154		return
155	}
156
157	user, err := userservice.GetUserById(userid)
158	if err != nil {
159		fail(c, err, "error on getting user")
160		return
161	}
162
163	planet, err := gameservice.UpgradeBuilding(user, bson.ObjectIdHex(buildMsg.PlanetId), buildMsg.Building)
164	if err != nil {
165		fail(c, err, "error upgrading building")
166		return
167	}
168
169	c.JSON(200, gin.H{
170		"planet": planet,
171	})
172}