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.

131 lines
2.5 KiB

  1. package endpoint
  2. import (
  3. "fmt"
  4. "github.com/fatih/color"
  5. "github.com/gin-gonic/gin"
  6. "gopkg.in/mgo.v2/bson"
  7. )
  8. func fail(c *gin.Context, err error, msg string) {
  9. color.Red(msg + ": " + err.Error())
  10. c.JSON(400, gin.H{
  11. "error": msg,
  12. })
  13. }
  14. func handleMain(c *gin.Context) {
  15. c.JSON(200, gin.H{
  16. "status": "wellcome to gogame",
  17. })
  18. }
  19. func handleInfo(c *gin.Context) {
  20. c.JSON(200, gin.H{
  21. "info": "info",
  22. })
  23. }
  24. type RegisterMsg struct {
  25. Name string `binding:"required"`
  26. Password string `binding:"required"`
  27. Email string `binding:"required"`
  28. }
  29. func handleRegister(c *gin.Context) {
  30. var registerMsg RegisterMsg
  31. c.BindJSON(&registerMsg)
  32. user, err := userservice.Register(registerMsg.Name, registerMsg.Password, registerMsg.Email)
  33. if err != nil {
  34. fail(c, err, "error on register")
  35. return
  36. }
  37. c.JSON(200, gin.H{
  38. "user": user,
  39. })
  40. }
  41. type LoginMsg struct {
  42. Email string `binding:"required"`
  43. Password string `binding:"required"`
  44. }
  45. func handleLogin(c *gin.Context) {
  46. var loginMsg LoginMsg
  47. c.BindJSON(&loginMsg)
  48. token, user, err := userservice.Login(loginMsg.Email, loginMsg.Password)
  49. if err != nil {
  50. fail(c, err, "error on login")
  51. return
  52. }
  53. c.JSON(200, gin.H{
  54. "token": token,
  55. "user": user,
  56. })
  57. }
  58. func handleGetResources(c *gin.Context) {
  59. userid := c.Param("userid")
  60. user, err := userservice.GetUserById(bson.ObjectIdHex(userid))
  61. if err != nil {
  62. fail(c, err, "error on getting user")
  63. return
  64. }
  65. resources, err := user.GetResources()
  66. if err != nil {
  67. fail(c, err, "error on getting user resources")
  68. return
  69. }
  70. c.JSON(200, gin.H{
  71. "user": user,
  72. "resources": resources,
  73. })
  74. }
  75. func handleGetUserPlanets(c *gin.Context) {
  76. userid := c.Param("userid")
  77. planets, err := userservice.GetUserPlanetsById(bson.ObjectIdHex(userid))
  78. if err != nil {
  79. fail(c, err, "error on getting user planets")
  80. return
  81. }
  82. c.JSON(200, gin.H{
  83. "planets": planets,
  84. })
  85. }
  86. type BuildMsg struct {
  87. PlanetId string
  88. Building string
  89. }
  90. func handlePostUpgradeBuilding(c *gin.Context) {
  91. userid := c.Param("userid")
  92. var buildMsg BuildMsg
  93. err := c.BindJSON(&buildMsg)
  94. if err != nil {
  95. fail(c, err, "error parsing json")
  96. return
  97. }
  98. fmt.Println(buildMsg)
  99. user, err := userservice.GetUserById(bson.ObjectIdHex(userid))
  100. if err != nil {
  101. fail(c, err, "error on getting user")
  102. return
  103. }
  104. planet, err := gameservice.UpgradeBuilding(user, bson.ObjectIdHex(buildMsg.PlanetId), buildMsg.Building)
  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. }