123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package service
- import (
- "context"
- "time"
- "go-common/app/interface/main/shorturl/model"
- "go-common/library/ecode"
- "go-common/library/log"
- xtime "go-common/library/time"
- )
- // ShortCache get short by cache
- func (s *Service) ShortCache(c context.Context, short string) (su *model.ShortUrl, err error) {
- if su, err = s.shortd.Cache(c, short); err != nil {
- log.Error("s.shrtd.Cache(%s) error(%v)", short, err)
- return
- }
- if su != nil {
- return
- }
- if su, err = s.shortd.Short(c, short); err != nil {
- log.Error("s.shortd.Short(%s) error(%v)", short, err)
- return
- }
- // add cache
- if su == nil {
- s.shortd.AddCache(func() {
- s.shortd.SetEmptyCache(context.TODO(), short)
- })
- return
- }
- s.shortd.AddCache(func() {
- s.shortd.SetCache(context.TODO(), su)
- })
- return
- }
- // ShortByID model.ShortUrl by short id
- func (s *Service) ShortByID(c context.Context, id int64) (su *model.ShortUrl, err error) {
- su, err = s.shortd.ShortbyID(c, id)
- if err != nil || su == nil {
- log.Error("ShortByID.Get(%d) error(%v)", id, err)
- err = ecode.ShortURLNotFound
- return
- }
- return
- }
- // Add new url to db
- func (s *Service) Add(c context.Context, mid int64, long string) (short string, err error) {
- su := &model.ShortUrl{
- Long: long,
- Mid: mid,
- State: model.StateNormal,
- CTime: xtime.Time(time.Now().Unix()),
- }
- ss := model.Generate(long) // detemine no repeat
- for _, str := range ss {
- su.Short = str
- if su.ID, err = s.shortd.InShort(c, su); err != nil {
- log.Error("s.shortd.InShort error(%v)", err)
- err = ecode.ServerErr
- return
- }
- if su.ID == 0 {
- var shortRes *model.ShortUrl
- // already exist
- if shortRes, err = s.shortd.Short(c, str); err == nil && shortRes != nil {
- if shortRes.Long == long {
- if _, err = s.shortd.UpdateState(c, shortRes.ID, mid, model.StateNormal); err != nil {
- break
- }
- short = shortRes.Short
- break
- } else {
- continue
- }
- }
- } else {
- short = str
- break
- }
- }
- if short == "" {
- err = ecode.ShortURLNotFound
- return
- }
- s.shortd.AddCache(func() {
- var su, err = s.shortd.Short(context.TODO(), short)
- if err == nil && su != nil {
- s.shortd.SetCache(context.TODO(), su)
- }
- })
- return
- }
- // ShortUpdate model.ShortUpdate
- func (s *Service) ShortUpdate(c context.Context, id, mid int64, long string) (err error) {
- if _, err = s.shortd.ShortUp(c, id, mid, long); err != nil {
- log.Error("s.shortd.ShortUp error(%v)", err)
- return
- }
- s.shortd.AddCache(func() {
- var short *model.ShortUrl
- if short, err = s.shortd.ShortbyID(context.TODO(), id); err != nil {
- log.Error("s.shortd.ShortByID(%d) error(%v)", id, err)
- return
- }
- s.shortd.SetCache(context.TODO(), short)
- })
- return
- }
- // ShortDel model.ShortDel
- func (s *Service) ShortDel(c context.Context, id, mid int64, now time.Time) (err error) {
- if _, err = s.shortd.UpdateState(c, id, mid, model.StateDelted); err != nil {
- log.Error("s.shortd.ShortDel error(%v)", err)
- }
- s.shortd.AddCache(func() {
- var short *model.ShortUrl
- if short, err = s.shortd.ShortbyID(context.TODO(), id); err != nil {
- log.Error("s.shortd.ShortByID(%d) error(%v)", id, err)
- return
- }
- s.shortd.SetCache(context.TODO(), short)
- })
- return
- }
- // ShortCount model.ShortCount count
- func (s *Service) ShortCount(c context.Context, mid int64, long string) (count int, err error) {
- if count, err = s.shortd.ShortCount(c, mid, long); err != nil {
- log.Error("s.shortd.ShortState error(%v)", err)
- }
- return
- }
- // ShortLimit get short_url list
- func (s *Service) ShortLimit(c context.Context, pn, ps int, mid int64, long string) (res []*model.ShortUrl, err error) {
- if res, err = s.shortd.ShortLimit(c, (pn-1)*ps, ps, mid, long); err != nil {
- log.Error("s.shortd.ShortLimit error(%v)", err)
- }
- return
- }
|