query_handle_base.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package base
  2. import (
  3. "encoding/json"
  4. "github.com/gin-gonic/gin"
  5. "go_server/model/common/response"
  6. "gorm.io/gorm"
  7. )
  8. // gin 封装模型curd处理
  9. // 使用范型 较为鸡肋 不建议使用
  10. type ModelBaseHandler[T any] struct {
  11. }
  12. func NewBaseHandler[T any](t *T) *ModelBaseHandler[T] {
  13. return &ModelBaseHandler[T]{}
  14. }
  15. func (*ModelBaseHandler[T]) DeleteOne(c *gin.Context, db *gorm.DB) {
  16. req := new(BaseRequest)
  17. if err := c.BindQuery(req); err != nil {
  18. response.Resp(c, err.Error())
  19. return
  20. }
  21. if req.Id == 0 {
  22. response.Resp(c, "id is zero")
  23. return
  24. }
  25. tempInfo := new(T)
  26. // 先通过Id获取记录'
  27. if err := db.First(&tempInfo, req.Id).Error; err != nil {
  28. response.Resp(c, err.Error())
  29. return
  30. }
  31. exCmd := db.Model(&tempInfo).Delete(&tempInfo)
  32. if exCmd.RowsAffected != 1 {
  33. response.Resp(c, "delete fail")
  34. return
  35. }
  36. if exCmd.Error != nil {
  37. response.Resp(c, exCmd.Error.Error())
  38. return
  39. }
  40. response.Resp(c)
  41. return
  42. }
  43. func (*ModelBaseHandler[T]) UpdateOne(c *gin.Context, db *gorm.DB) {
  44. req := new(BaseRequest)
  45. if err := c.BindJSON(req); err != nil {
  46. response.Resp(c, err.Error())
  47. return
  48. }
  49. if req.Id == 0 {
  50. response.Resp(c, "id is zero")
  51. return
  52. }
  53. tempInfo := new(T)
  54. // 先通过Id获取记录'
  55. if err := db.First(&tempInfo, req.Id).Error; err != nil {
  56. response.Resp(c, err.Error())
  57. return
  58. }
  59. dbEx := db.Model(&tempInfo).Where("id", req.Id).
  60. Updates(req.Data)
  61. if dbEx.Error != nil {
  62. response.Resp(c, dbEx.Error.Error())
  63. return
  64. }
  65. if dbEx.RowsAffected == 0 {
  66. response.Resp(c, "update fail")
  67. return
  68. }
  69. if err := db.First(&tempInfo, req.Id).Error; err != nil {
  70. response.Resp(c, err.Error())
  71. return
  72. }
  73. response.Resp(c, map[string]any{
  74. "info": tempInfo,
  75. "rowsAffected": dbEx.RowsAffected,
  76. })
  77. return
  78. }
  79. func (*ModelBaseHandler[T]) Get(c *gin.Context, db *gorm.DB) {
  80. req := new(BaseRequest)
  81. if err := c.BindQuery(req); err != nil {
  82. response.Resp(c, err.Error())
  83. return
  84. }
  85. if req.Id == 0 {
  86. response.Resp(c, "id is zero")
  87. return
  88. }
  89. tempInfo := new(T)
  90. // 先通过Id获取记录'
  91. if err := db.First(&tempInfo, req.Id).Error; err != nil {
  92. response.Resp(c, err.Error())
  93. return
  94. }
  95. response.Resp(c, map[string]any{
  96. "info": tempInfo,
  97. })
  98. return
  99. }
  100. func (*ModelBaseHandler[T]) Create(c *gin.Context, db *gorm.DB) {
  101. req := new(BaseRequest)
  102. if err := c.BindJSON(req); err != nil {
  103. response.Resp(c, err.Error())
  104. return
  105. }
  106. info := new(T)
  107. body, _ := json.Marshal(req.Data)
  108. if err := json.Unmarshal(body, info); err != nil {
  109. response.Resp(c, err.Error())
  110. return
  111. }
  112. if err := db.Create(info).Error; err != nil {
  113. response.Resp(c, err.Error())
  114. return
  115. }
  116. response.Resp(c, map[string]any{
  117. "info": info,
  118. })
  119. }
  120. func (*ModelBaseHandler[T]) List(c *gin.Context, db *gorm.DB) {
  121. req := NewListRequest[T]()
  122. if err := c.BindQuery(req); err != nil {
  123. response.Resp(c, err.Error())
  124. return
  125. }
  126. resp, err := req.Query(db)
  127. if err != nil {
  128. response.Resp(c, err.Error())
  129. return
  130. }
  131. response.Resp(c, resp)
  132. return
  133. }