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
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}