123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package service
- import (
- "encoding/json"
- "gadmin/config"
- "gadmin/internal/admin/forms"
- "gadmin/utility/serializer"
- "github.com/gin-gonic/gin"
- "github.com/patrickmn/go-cache"
- "github.com/sirupsen/logrus"
- "net/http"
- "time"
- )
- type sAnnouncement struct{}
- var announcementCache = cache.New(10*time.Minute, 10*time.Minute)
- var Announcement = new(sAnnouncement)
- var AnnouncementKey = "announcement"
- type AnnouncementItem struct {
- Title string `json:"title"`
- Content string `json:"content"`
- CreatedAt int64 `json:"created_at"`
- }
- func (s *sAnnouncement) List() serializer.Response {
- var models forms.ListRes
- models.List = []*AnnouncementItem{}
- models.Page = 1
- announcementCacheStr, found := announcementCache.Get(AnnouncementKey)
- if found {
- announcementCacheItem, ok := announcementCacheStr.(*AnnouncementItem)
- if ok {
- models.PageCount = 0
- models.List = []*AnnouncementItem{announcementCacheItem}
- return serializer.Suc(models)
- }
- }
- announcementItem := new(AnnouncementItem)
- announcementStr := config.LogRedis.Get(AnnouncementKey).Val()
- if announcementStr == "" {
- models.PageCount = 0
- return serializer.Suc(models)
- }
- err := json.Unmarshal([]byte(announcementStr), announcementItem)
- if err != nil {
- return serializer.Err(1, "json.Unmarshal err", err)
- }
- announcementCache.Set(AnnouncementKey, announcementItem, -1)
- models.PageCount = 1
- models.List = []*AnnouncementItem{announcementItem}
- return serializer.Suc(models)
- }
- func (s *sAnnouncement) Add(req forms.AnnouncementAddReq) serializer.Response {
- announcementItem := &AnnouncementItem{
- Title: req.Title,
- Content: req.Content,
- CreatedAt: time.Now().Unix(),
- }
- announcementStr, err := json.Marshal(announcementItem)
- if err != nil {
- return serializer.Err(1, "json.Marshal err", err)
- }
- err = config.LogRedis.Set(AnnouncementKey, announcementStr, -1).Err()
- if err != nil {
- logrus.Errorf("log redis.Set Key:%v,Value:%v. err %v", AnnouncementKey, announcementStr, err)
- }
- announcementCache.Set(AnnouncementKey, announcementItem, -1)
- return serializer.Suc(nil)
- }
- func (s *sAnnouncement) Del() serializer.Response {
- err := config.LogRedis.Del(AnnouncementKey).Err()
- if err != nil {
- logrus.Errorf("log redis.Del Key:%v. err %v", AnnouncementKey, err)
- return serializer.Err(1, "redis.Del err", err)
- }
- announcementCache.Delete(AnnouncementKey)
- return serializer.Suc(nil)
- }
- type ResponseAnnouncement struct {
- ErrCode int `json:"errCode"`
- Msg string `json:"msg,omitempty"`
- Data *AnnouncementItem `json:"data"`
- }
- func Get(c *gin.Context) {
- res := &ResponseAnnouncement{}
- cacheData, ok := announcementCache.Get(AnnouncementKey)
- if ok {
- res.Data = cacheData.(*AnnouncementItem)
- c.JSON(http.StatusOK, res)
- return
- }
- announcementStr := config.LogRedis.Get(AnnouncementKey).Val()
- if announcementStr == "" {
- c.JSON(http.StatusOK, res)
- return
- }
- announcementItem := new(AnnouncementItem)
- err := json.Unmarshal([]byte(announcementStr), announcementItem)
- if err != nil {
- res.ErrCode = 1
- res.Msg = err.Error()
- c.JSON(http.StatusOK, res)
- return
- }
- announcementCache.Set(AnnouncementKey, announcementItem, -1)
- res.Data = announcementItem
- c.JSON(http.StatusOK, res)
- }
|