delete.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package cosy
  2. import (
  3. "github.com/0xJacky/Nginx-UI/model"
  4. "github.com/spf13/cast"
  5. "gorm.io/gorm"
  6. "net/http"
  7. )
  8. func (c *Ctx[T]) PermanentlyDelete() {
  9. c.permanentlyDelete = true
  10. c.Destroy()
  11. }
  12. func (c *Ctx[T]) Destroy() {
  13. if c.abort {
  14. return
  15. }
  16. id := c.ctx.Param("id")
  17. c.beforeExecuteHook()
  18. db := model.UseDB()
  19. result := db
  20. if cast.ToBool(c.ctx.Query("permanent")) || c.permanentlyDelete {
  21. result = result.Unscoped()
  22. }
  23. if len(c.gormScopes) > 0 {
  24. result = result.Scopes(c.gormScopes...)
  25. }
  26. var err error
  27. session := result.Session(&gorm.Session{})
  28. if c.table != "" {
  29. err = session.Table(c.table, c.tableArgs...).Take(c.OriginModel, id).Error
  30. } else {
  31. err = session.First(&c.OriginModel, id).Error
  32. }
  33. if err != nil {
  34. errHandler(c.ctx, err)
  35. return
  36. }
  37. err = result.Delete(&c.OriginModel).Error
  38. if err != nil {
  39. errHandler(c.ctx, err)
  40. return
  41. }
  42. if len(c.executedHookFunc) > 0 {
  43. for _, v := range c.executedHookFunc {
  44. v(c)
  45. if c.abort {
  46. return
  47. }
  48. }
  49. }
  50. c.ctx.JSON(http.StatusNoContent, nil)
  51. }
  52. func (c *Ctx[T]) Recover() {
  53. if c.abort {
  54. return
  55. }
  56. id := c.ctx.Param("id")
  57. c.beforeExecuteHook()
  58. db := model.UseDB()
  59. var dbModel T
  60. result := db.Unscoped()
  61. if len(c.gormScopes) > 0 {
  62. result = result.Scopes(c.gormScopes...)
  63. }
  64. var err error
  65. session := result.Session(&gorm.Session{})
  66. if c.table != "" {
  67. err = session.Table(c.table).Take(&dbModel, id).Error
  68. } else {
  69. err = session.First(&dbModel, id).Error
  70. }
  71. if err != nil {
  72. errHandler(c.ctx, err)
  73. return
  74. }
  75. err = result.Model(&dbModel).Update("deleted_at", nil).Error
  76. if err != nil {
  77. errHandler(c.ctx, err)
  78. return
  79. }
  80. if len(c.executedHookFunc) > 0 {
  81. for _, v := range c.executedHookFunc {
  82. v(c)
  83. if c.abort {
  84. return
  85. }
  86. }
  87. }
  88. c.ctx.JSON(http.StatusNoContent, nil)
  89. }