You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

164 lines
3.3 KiB

  1. package endpoint
  2. import (
  3. jwt "github.com/appleboy/gin-jwt/v2"
  4. "github.com/arnaucube/gogame/constants"
  5. "github.com/fatih/color"
  6. "github.com/gin-gonic/gin"
  7. "gopkg.in/mgo.v2/bson"
  8. )
  9. func fail(c *gin.Context, err error, msg string) {
  10. color.Red(msg + ": " + err.Error())
  11. c.JSON(400, gin.H{
  12. "error": msg,
  13. })
  14. }
  15. func handleMain(c *gin.Context) {
  16. c.JSON(200, gin.H{
  17. "status": "wellcome to gogame",
  18. })
  19. }
  20. func handleInfo(c *gin.Context) {
  21. c.JSON(200, gin.H{
  22. "info": "info",
  23. })
  24. }
  25. type RegisterMsg struct {
  26. Name string `json:"name" binding:"required"`
  27. Password string `json:"password" binding:"required"`
  28. Email string `json:"email" binding:"required"`
  29. }
  30. func handleRegister(c *gin.Context) {
  31. var registerMsg RegisterMsg
  32. c.BindJSON(&registerMsg)
  33. user, err := userservice.Register(registerMsg.Name, registerMsg.Password, registerMsg.Email)
  34. if err != nil {
  35. fail(c, err, "error on register")
  36. return
  37. }
  38. c.JSON(200, gin.H{
  39. "user": user,
  40. })
  41. }
  42. type LoginMsg struct {
  43. Email string `binding:"required"`
  44. Password string `binding:"required"`
  45. }
  46. func handleLogin(c *gin.Context) {
  47. var loginMsg LoginMsg
  48. c.BindJSON(&loginMsg)
  49. token, user, err := userservice.Login(loginMsg.Email, loginMsg.Password)
  50. if err != nil {
  51. fail(c, err, "error on login")
  52. return
  53. }
  54. c.JSON(200, gin.H{
  55. "token": token,
  56. "user": user,
  57. })
  58. }
  59. func handleGetUser(c *gin.Context) {
  60. claims := jwt.ExtractClaims(c)
  61. userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
  62. user, err := userservice.GetUserById(userid)
  63. if err != nil {
  64. fail(c, err, "error on getting user")
  65. return
  66. }
  67. c.JSON(200, gin.H{
  68. "user": user,
  69. })
  70. }
  71. func handleGetResources(c *gin.Context) {
  72. claims := jwt.ExtractClaims(c)
  73. userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
  74. user, err := userservice.GetUserById(userid)
  75. if err != nil {
  76. fail(c, err, "error on getting user")
  77. return
  78. }
  79. c.JSON(200, gin.H{
  80. "user": user,
  81. })
  82. }
  83. func handleGetUserPlanets(c *gin.Context) {
  84. claims := jwt.ExtractClaims(c)
  85. userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
  86. planets, err := userservice.GetUserPlanetsById(userid)
  87. if err != nil {
  88. fail(c, err, "error on getting user planets")
  89. return
  90. }
  91. c.JSON(200, gin.H{
  92. "planets": planets,
  93. })
  94. }
  95. func handleGetPlanet(c *gin.Context) {
  96. claims := jwt.ExtractClaims(c)
  97. userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
  98. planetid := c.Param("planetid")
  99. user, err := userservice.GetUserById(userid)
  100. if err != nil {
  101. fail(c, err, "error on getting user")
  102. return
  103. }
  104. planet, err := gameservice.GetPlanet(user, bson.ObjectIdHex(planetid))
  105. if err != nil {
  106. fail(c, err, "error upgrading building")
  107. return
  108. }
  109. c.JSON(200, gin.H{
  110. "planet": planet,
  111. })
  112. }
  113. type BuildMsg struct {
  114. PlanetId string
  115. Building string
  116. }
  117. func handlePostUpgradeBuilding(c *gin.Context) {
  118. claims := jwt.ExtractClaims(c)
  119. userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
  120. var buildMsg BuildMsg
  121. err := c.BindJSON(&buildMsg)
  122. if err != nil {
  123. fail(c, err, "error parsing json")
  124. return
  125. }
  126. user, err := userservice.GetUserById(userid)
  127. if err != nil {
  128. fail(c, err, "error on getting user")
  129. return
  130. }
  131. planet, err := gameservice.UpgradeBuilding(user, bson.ObjectIdHex(buildMsg.PlanetId), buildMsg.Building)
  132. if err != nil {
  133. fail(c, err, "error upgrading building")
  134. return
  135. }
  136. c.JSON(200, gin.H{
  137. "planet": planet,
  138. })
  139. }