del_email.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package del_email
  2. import (
  3. "github.com/spf13/cast"
  4. "pmail/consts"
  5. "pmail/db"
  6. "pmail/models"
  7. "pmail/utils/context"
  8. "xorm.io/xorm"
  9. )
  10. func DelEmail(ctx *context.Context, ids []int64, forcedDel bool) error {
  11. session := db.Instance.NewSession()
  12. defer session.Close()
  13. if err := session.Begin(); err != nil {
  14. return err
  15. }
  16. for _, id := range ids {
  17. err := deleteOne(ctx, session, cast.ToInt64(id), forcedDel)
  18. if err != nil {
  19. session.Rollback()
  20. return err
  21. }
  22. }
  23. return session.Commit()
  24. }
  25. type num struct {
  26. Num int `xorm:"num"`
  27. }
  28. func deleteOne(ctx *context.Context, session *xorm.Session, id int64, forcedDel bool) error {
  29. if !forcedDel {
  30. _, err := session.Table(&models.UserEmail{}).Where("email_id=? and user_id=?", id, ctx.UserID).Update(map[string]interface{}{"status": consts.EmailStatusDel})
  31. return err
  32. }
  33. // 先删除关联关系
  34. var ue models.UserEmail
  35. _, err := session.Table(&models.UserEmail{}).Where("email_id=? and user_id=?", id, ctx.UserID).Delete(&ue)
  36. if err != nil {
  37. return err
  38. }
  39. // 检查email是否还有人有权限
  40. var Num num
  41. _, err = session.Table(&models.UserEmail{}).Select("count(1) as num").Where("email_id=? ", id).Get(&Num)
  42. if err != nil {
  43. return err
  44. }
  45. if Num.Num == 0 {
  46. var email models.Email
  47. _, err = session.Table(&email).Where("id=?", id).Delete(&email)
  48. }
  49. return err
  50. }