package controller import ( "SciencesServer/app/api/website/model" "SciencesServer/app/basic/controller" model2 "SciencesServer/app/common/model" "SciencesServer/app/session" "errors" ) type Activity struct { *session.Enterprise local string } type ActivityHandle func(session *session.Enterprise, local string) *Activity type ( // ActivityInfo 活动信息 ActivityInfo struct { ID string `json:"id"` *model.ActivityInstanceInfo JoinStatus bool `json:"join_status"` } // ActivityDetail 详细信息 ActivityDetail struct { ID string `json:"id"` *model.ActivityInstanceDetail JoinStatus bool `json:"join_status"` } ) // Instance 活动信息 func (c *Activity) Instance(title string, mode, page, pageSize int) (*controller.ReturnPages, error) { mActivityInstance := model.NewActivityInstance() var count int64 var identityUID uint64 if c.Enterprise != nil { identityUID = c.IdentityUID } where := make([]*model2.ModelWhere, 0) if title != "" { where = append(where, model2.NewWhereLike("a.title", title)) } if mode > 0 { where = append(where, model2.NewWhere("a.mode", mode)) } out, err := mActivityInstance.Activity(identityUID, page, pageSize, &count) if err != nil { return nil, err } list := make([]*ActivityInfo, 0) for _, v := range out { list = append(list, &ActivityInfo{ ID: v.GetEncodeID(), ActivityInstanceInfo: v, JoinStatus: v.JoinID > 0, }) } return &controller.ReturnPages{Data: list, Count: count}, nil } // Detail 详细信息 func (c *Activity) Detail(id uint64) (*ActivityDetail, error) { mActivityInstance := model.NewActivityInstance() var identityUID uint64 if c.Enterprise != nil { identityUID = c.IdentityUID } out, err := mActivityInstance.Detail(id, identityUID) if err != nil { return nil, err } return &ActivityDetail{ ID: out.GetEncodeID(), ActivityInstanceDetail: out, JoinStatus: out.JoinID > 0., }, nil } // Join 加入活动 func (c *Activity) Join(id uint64) error { mActivityInstance := model.NewActivityInstance() isExist, err := model2.FirstField(mActivityInstance.ActivityInstance, []string{"id", "mode", "join_deadline"}, model2.NewWhere("status", model2.NewWhere("id", id)), model2.NewWhere("status", model2.ActivityInstanceStatusForShow)) if err != nil { return err } else if !isExist { return errors.New("操作错误,活动信息不存在或已被删除") } if !mActivityInstance.IsCanJoin() { return errors.New("操作错误,当前活动信息不可报名") } return nil } func NewActivity() ActivityHandle { return func(session *session.Enterprise, local string) *Activity { return &Activity{ Enterprise: session, local: local, } } }