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.

154 lines
3.1 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 `binding:"required"`
  27. Password string `binding:"required"`
  28. Email string `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. // resources, err := user.GetResources()
  68. // if err != nil {
  69. // fail(c, err, "error on getting user resources")
  70. // return
  71. // }
  72. c.JSON(200, gin.H{
  73. "user": user,
  74. // "resources": resources,
  75. })
  76. }
  77. func handleGetResources(c *gin.Context) {
  78. claims := jwt.ExtractClaims(c)
  79. userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
  80. user, err := userservice.GetUserById(userid)
  81. if err != nil {
  82. fail(c, err, "error on getting user")
  83. return
  84. }
  85. resources, err := user.GetResources()
  86. if err != nil {
  87. fail(c, err, "error on getting user resources")
  88. return
  89. }
  90. c.JSON(200, gin.H{
  91. "user": user,
  92. "resources": resources,
  93. })
  94. }
  95. func handleGetUserPlanets(c *gin.Context) {
  96. claims := jwt.ExtractClaims(c)
  97. userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
  98. planets, err := userservice.GetUserPlanetsById(userid)
  99. if err != nil {
  100. fail(c, err, "error on getting user planets")
  101. return
  102. }
  103. c.JSON(200, gin.H{
  104. "planets": planets,
  105. })
  106. }
  107. type BuildMsg struct {
  108. PlanetId string
  109. Building string
  110. }
  111. func handlePostUpgradeBuilding(c *gin.Context) {
  112. claims := jwt.ExtractClaims(c)
  113. userid := bson.ObjectIdHex(claims[constants.JWTIdKey].(string))
  114. var buildMsg BuildMsg
  115. err := c.BindJSON(&buildMsg)
  116. if err != nil {
  117. fail(c, err, "error parsing json")
  118. return
  119. }
  120. user, err := userservice.GetUserById(userid)
  121. if err != nil {
  122. fail(c, err, "error on getting user")
  123. return
  124. }
  125. planet, err := gameservice.UpgradeBuilding(user, bson.ObjectIdHex(buildMsg.PlanetId), buildMsg.Building)
  126. if err != nil {
  127. fail(c, err, "error upgrading building")
  128. return
  129. }
  130. c.JSON(200, gin.H{
  131. "planet": planet,
  132. })
  133. }