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(®isterMsg)
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}