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
 77	c.JSON(200, gin.H{
 78		"user": user,
 79	})
 80}
 81
 82func handleGetResources(c *gin.Context) {
 83	claims := jwt.ExtractClaims(c)
 84	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
 85
 86	user, err := userservice.GetUserById(userid)
 87	if err != nil {
 88		fail(c, err, "error on getting user")
 89		return
 90	}
 91
 92	c.JSON(200, gin.H{
 93		"user": user,
 94	})
 95}
 96
 97func handleGetUserPlanets(c *gin.Context) {
 98	claims := jwt.ExtractClaims(c)
 99	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
100
101	planets, err := userservice.GetUserPlanetsById(userid)
102	if err != nil {
103		fail(c, err, "error on getting user planets")
104		return
105	}
106
107	c.JSON(200, gin.H{
108		"planets": planets,
109	})
110}
111
112func handleGetPlanet(c *gin.Context) {
113	claims := jwt.ExtractClaims(c)
114	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
115	planetid := c.Param("planetid")
116
117	user, err := userservice.GetUserById(userid)
118	if err != nil {
119		fail(c, err, "error on getting user")
120		return
121	}
122
123	planet, err := gameservice.GetPlanet(user, bson.ObjectIdHex(planetid))
124	if err != nil {
125		fail(c, err, "error upgrading building")
126		return
127	}
128
129	c.JSON(200, gin.H{
130		"planet": planet,
131	})
132}
133
134type BuildMsg struct {
135	PlanetId string
136	Building string
137}
138
139func handlePostUpgradeBuilding(c *gin.Context) {
140	claims := jwt.ExtractClaims(c)
141	userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
142	var buildMsg BuildMsg
143	err := c.BindJSON(&buildMsg)
144	if err != nil {
145		fail(c, err, "error parsing json")
146		return
147	}
148
149	user, err := userservice.GetUserById(userid)
150	if err != nil {
151		fail(c, err, "error on getting user")
152		return
153	}
154
155	planet, err := gameservice.UpgradeBuilding(user, bson.ObjectIdHex(buildMsg.PlanetId), buildMsg.Building)
156	if err != nil {
157		fail(c, err, "error upgrading building")
158		return
159	}
160
161	c.JSON(200, gin.H{
162		"planet": planet,
163	})
164}