package task import ( "context" "errors" "nova_task/internal/model" "nova_task/internal/pkg/errs" "nova_task/internal/pkg/utils" "time" "nova_task/internal/svc" "nova_task/internal/types" "github.com/zeromicro/go-zero/core/logx" ) type GetStakeTaskDetailLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } // NewGetStakeTaskDetailLogic 质押任务详情 func NewGetStakeTaskDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetStakeTaskDetailLogic { return &GetStakeTaskDetailLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *GetStakeTaskDetailLogic) GetStakeTaskDetail() (*types.StakeTaskDetail, error) { uid := utils.GetUidUint(l.ctx) start, end, err := l.svcCtx.ConfigModel.GetNftStakeTaskOpenDate(l.ctx) if err != nil { if errors.Is(err, model.ErrNotFound) { return nil, errs.New(errs.ErrTaskOpenDateNotSet, "task open date not set") } l.Errorw("get nft stake task open date failed", logx.Field("err", err)) return nil, errs.New(errs.ErrDatabaseOperate, err) } taskConf, err := l.svcCtx.ConfigModel.GetNftStakeTaskConf(l.ctx) if err != nil { if errors.Is(err, model.ErrNotFound) { return nil, errs.New(errs.ErrTaskConfNotSet, "task config not set") } l.Errorw("get nft stake task conf failed", logx.Field("err", err)) return nil, errs.New(errs.ErrDatabaseOperate, err) } var gameBonus int if l.svcCtx.GamePitModel.UserExist(l.ctx, uid) { gameBonus = taskConf.OccupyPercent } return &types.StakeTaskDetail{ StartDate: start.Format(time.DateOnly), EndDate: end.Format(time.DateOnly), CountDown: utils.TodayRemainSeconds(), ProduceTokensToday: 0, GameBonus: gameBonus, CanReceiveTokens: 0, }, nil }