You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.2 KiB
89 lines
2.2 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"encoding/json" |
|
"html/template" |
|
"strings" |
|
|
|
"go-common/app/interface/main/space/model" |
|
accmdl "go-common/app/service/main/account/model" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
) |
|
|
|
const _noticeTable = "member_up_notice" |
|
|
|
// Notice get notice. |
|
func (s *Service) Notice(c context.Context, mid int64) (res string, err error) { |
|
if _, ok := s.noNoticeMids[mid]; ok { |
|
return |
|
} |
|
var notice *model.Notice |
|
if notice, err = s.dao.Notice(c, mid); err != nil { |
|
return |
|
} |
|
if notice.IsForbid == _noticeForbid { |
|
notice.Notice = "" |
|
} |
|
res = template.HTMLEscapeString(notice.Notice) |
|
return |
|
} |
|
|
|
// SetNotice set notice. |
|
func (s *Service) SetNotice(c context.Context, mid int64, notice string) (err error) { |
|
var ( |
|
info *accmdl.Profile |
|
preData *model.Notice |
|
) |
|
if info, err = s.realName(c, mid); err != nil { |
|
return |
|
} |
|
if info.Silence == _silenceForbid { |
|
err = ecode.UserDisabled |
|
return |
|
} |
|
if preData, err = s.dao.Notice(c, mid); err != nil { |
|
return |
|
} |
|
if notice == preData.Notice { |
|
err = ecode.NotModified |
|
return |
|
} |
|
if err = s.dao.SetNotice(c, mid, notice); err != nil { |
|
log.Error("s.dao.SetNotice(%d,%s) error(%v)", mid, notice, err) |
|
return |
|
} |
|
s.cache.Do(c, func(c context.Context) { |
|
s.dao.AddCacheNotice(c, mid, &model.Notice{Notice: notice}) |
|
}) |
|
return |
|
} |
|
|
|
// ClearCache del match and object cache |
|
func (s *Service) ClearCache(c context.Context, msg string) (err error) { |
|
var m struct { |
|
Table string `json:"table"` |
|
Old struct { |
|
Mid int64 `json:"mid"` |
|
Notice string `json:"notice"` |
|
IsForbid int `json:"is_forbid"` |
|
} `json:"old,omitempty"` |
|
New struct { |
|
Mid int64 `json:"mid"` |
|
Notice string `json:"notice"` |
|
IsForbid int `json:"is_forbid"` |
|
} `json:"new,omitempty"` |
|
} |
|
if err = json.Unmarshal([]byte(msg), &m); err != nil || m.Table == "" { |
|
log.Error("ClearCache json.Unmarshal msg(%s) error(%v)", msg, err) |
|
return |
|
} |
|
log.Info("ClearCache json.Unmarshal msg(%s)", msg) |
|
if strings.HasPrefix(m.Table, _noticeTable) && (m.Old.IsForbid != m.New.IsForbid || m.Old.Notice != m.New.Notice) { |
|
if err = s.dao.DelCacheNotice(c, m.New.Mid); err != nil { |
|
log.Error("s.dao.DelCacheNotice mid(%d) error(%v)", m.New.Mid, err) |
|
} |
|
} |
|
return |
|
}
|
|
|