209 lines
8.1 KiB
Go
209 lines
8.1 KiB
Go
package svc
|
|
|
|
import (
|
|
"aedata-server/app/main/api/internal/config"
|
|
"aedata-server/app/main/api/internal/middleware"
|
|
"aedata-server/app/main/api/internal/service"
|
|
tianyuanapi "aedata-server/app/main/api/internal/service/tianyuanapi_sdk"
|
|
"aedata-server/app/main/model"
|
|
"time"
|
|
|
|
"github.com/hibiken/asynq"
|
|
"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"
|
|
)
|
|
|
|
// ServiceContext 服务上下文
|
|
type ServiceContext struct {
|
|
Config config.Config
|
|
Redis *redis.Redis
|
|
|
|
// 中间件
|
|
AuthInterceptor rest.Middleware
|
|
UserAuthInterceptor rest.Middleware
|
|
|
|
// 用户相关模型
|
|
UserModel model.UserModel
|
|
UserAuthModel model.UserAuthModel
|
|
UserTempModel model.UserTempModel
|
|
|
|
// 产品相关模型
|
|
ProductModel model.ProductModel
|
|
FeatureModel model.FeatureModel
|
|
ProductFeatureModel model.ProductFeatureModel
|
|
|
|
// 订单相关模型
|
|
OrderModel model.OrderModel
|
|
OrderRefundModel model.OrderRefundModel
|
|
QueryModel model.QueryModel
|
|
QueryCleanupLogModel model.QueryCleanupLogModel
|
|
QueryCleanupDetailModel model.QueryCleanupDetailModel
|
|
QueryCleanupConfigModel model.QueryCleanupConfigModel
|
|
|
|
// 管理后台相关模型
|
|
AdminApiModel model.AdminApiModel
|
|
AdminMenuModel model.AdminMenuModel
|
|
AdminRoleModel model.AdminRoleModel
|
|
AdminRoleApiModel model.AdminRoleApiModel
|
|
AdminRoleMenuModel model.AdminRoleMenuModel
|
|
AdminUserModel model.AdminUserModel
|
|
AdminUserRoleModel model.AdminUserRoleModel
|
|
AdminDictDataModel model.AdminDictDataModel
|
|
AdminDictTypeModel model.AdminDictTypeModel
|
|
|
|
// 其他模型
|
|
ExampleModel model.ExampleModel
|
|
GlobalNotificationsModel model.GlobalNotificationsModel
|
|
|
|
// 服务
|
|
AlipayService *service.AliPayService
|
|
WechatPayService *service.WechatPayService
|
|
ApiRequestService *service.ApiRequestService
|
|
AsynqServer *asynq.Server
|
|
AsynqService *service.AsynqService
|
|
VerificationService *service.VerificationService
|
|
UserService *service.UserService
|
|
DictService *service.DictService
|
|
ImageService *service.ImageService
|
|
}
|
|
|
|
// NewServiceContext 创建服务上下文
|
|
func NewServiceContext(c config.Config) *ServiceContext {
|
|
// ============================== 基础设施初始化 ==============================
|
|
db := sqlx.NewMysql(c.DataSource)
|
|
cacheConf := c.CacheRedis
|
|
|
|
// 初始化Redis客户端
|
|
redisConf := redis.RedisConf{
|
|
Host: cacheConf[0].Host,
|
|
Pass: cacheConf[0].Pass,
|
|
Type: cacheConf[0].Type,
|
|
}
|
|
redisClient := redis.MustNewRedis(redisConf)
|
|
|
|
// ============================== 用户相关模型 ==============================
|
|
userModel := model.NewUserModel(db, cacheConf)
|
|
userAuthModel := model.NewUserAuthModel(db, cacheConf)
|
|
userTempModel := model.NewUserTempModel(db, cacheConf)
|
|
|
|
// ============================== 产品相关模型 ==============================
|
|
productModel := model.NewProductModel(db, cacheConf)
|
|
featureModel := model.NewFeatureModel(db, cacheConf)
|
|
productFeatureModel := model.NewProductFeatureModel(db, cacheConf)
|
|
|
|
// ============================== 订单相关模型 ==============================
|
|
orderModel := model.NewOrderModel(db, cacheConf)
|
|
queryModel := model.NewQueryModel(db, cacheConf)
|
|
orderRefundModel := model.NewOrderRefundModel(db, cacheConf)
|
|
queryCleanupLogModel := model.NewQueryCleanupLogModel(db, cacheConf)
|
|
queryCleanupDetailModel := model.NewQueryCleanupDetailModel(db, cacheConf)
|
|
queryCleanupConfigModel := model.NewQueryCleanupConfigModel(db, cacheConf)
|
|
|
|
// ============================== 管理后台相关模型 ==============================
|
|
adminApiModel := model.NewAdminApiModel(db, cacheConf)
|
|
adminMenuModel := model.NewAdminMenuModel(db, cacheConf)
|
|
adminRoleModel := model.NewAdminRoleModel(db, cacheConf)
|
|
adminRoleApiModel := model.NewAdminRoleApiModel(db, cacheConf)
|
|
adminRoleMenuModel := model.NewAdminRoleMenuModel(db, cacheConf)
|
|
adminUserModel := model.NewAdminUserModel(db, cacheConf)
|
|
adminUserRoleModel := model.NewAdminUserRoleModel(db, cacheConf)
|
|
adminDictDataModel := model.NewAdminDictDataModel(db, cacheConf)
|
|
adminDictTypeModel := model.NewAdminDictTypeModel(db, cacheConf)
|
|
|
|
|
|
// ============================== 其他模型 ==============================
|
|
exampleModel := model.NewExampleModel(db, cacheConf)
|
|
globalNotificationsModel := model.NewGlobalNotificationsModel(db, cacheConf)
|
|
|
|
// ============================== 第三方服务初始化 ==============================
|
|
tianyuanapi, err := tianyuanapi.NewClient(tianyuanapi.Config{
|
|
AccessID: c.Tianyuanapi.AccessID,
|
|
Key: c.Tianyuanapi.Key,
|
|
BaseURL: c.Tianyuanapi.BaseURL,
|
|
Timeout: time.Duration(c.Tianyuanapi.Timeout) * time.Second,
|
|
})
|
|
if err != nil {
|
|
logx.Errorf("初始化天远API失败: %+v", err)
|
|
}
|
|
// ============================== 业务服务初始化 ==============================
|
|
alipayService := service.NewAliPayService(c)
|
|
wechatPayService := service.NewWechatPayService(c, userAuthModel, service.InitTypeWxPayPubKey)
|
|
apiRequestService := service.NewApiRequestService(c, featureModel, productFeatureModel, tianyuanapi)
|
|
verificationService := service.NewVerificationService(c, tianyuanapi, apiRequestService)
|
|
asynqService := service.NewAsynqService(c)
|
|
userService := service.NewUserService(&c, userModel, userAuthModel, userTempModel)
|
|
dictService := service.NewDictService(adminDictTypeModel, adminDictDataModel)
|
|
imageService := service.NewImageService()
|
|
// ============================== 异步任务服务 ==============================
|
|
asynqServer := asynq.NewServer(
|
|
asynq.RedisClientOpt{Addr: c.CacheRedis[0].Host, Password: c.CacheRedis[0].Pass},
|
|
asynq.Config{
|
|
IsFailure: func(err error) bool {
|
|
logx.Errorf("异步任务失败: %+v \n", err)
|
|
return true
|
|
},
|
|
Concurrency: 10,
|
|
},
|
|
)
|
|
|
|
// ============================== 返回服务上下文 ==============================
|
|
return &ServiceContext{
|
|
Config: c,
|
|
Redis: redisClient,
|
|
AuthInterceptor: middleware.NewAuthInterceptorMiddleware(c).Handle,
|
|
UserAuthInterceptor: middleware.NewUserAuthInterceptorMiddleware().Handle,
|
|
|
|
// 用户相关模型
|
|
UserModel: userModel,
|
|
UserAuthModel: userAuthModel,
|
|
UserTempModel: userTempModel,
|
|
|
|
// 产品相关模型
|
|
ProductModel: productModel,
|
|
FeatureModel: featureModel,
|
|
ProductFeatureModel: productFeatureModel,
|
|
|
|
// 订单相关模型
|
|
OrderModel: orderModel,
|
|
QueryModel: queryModel,
|
|
OrderRefundModel: orderRefundModel,
|
|
QueryCleanupLogModel: queryCleanupLogModel,
|
|
QueryCleanupDetailModel: queryCleanupDetailModel,
|
|
QueryCleanupConfigModel: queryCleanupConfigModel,
|
|
|
|
|
|
// 管理后台相关模型
|
|
AdminApiModel: adminApiModel,
|
|
AdminMenuModel: adminMenuModel,
|
|
AdminRoleModel: adminRoleModel,
|
|
AdminRoleApiModel: adminRoleApiModel,
|
|
AdminRoleMenuModel: adminRoleMenuModel,
|
|
AdminUserModel: adminUserModel,
|
|
AdminUserRoleModel: adminUserRoleModel,
|
|
AdminDictDataModel: adminDictDataModel,
|
|
AdminDictTypeModel: adminDictTypeModel,
|
|
// 其他模型
|
|
ExampleModel: exampleModel,
|
|
GlobalNotificationsModel: globalNotificationsModel,
|
|
|
|
// 服务
|
|
AlipayService: alipayService,
|
|
WechatPayService: wechatPayService,
|
|
ApiRequestService: apiRequestService,
|
|
AsynqServer: asynqServer,
|
|
AsynqService: asynqService,
|
|
VerificationService: verificationService,
|
|
UserService: userService,
|
|
DictService: dictService,
|
|
ImageService: imageService,
|
|
}
|
|
}
|
|
|
|
func (s *ServiceContext) Close() {
|
|
if s.AsynqService != nil {
|
|
s.AsynqService.Close()
|
|
}
|
|
}
|