list.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package email
  2. import (
  3. "encoding/json"
  4. log "github.com/sirupsen/logrus"
  5. "github.com/spf13/cast"
  6. "io"
  7. "math"
  8. "net/http"
  9. "pmail/dto/response"
  10. "pmail/services/list"
  11. "pmail/utils/context"
  12. )
  13. type emailListResponse struct {
  14. CurrentPage int `json:"current_page"`
  15. TotalPage int `json:"total_page"`
  16. List []*emilItem `json:"list"`
  17. }
  18. type emilItem struct {
  19. ID int `json:"id"`
  20. Title string `json:"title"`
  21. Desc string `json:"desc"`
  22. Datetime string `json:"datetime"`
  23. IsRead bool `json:"is_read"`
  24. Sender User `json:"sender"`
  25. Dangerous bool `json:"dangerous"`
  26. }
  27. type User struct {
  28. Name string `json:"Name"`
  29. EmailAddress string `json:"EmailAddress"`
  30. }
  31. type emailRequest struct {
  32. Keyword string `json:"keyword"`
  33. Tag string `json:"tag"`
  34. CurrentPage int `json:"current_page"`
  35. PageSize int `json:"page_size"`
  36. }
  37. func EmailList(ctx *context.Context, w http.ResponseWriter, req *http.Request) {
  38. var lst []*emilItem
  39. reqBytes, err := io.ReadAll(req.Body)
  40. if err != nil {
  41. log.WithContext(ctx).Errorf("%+v", err)
  42. }
  43. var retData emailRequest
  44. err = json.Unmarshal(reqBytes, &retData)
  45. if err != nil {
  46. log.WithContext(ctx).Errorf("%+v", err)
  47. }
  48. offset := 0
  49. if retData.CurrentPage >= 1 {
  50. offset = (retData.CurrentPage - 1) * retData.PageSize
  51. }
  52. if retData.PageSize == 0 {
  53. retData.PageSize = 15
  54. }
  55. emailList, total := list.GetEmailList(ctx, retData.Tag, retData.Keyword, offset, retData.PageSize)
  56. for _, email := range emailList {
  57. var sender User
  58. _ = json.Unmarshal([]byte(email.Sender), &sender)
  59. lst = append(lst, &emilItem{
  60. ID: email.Id,
  61. Title: email.Subject,
  62. Desc: email.Text.String,
  63. Datetime: email.SendDate.Format("2006-01-02 15:04:05"),
  64. IsRead: email.IsRead == 1,
  65. Sender: sender,
  66. Dangerous: email.SPFCheck == 0 && email.DKIMCheck == 0,
  67. })
  68. }
  69. ret := emailListResponse{
  70. CurrentPage: retData.CurrentPage,
  71. TotalPage: cast.ToInt(math.Ceil(cast.ToFloat64(total) / cast.ToFloat64(retData.PageSize))),
  72. List: lst,
  73. }
  74. response.NewSuccessResponse(ret).FPrint(w)
  75. }