del_email.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package del_email
  2. import (
  3. "github.com/Jinnrry/pmail/consts"
  4. "github.com/Jinnrry/pmail/db"
  5. "github.com/Jinnrry/pmail/models"
  6. "github.com/Jinnrry/pmail/utils/context"
  7. log "github.com/sirupsen/logrus"
  8. "github.com/spf13/cast"
  9. "xorm.io/xorm"
  10. )
  11. import . "xorm.io/builder"
  12. func DelEmail(ctx *context.Context, ids []int, forcedDel bool) error {
  13. session := db.Instance.NewSession()
  14. defer session.Close()
  15. if err := session.Begin(); err != nil {
  16. return err
  17. }
  18. for _, id := range ids {
  19. err := deleteOne(ctx, session, cast.ToInt64(id), forcedDel)
  20. if err != nil {
  21. session.Rollback()
  22. return err
  23. }
  24. }
  25. return session.Commit()
  26. }
  27. type num struct {
  28. Num int `xorm:"num"`
  29. }
  30. func deleteOne(ctx *context.Context, session *xorm.Session, id int64, forcedDel bool) error {
  31. if !forcedDel {
  32. _, err := session.Table(&models.UserEmail{}).Where("email_id=? and user_id=?", id, ctx.UserID).Update(map[string]interface{}{
  33. "status": consts.EmailStatusDel,
  34. "group_id": 0,
  35. })
  36. return err
  37. }
  38. // 先删除关联关系
  39. var ue models.UserEmail
  40. _, err := session.Table(&models.UserEmail{}).Where("email_id=? and user_id=?", id, ctx.UserID).Delete(&ue)
  41. if err != nil {
  42. return err
  43. }
  44. // 检查email是否还有人有权限
  45. var Num num
  46. _, err = session.Table(&models.UserEmail{}).Select("count(1) as num").Where("email_id=? ", id).Get(&Num)
  47. if err != nil {
  48. return err
  49. }
  50. if Num.Num == 0 {
  51. var email models.Email
  52. _, err = session.Table(&email).Where("id=?", id).Delete(&email)
  53. }
  54. return err
  55. }
  56. func DelByUID(ctx *context.Context, ids []int) error {
  57. session := db.Instance.NewSession()
  58. defer session.Close()
  59. for _, id := range ids {
  60. var ue models.UserEmail
  61. session.Table("user_email").Where(Eq{"id": ids, "user_id": ctx.UserID}).Get(&ue)
  62. if ue.ID == 0 {
  63. log.WithContext(ctx).Warn("no user email found")
  64. return nil
  65. }
  66. emailId := ue.EmailID
  67. // 先删除关联关系
  68. _, err := session.Table(&models.UserEmail{}).Where("id=? and user_id=?", id, ctx.UserID).Delete(&ue)
  69. if err != nil {
  70. session.Rollback()
  71. return err
  72. }
  73. // 检查email是否还有人有权限
  74. var Num num
  75. _, err = session.Table(&models.UserEmail{}).Select("count(1) as num").Where("email_id=? ", emailId).Get(&Num)
  76. if err != nil {
  77. return err
  78. }
  79. if Num.Num == 0 {
  80. var email models.Email
  81. _, err = session.Table(&email).Where("id=?", id).Delete(&email)
  82. }
  83. }
  84. session.Commit()
  85. return nil
  86. }