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.
100 lines
2.3 KiB
100 lines
2.3 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"time" |
|
|
|
"go-common/app/interface/openplatform/article/model" |
|
"go-common/library/ecode" |
|
) |
|
|
|
const ( |
|
// identify state |
|
// 0: normal phone number 1: virtual phone number 2: no phone number |
|
_identifyPhoneVirtual = 1 // virtual phone number |
|
_identifyPhoneEmpty = 2 // no phone number |
|
) |
|
|
|
// ApplyInfo get apply info |
|
// 检查顺序: 是否已通过->拒绝-> 已提交-> 开放申请-> 申请已满 -> 实名认证/封禁状态/绑定手机 |
|
func (s *Service) ApplyInfo(c context.Context, mid int64) (res *model.Apply, err error) { |
|
if mid == 0 { |
|
if !s.setting.ApplyOpen { |
|
err = ecode.ArtApplyClose |
|
return |
|
} |
|
if s.checkApplyFull(c) { |
|
err = ecode.ArtApplyFull |
|
return |
|
} |
|
return |
|
} |
|
res = &model.Apply{} |
|
res.Forbid, _, _ = s.UserDisabled(c, mid) |
|
if res.Forbid { |
|
err = ecode.ArtApplyForbid |
|
return |
|
} |
|
if pass, _, _ := s.IsAuthor(c, mid); pass { |
|
err = ecode.ArtApplyPass |
|
return |
|
} |
|
var author *model.AuthorLimit |
|
if author, err = s.dao.RawAuthor(c, mid); err != nil { |
|
return |
|
} |
|
if author != nil { |
|
if author.State == model.AuthorStatePass { |
|
err = ecode.ArtApplyPass |
|
return |
|
} else if author.State == model.AuthorStateReject { |
|
if time.Now().Unix()-int64(author.Rtime) <= s.setting.ApplyFrozenDuration { |
|
err = ecode.ArtApplyReject |
|
return |
|
} |
|
} else if author.State == model.AuthorStatePending { |
|
err = ecode.ArtApplySubmit |
|
return |
|
} |
|
} |
|
if !s.setting.ApplyOpen { |
|
err = ecode.ArtApplyClose |
|
return |
|
} |
|
if s.checkApplyFull(c) { |
|
err = ecode.ArtApplyFull |
|
return |
|
} |
|
var identify *model.Identify |
|
if identify, err = s.dao.Identify(c, mid); err != nil { |
|
return |
|
} |
|
res.Verify = (identify.Identify == 0) |
|
res.Phone = identify.Phone |
|
if res.Phone == _identifyPhoneEmpty { |
|
err = ecode.ArtApplyPhone |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) checkApplyFull(c context.Context) (full bool) { |
|
if count, err := s.dao.ApplyCount(c); err != nil { |
|
return |
|
} else if count > 0 { |
|
return count >= s.setting.ApplyLimit |
|
} |
|
return |
|
} |
|
|
|
// Apply add apply |
|
func (s *Service) Apply(c context.Context, mid int64, content, category string) (err error) { |
|
var res = &model.Apply{} |
|
if res, err = s.ApplyInfo(c, mid); err != nil { |
|
return |
|
} else if res.Phone == _identifyPhoneVirtual { |
|
err = ecode.ArtApplyPhoneVirtual |
|
return |
|
} |
|
err = s.dao.AddApply(c, mid, content, category) |
|
return |
|
}
|
|
|