delete.go 1.5 KB

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