delete.go 1.4 KB

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