delete.go 1.3 KB

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