package svc import ( ea "github.com/earn-alliance/earnalliance-go" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/stores/redis" "github.com/zeromicro/go-zero/core/stores/sqlx" "github.com/zeromicro/go-zero/rest" "nova_task/internal/config" "nova_task/internal/middleware" "nova_task/internal/model" ) type ServiceContext struct { Config config.Config TaskModel model.NhTaskModel TaskAssetModel model.NhTaskAssetModel TaskAssetRecordModel model.NhTaskAssetRecordModel TaskProgressModel model.NhTaskProgressModel TwitterModel model.NhTwitterModel PromoteBindModel model.NhPromoteBindModel TouristBindModel model.NhTouristBindModel CommunityModel model.NhTaskCommunityModel UserModel model.NhUserModel WalletModel model.NhWalletModel ConfigModel model.NhSystemConfigModel NftHolderModel model.NhNftHolderModel NftHolderChangeLogModel model.NhNftHolderChangeLogModel StakeNftModel model.NhTaskNftStakeModel OldStakeNftModel model.NhNftStakeModel StakeNftLogModel model.NhTaskNftStakeLogModel StakeRewardModel model.NhTaskNftStakeRewardModel GamePitModel model.NhGamePitModel StakePropertyModel model.NhNftStakePropertyModel EmailRewardModel model.NhEmailRewardModel ApiKeyCheck rest.Middleware AdminSecretCheck rest.Middleware Earn *ea.Client DBConn sqlx.SqlConn Redis *redis.Redis } func NewServiceContext(c config.Config) *ServiceContext { dbConn := c.MySql.Conn() configModel := model.NewNhSystemConfigModel(dbConn, c.Cache) return &ServiceContext{ Config: c, TaskModel: model.NewNhTaskModel(dbConn), TaskAssetModel: model.NewNhTaskAssetModel(dbConn), TaskAssetRecordModel: model.NewNhTaskAssetRecordModel(dbConn), TaskProgressModel: model.NewNhTaskProgressModel(dbConn), TwitterModel: model.NewNhTwitterModel(dbConn), PromoteBindModel: model.NewNhPromoteBindModel(dbConn), CommunityModel: model.NewNhTaskCommunityModel(dbConn), UserModel: model.NewNhUserModel(dbConn), TouristBindModel: model.NewNhTouristBindModel(dbConn), WalletModel: model.NewNhWalletModel(dbConn), ConfigModel: configModel, NftHolderModel: model.NewNhNftHolderModel(dbConn), NftHolderChangeLogModel: model.NewNhNftHolderChangeLogModel(dbConn), StakeNftModel: model.NewNhTaskNftStakeModel(dbConn), OldStakeNftModel: model.NewNhNftStakeModel(dbConn), StakeRewardModel: model.NewNhTaskNftStakeRewardModel(dbConn), GamePitModel: model.NewNhGamePitModel(dbConn), StakePropertyModel: model.NewNhNftStakePropertyModel(dbConn), EmailRewardModel: model.NewNhEmailRewardModel(dbConn), ApiKeyCheck: middleware.NewApiKeyCheckMiddleware(configModel).Handle, AdminSecretCheck: middleware.NewAdminSecretCheckMiddleware(configModel).Handle, Earn: c.Earn.BuildEarnClient(), DBConn: dbConn, Redis: redis.MustNewRedis(c.Redis), } } func (s *ServiceContext) Close() { err := s.Earn.Flush() if err != nil { logx.Errorw("flush earn error", logx.Field("err", err)) } s.Earn.Close() }