package provider import ( "context" "joybuywork/internal/consts/ckey" "joybuywork/internal/repository/cache" "joybuywork/internal/repository/model" "joybuywork/internal/repository/mtype" "joybuywork/internal/repository/withdefault" "joybuywork/internal/utils/lockdo" "joybuywork/internal/utils/logic" "joybuywork/internal/utils/merr" ) type FissionConfig struct { logic.Context project *model.Project conf *model.FissionConfig } func NewFissionConfig(ctx context.Context, project *model.Project) (conf *FissionConfig, err error) { conf = &FissionConfig{ project: project, } conf.BaseInit(ctx, merr.NewBE(ctx)) err = conf._init() if err != nil { return } return } func (s *FissionConfig) _init() (err error) { return lockdo.FindNilDo( s.Ctx, ckey.FissionConfigOnce(s.project.ID), func() (none bool, err error) { s.conf, err = cache.NewFissionConfig(s.Ctx).FindByProjectId(s.project.ID) if err != nil { err = s.BE().CacheError(err) return } return s.conf == nil, nil }, func() (err error) { s.conf = withdefault.FissionConfig(&model.FissionConfig{ ProjectID: s.project.ID, }) if err = s.GetDao().FissionConfig.WithContext(s.Ctx).Create(s.conf); err != nil { return s.BE().MysqlError(err) } return }, ) } func (s *FissionConfig) Config() (conf *model.FissionConfig) { return s.conf } func (s *FissionConfig) SetPushCampaignTask(pv int32) (err error) { conf := s.Config() if conf.PushCampaignTask == int8(pv) { return } m := s.GetDao().FissionConfig _, err = m.WithContext(s.Ctx).Where(m.ID.Eq(conf.ID)).UpdateSimple(m.PushCampaignTask.Value(int8(pv))) if err != nil { err = s.BE().MysqlError(err) return } _ = cache.NewFissionConfig(s.Ctx).Clear(conf) return } func (s *FissionConfig) SetPushVisit(pv int32) (err error) { conf := s.Config() if conf.PushVisit == int8(pv) { return } m := s.GetDao().FissionConfig _, err = m.WithContext(s.Ctx).Where(m.ID.Eq(conf.ID)).UpdateSimple(m.PushVisit.Value(int8(pv))) if err != nil { err = s.BE().MysqlError(err) return } _ = cache.NewFissionConfig(s.Ctx).Clear(conf) return } func (s *FissionConfig) GetLvUrl() (url *model.NotifyURL, err error) { conf := s.Config() if conf.LvURLID == 0 || !s._canDo() { return } url, err = cache.NewNotifyURL(s.Ctx).FindById(conf.LvURLID) if err != nil { err = s.BE().CacheError(err) return } if url.IsDel == mtype.Yes { return nil, nil } return } func (s *FissionConfig) SetLvUrl(urlId int64) (err error) { conf := s.Config() if conf.LvURLID == urlId || !s._canDo() { return } m := s.GetDao().FissionConfig _, err = m.WithContext(s.Ctx).Where(m.ID.Eq(conf.ID)).UpdateSimple(m.LvURLID.Value(urlId)) if err != nil { err = s.BE().MysqlError(err) return } _ = cache.NewFissionConfig(s.Ctx).Clear(conf) return } func (s *FissionConfig) _canDo() bool { status, _ := NewCompanyMade(s.Ctx, s.project.CompanyID, logic.WithDao(s.GetDao())).GetMade(mtype.CompanyMadeMarkLvApi) return status.Open }