Files
slogan/styleagent/service/member_plan_service.go
T

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
}