announcement.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package service
  2. import (
  3. "encoding/json"
  4. "gadmin/config"
  5. "gadmin/internal/admin/forms"
  6. "gadmin/utility/serializer"
  7. "github.com/gin-gonic/gin"
  8. "github.com/patrickmn/go-cache"
  9. "github.com/sirupsen/logrus"
  10. "net/http"
  11. "time"
  12. )
  13. type sAnnouncement struct{}
  14. var announcementCache = cache.New(10*time.Minute, 10*time.Minute)
  15. var Announcement = new(sAnnouncement)
  16. var AnnouncementKey = "announcement"
  17. type AnnouncementItem struct {
  18. Title string `json:"title"`
  19. Content string `json:"content"`
  20. CreatedAt int64 `json:"created_at"`
  21. }
  22. func (s *sAnnouncement) List() serializer.Response {
  23. var models forms.ListRes
  24. models.List = []*AnnouncementItem{}
  25. models.Page = 1
  26. announcementCacheStr, found := announcementCache.Get(AnnouncementKey)
  27. if found {
  28. announcementCacheItem, ok := announcementCacheStr.(*AnnouncementItem)
  29. if ok {
  30. models.PageCount = 0
  31. models.List = []*AnnouncementItem{announcementCacheItem}
  32. return serializer.Suc(models)
  33. }
  34. }
  35. announcementItem := new(AnnouncementItem)
  36. announcementStr := config.LogRedis.Get(AnnouncementKey).Val()
  37. if announcementStr == "" {
  38. models.PageCount = 0
  39. return serializer.Suc(models)
  40. }
  41. err := json.Unmarshal([]byte(announcementStr), announcementItem)
  42. if err != nil {
  43. return serializer.Err(1, "json.Unmarshal err", err)
  44. }
  45. announcementCache.Set(AnnouncementKey, announcementItem, -1)
  46. models.PageCount = 1
  47. models.List = []*AnnouncementItem{announcementItem}
  48. return serializer.Suc(models)
  49. }
  50. func (s *sAnnouncement) Add(req forms.AnnouncementAddReq) serializer.Response {
  51. announcementItem := &AnnouncementItem{
  52. Title: req.Title,
  53. Content: req.Content,
  54. CreatedAt: time.Now().Unix(),
  55. }
  56. announcementStr, err := json.Marshal(announcementItem)
  57. if err != nil {
  58. return serializer.Err(1, "json.Marshal err", err)
  59. }
  60. err = config.LogRedis.Set(AnnouncementKey, announcementStr, -1).Err()
  61. if err != nil {
  62. logrus.Errorf("log redis.Set Key:%v,Value:%v. err %v", AnnouncementKey, announcementStr, err)
  63. }
  64. announcementCache.Set(AnnouncementKey, announcementItem, -1)
  65. return serializer.Suc(nil)
  66. }
  67. func (s *sAnnouncement) Del() serializer.Response {
  68. err := config.LogRedis.Del(AnnouncementKey).Err()
  69. if err != nil {
  70. logrus.Errorf("log redis.Del Key:%v. err %v", AnnouncementKey, err)
  71. return serializer.Err(1, "redis.Del err", err)
  72. }
  73. announcementCache.Delete(AnnouncementKey)
  74. return serializer.Suc(nil)
  75. }
  76. type ResponseAnnouncement struct {
  77. ErrCode int `json:"errCode"`
  78. Msg string `json:"msg,omitempty"`
  79. Data *AnnouncementItem `json:"data"`
  80. }
  81. func Get(c *gin.Context) {
  82. res := &ResponseAnnouncement{}
  83. cacheData, ok := announcementCache.Get(AnnouncementKey)
  84. if ok {
  85. res.Data = cacheData.(*AnnouncementItem)
  86. c.JSON(http.StatusOK, res)
  87. return
  88. }
  89. announcementStr := config.LogRedis.Get(AnnouncementKey).Val()
  90. if announcementStr == "" {
  91. c.JSON(http.StatusOK, res)
  92. return
  93. }
  94. announcementItem := new(AnnouncementItem)
  95. err := json.Unmarshal([]byte(announcementStr), announcementItem)
  96. if err != nil {
  97. res.ErrCode = 1
  98. res.Msg = err.Error()
  99. c.JSON(http.StatusOK, res)
  100. return
  101. }
  102. announcementCache.Set(AnnouncementKey, announcementItem, -1)
  103. res.Data = announcementItem
  104. c.JSON(http.StatusOK, res)
  105. }