list.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package list
  2. import (
  3. "encoding/json"
  4. log "github.com/sirupsen/logrus"
  5. "pmail/dto"
  6. "pmail/models"
  7. "pmail/mysql"
  8. )
  9. func GetEmailList(ctx *dto.Context, tag string, keyword string, offset, limit int) (emailList []*models.Email, total int) {
  10. querySQL, queryParams := genSQL(ctx, false, tag, keyword, offset, limit)
  11. counterSQL, counterParams := genSQL(ctx, true, tag, keyword, offset, limit)
  12. err := mysql.Instance.Select(&emailList, querySQL, queryParams...)
  13. if err != nil {
  14. log.Errorf("SQL ERROR: %s ,Error:%s", querySQL, err)
  15. }
  16. err = mysql.Instance.Get(&total, counterSQL, counterParams...)
  17. if err != nil {
  18. log.Errorf("SQL ERROR: %s ,Error:%s", querySQL, err)
  19. }
  20. return
  21. }
  22. func genSQL(ctx *dto.Context, counter bool, tag, keyword string, offset, limit int) (string, []any) {
  23. sql := "select * from email where 1=1 "
  24. if counter {
  25. sql = "select count(1) from email where 1=1 "
  26. }
  27. sqlParams := []any{}
  28. var tagInfo dto.SearchTag
  29. _ = json.Unmarshal([]byte(tag), &tagInfo)
  30. if tagInfo.Type != -1 {
  31. sql += " and type =? "
  32. sqlParams = append(sqlParams, tagInfo.Type)
  33. }
  34. if tagInfo.Status != -1 {
  35. sql += " and status =? "
  36. sqlParams = append(sqlParams, tagInfo.Status)
  37. }
  38. if keyword != "" {
  39. sql += " and (subject like ? or text like ? )"
  40. sqlParams = append(sqlParams, "%"+keyword+"%", "%"+keyword+"%")
  41. }
  42. sql += " limit ? offset ?"
  43. sqlParams = append(sqlParams, limit, offset)
  44. return sql, sqlParams
  45. }