123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- 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
- }
|