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