53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"slogan-agent/styleagent/dao"
|
|
"slogan-agent/styleagent/model/entity"
|
|
)
|
|
|
|
type memberPlanService struct{}
|
|
|
|
var MemberPlanService = new(memberPlanService)
|
|
|
|
func (s *memberPlanService) PlanList(ctx context.Context) ([]*entity.MemberPlan, error) {
|
|
return dao.MemberPlan.ListEnabled(ctx)
|
|
}
|
|
|
|
type MemberStatus struct {
|
|
IsVip bool `json:"is_vip"`
|
|
ExpireAt string `json:"expire_at"`
|
|
PlanName string `json:"plan_name"`
|
|
Benefits []string `json:"benefits"`
|
|
}
|
|
|
|
func (s *memberPlanService) Status(ctx context.Context, userId int64) (*MemberStatus, error) {
|
|
st := &MemberStatus{Benefits: make([]string, 0)}
|
|
um, err := dao.UserMember.GetByUser(ctx, userId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if um == nil || um.ExpireAt == nil || um.ExpireAt.Time.Before(time.Now()) {
|
|
return st, nil
|
|
}
|
|
st.IsVip = true
|
|
st.ExpireAt = um.ExpireAt.Format("Y-m-d H:i:s")
|
|
if plan, _ := dao.MemberPlan.GetOne(ctx, um.PlanId); plan != nil {
|
|
st.PlanName = plan.Name
|
|
st.Benefits = parseBenefits(plan.Features)
|
|
}
|
|
return st, nil
|
|
}
|
|
|
|
func parseBenefits(features string) []string {
|
|
var list []string
|
|
_ = json.Unmarshal([]byte(features), &list)
|
|
if list == nil {
|
|
list = make([]string, 0)
|
|
}
|
|
return list
|
|
}
|