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
124type BuildMsg struct {
125 PlanetId string
126 Building string
127}
128
129func handlePostUpgradeBuilding(c *gin.Context) {
130 claims := jwt.ExtractClaims(c)
131 userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
132 var buildMsg BuildMsg
133 err := c.BindJSON(&buildMsg)
134 if err != nil {
135 fail(c, err, "error parsing json")
136 return
137 }
138
139 user, err := userservice.GetUserById(userid)
140 if err != nil {
141 fail(c, err, "error on getting user")
142 return
143 }
144
145 planet, err := gameservice.UpgradeBuilding(user, bson.ObjectIdHex(buildMsg.PlanetId), buildMsg.Building)
146 if err != nil {
147 fail(c, err, "error upgrading building")
148 return
149 }
150
151 c.JSON(200, gin.H{
152 "planet": planet,
153 })
154}