list.go 2.2 KB

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