This commit is contained in:
2025-05-27 18:35:01 +08:00
parent ca66cc91d4
commit 79e1ba2616
115 changed files with 22039 additions and 1045 deletions

View File

@@ -21,7 +21,19 @@ type ServiceContext struct {
SourceInterceptor rest.Middleware
AuthInterceptor rest.Middleware
// 模型
// 服务
PayService *service.PayService
WestDexService *service.WestDexService
YushanService *service.YushanService
TianjuService *service.TianjuService
ApiRequestService *service.ApiRequestService
AsynqServer *asynq.Server
AsynqService *service.AsynqService
VerificationService *service.VerificationService
DictService *service.DictService
AdminPromotionLinkStatsService *service.AdminPromotionLinkStatsService
// 基础模型
UserModel model.UserModel
UserAuthModel model.UserAuthModel
ProductModel model.ProductModel
@@ -29,26 +41,13 @@ type ServiceContext struct {
ProductFeatureModel model.ProductFeatureModel
ProductRenderModel model.ProductRenderModel
OrderModel model.OrderModel
OrderRefundModel model.OrderRefundModel
QueryModel model.QueryModel
GlobalNotificationsModel model.GlobalNotificationsModel
ExampleModel model.ExampleModel
ExampleParamsModel model.ExampleParamsModel
// 服务
AlipayService *service.AliPayService
WechatPayService *service.WechatPayService
ApplePayService *service.ApplePayService
WestDexService *service.WestDexService
YushanService *service.YushanService
TianjuService *service.TianjuService
ApiRequestService *service.ApiRequestService
AsynqServer *asynq.Server // 服务端
AsynqService *service.AsynqService // 客户端
VerificationService *service.VerificationService
DictService *service.DictService
AdminPromotionLinkStatsService *service.AdminPromotionLinkStatsService
// admin
// 管理后台模型
AdminApiModel model.AdminApiModel
AdminMenuModel model.AdminMenuModel
AdminRoleModel model.AdminRoleModel
@@ -59,20 +58,24 @@ type ServiceContext struct {
AdminDictDataModel model.AdminDictDataModel
AdminDictTypeModel model.AdminDictTypeModel
// admin promotion
// 推广相关模型
AdminPromotionLinkModel model.AdminPromotionLinkModel
AdminPromotionLinkStatsTotalModel model.AdminPromotionLinkStatsTotalModel
AdminPromotionLinkStatsHistoryModel model.AdminPromotionLinkStatsHistoryModel
AdminPromotionOrderModel model.AdminPromotionOrderModel
}
func NewServiceContext(c config.Config) *ServiceContext {
db := sqlx.NewMysql(c.DataSource)
// 初始化基础服务
func initBaseServices(c config.Config) (*redis.Redis, *asynq.Server) {
// 初始化Redis
redisConf := redis.RedisConf{
Host: c.CacheRedis[0].Host,
Pass: c.CacheRedis[0].Pass,
Type: c.CacheRedis[0].Type,
}
r := redis.MustNewRedis(redisConf)
// 初始化Asynq服务
asynqServer := asynq.NewServer(
asynq.RedisClientOpt{Addr: c.CacheRedis[0].Host, Password: c.CacheRedis[0].Pass},
asynq.Config{
@@ -83,80 +86,203 @@ func NewServiceContext(c config.Config) *ServiceContext {
Concurrency: 10,
},
)
adminApiModel := model.NewAdminApiModel(db, c.CacheRedis)
adminMenuModel := model.NewAdminMenuModel(db, c.CacheRedis)
adminRoleModel := model.NewAdminRoleModel(db, c.CacheRedis)
adminRoleApiModel := model.NewAdminRoleApiModel(db, c.CacheRedis)
adminRoleMenuModel := model.NewAdminRoleMenuModel(db, c.CacheRedis)
adminUserModel := model.NewAdminUserModel(db, c.CacheRedis)
adminUserRoleModel := model.NewAdminUserRoleModel(db, c.CacheRedis)
adminDictDataModel := model.NewAdminDictDataModel(db, c.CacheRedis)
adminDictTypeModel := model.NewAdminDictTypeModel(db, c.CacheRedis)
// admin promotion
adminPromotionLinkModel := model.NewAdminPromotionLinkModel(db, c.CacheRedis)
adminPromotionLinkStatsTotalModel := model.NewAdminPromotionLinkStatsTotalModel(db, c.CacheRedis)
adminPromotionLinkStatsHistoryModel := model.NewAdminPromotionLinkStatsHistoryModel(db, c.CacheRedis)
adminPromotionOrderModel := model.NewAdminPromotionOrderModel(db, c.CacheRedis)
return r, asynqServer
}
// 初始化基础模型
func initBaseModels(db sqlx.SqlConn, c config.Config) *BaseModels {
return &BaseModels{
UserModel: model.NewUserModel(db, c.CacheRedis),
UserAuthModel: model.NewUserAuthModel(db, c.CacheRedis),
ProductModel: model.NewProductModel(db, c.CacheRedis),
FeatureModel: model.NewFeatureModel(db, c.CacheRedis),
ProductFeatureModel: model.NewProductFeatureModel(db, c.CacheRedis),
ProductRenderModel: model.NewProductRenderModel(db, c.CacheRedis),
OrderModel: model.NewOrderModel(db, c.CacheRedis),
OrderRefundModel: model.NewOrderRefundModel(db, c.CacheRedis),
QueryModel: model.NewQueryModel(db, c.CacheRedis),
GlobalNotificationsModel: model.NewGlobalNotificationsModel(db, c.CacheRedis),
ExampleModel: model.NewExampleModel(db, c.CacheRedis),
ExampleParamsModel: model.NewExampleParamsModel(db, c.CacheRedis),
}
}
// 初始化管理后台模型
func initAdminModels(db sqlx.SqlConn, c config.Config) *AdminModels {
return &AdminModels{
AdminApiModel: model.NewAdminApiModel(db, c.CacheRedis),
AdminMenuModel: model.NewAdminMenuModel(db, c.CacheRedis),
AdminRoleModel: model.NewAdminRoleModel(db, c.CacheRedis),
AdminRoleApiModel: model.NewAdminRoleApiModel(db, c.CacheRedis),
AdminRoleMenuModel: model.NewAdminRoleMenuModel(db, c.CacheRedis),
AdminUserModel: model.NewAdminUserModel(db, c.CacheRedis),
AdminUserRoleModel: model.NewAdminUserRoleModel(db, c.CacheRedis),
AdminDictDataModel: model.NewAdminDictDataModel(db, c.CacheRedis),
AdminDictTypeModel: model.NewAdminDictTypeModel(db, c.CacheRedis),
}
}
// 初始化推广相关模型
func initPromotionModels(db sqlx.SqlConn, c config.Config) *PromotionModels {
return &PromotionModels{
AdminPromotionLinkModel: model.NewAdminPromotionLinkModel(db, c.CacheRedis),
AdminPromotionLinkStatsTotalModel: model.NewAdminPromotionLinkStatsTotalModel(db, c.CacheRedis),
AdminPromotionLinkStatsHistoryModel: model.NewAdminPromotionLinkStatsHistoryModel(db, c.CacheRedis),
AdminPromotionOrderModel: model.NewAdminPromotionOrderModel(db, c.CacheRedis),
}
}
// 初始化业务服务
func initBusinessServices(c config.Config, models *BaseModels, adminModels *AdminModels, promotionModels *PromotionModels) *BusinessServices {
// 初始化基础服务
westDexService := service.NewWestDexService(c)
yushanService := service.NewYushanService(c)
tianjuService := service.NewTianjuService(c)
productFeatureModel := model.NewProductFeatureModel(db, c.CacheRedis)
featureModel := model.NewFeatureModel(db, c.CacheRedis)
userAuthModel := model.NewUserAuthModel(db, c.CacheRedis)
apiRequestService := service.NewApiRequestService(c, westDexService, yushanService, tianjuService, featureModel, productFeatureModel)
// 初始化API请求服务
apiRequestService := service.NewApiRequestService(
c,
westDexService,
yushanService,
tianjuService,
models.FeatureModel,
models.ProductFeatureModel,
)
// 初始化推广统计服务
adminPromotionLinkStatsService := service.NewAdminPromotionLinkStatsService(&service.ServiceContext{
AdminPromotionLinkModel: adminPromotionLinkModel,
AdminPromotionLinkStatsTotalModel: adminPromotionLinkStatsTotalModel,
AdminPromotionLinkStatsHistoryModel: adminPromotionLinkStatsHistoryModel,
AdminPromotionLinkModel: promotionModels.AdminPromotionLinkModel,
AdminPromotionLinkStatsTotalModel: promotionModels.AdminPromotionLinkStatsTotalModel,
AdminPromotionLinkStatsHistoryModel: promotionModels.AdminPromotionLinkStatsHistoryModel,
})
dictService := service.NewDictService(adminDictTypeModel, adminDictDataModel)
return &ServiceContext{
Config: c,
Redis: redis.MustNewRedis(redisConf),
SourceInterceptor: middleware.NewSourceInterceptorMiddleware().Handle,
AuthInterceptor: middleware.NewAuthInterceptorMiddleware(c).Handle,
AlipayService: service.NewAliPayService(c),
WechatPayService: service.NewWechatPayService(c, userAuthModel),
ApplePayService: service.NewApplePayService(c),
return &BusinessServices{
PayService: service.NewPayService(c, models.OrderModel, models.OrderRefundModel, models.ProductModel, models.UserAuthModel),
WestDexService: westDexService,
YushanService: yushanService,
TianjuService: tianjuService,
AdminPromotionLinkStatsService: adminPromotionLinkStatsService,
VerificationService: service.NewVerificationService(c, westDexService, apiRequestService),
AsynqServer: asynqServer,
ApiRequestService: apiRequestService,
AsynqService: service.NewAsynqService(c),
DictService: dictService,
UserModel: model.NewUserModel(db, c.CacheRedis),
UserAuthModel: userAuthModel,
ProductModel: model.NewProductModel(db, c.CacheRedis),
ProductRenderModel: model.NewProductRenderModel(db, c.CacheRedis),
OrderModel: model.NewOrderModel(db, c.CacheRedis),
QueryModel: model.NewQueryModel(db, c.CacheRedis),
ExampleModel: model.NewExampleModel(db, c.CacheRedis),
ExampleParamsModel: model.NewExampleParamsModel(db, c.CacheRedis),
GlobalNotificationsModel: model.NewGlobalNotificationsModel(db, c.CacheRedis),
FeatureModel: featureModel,
ProductFeatureModel: productFeatureModel,
AdminApiModel: adminApiModel,
AdminMenuModel: adminMenuModel,
AdminRoleModel: adminRoleModel,
AdminRoleApiModel: adminRoleApiModel,
AdminRoleMenuModel: adminRoleMenuModel,
AdminUserModel: adminUserModel,
AdminUserRoleModel: adminUserRoleModel,
AdminDictDataModel: adminDictDataModel,
AdminDictTypeModel: adminDictTypeModel,
AdminPromotionLinkModel: adminPromotionLinkModel,
AdminPromotionLinkStatsTotalModel: adminPromotionLinkStatsTotalModel,
AdminPromotionLinkStatsHistoryModel: adminPromotionLinkStatsHistoryModel,
AdminPromotionOrderModel: adminPromotionOrderModel,
VerificationService: service.NewVerificationService(c, westDexService, apiRequestService),
DictService: service.NewDictService(adminModels.AdminDictTypeModel, adminModels.AdminDictDataModel),
AdminPromotionLinkStatsService: adminPromotionLinkStatsService,
}
}
func NewServiceContext(c config.Config) *ServiceContext {
// 初始化数据库连接
db := sqlx.NewMysql(c.DataSource)
// 初始化基础服务
redis, asynqServer := initBaseServices(c)
// 初始化各种模型
baseModels := initBaseModels(db, c)
adminModels := initAdminModels(db, c)
promotionModels := initPromotionModels(db, c)
// 初始化业务服务
businessServices := initBusinessServices(c, baseModels, adminModels, promotionModels)
return &ServiceContext{
Config: c,
Redis: redis,
AsynqServer: asynqServer,
SourceInterceptor: middleware.NewSourceInterceptorMiddleware().Handle,
AuthInterceptor: middleware.NewAuthInterceptorMiddleware(c).Handle,
// 注入业务服务
PayService: businessServices.PayService,
WestDexService: businessServices.WestDexService,
YushanService: businessServices.YushanService,
TianjuService: businessServices.TianjuService,
ApiRequestService: businessServices.ApiRequestService,
AsynqService: businessServices.AsynqService,
VerificationService: businessServices.VerificationService,
DictService: businessServices.DictService,
AdminPromotionLinkStatsService: businessServices.AdminPromotionLinkStatsService,
// 注入基础模型
UserModel: baseModels.UserModel,
UserAuthModel: baseModels.UserAuthModel,
ProductModel: baseModels.ProductModel,
FeatureModel: baseModels.FeatureModel,
ProductFeatureModel: baseModels.ProductFeatureModel,
ProductRenderModel: baseModels.ProductRenderModel,
OrderModel: baseModels.OrderModel,
OrderRefundModel: baseModels.OrderRefundModel,
QueryModel: baseModels.QueryModel,
GlobalNotificationsModel: baseModels.GlobalNotificationsModel,
ExampleModel: baseModels.ExampleModel,
ExampleParamsModel: baseModels.ExampleParamsModel,
// 注入管理后台模型
AdminApiModel: adminModels.AdminApiModel,
AdminMenuModel: adminModels.AdminMenuModel,
AdminRoleModel: adminModels.AdminRoleModel,
AdminRoleApiModel: adminModels.AdminRoleApiModel,
AdminRoleMenuModel: adminModels.AdminRoleMenuModel,
AdminUserModel: adminModels.AdminUserModel,
AdminUserRoleModel: adminModels.AdminUserRoleModel,
AdminDictDataModel: adminModels.AdminDictDataModel,
AdminDictTypeModel: adminModels.AdminDictTypeModel,
// 注入推广相关模型
AdminPromotionLinkModel: promotionModels.AdminPromotionLinkModel,
AdminPromotionLinkStatsTotalModel: promotionModels.AdminPromotionLinkStatsTotalModel,
AdminPromotionLinkStatsHistoryModel: promotionModels.AdminPromotionLinkStatsHistoryModel,
AdminPromotionOrderModel: promotionModels.AdminPromotionOrderModel,
}
}
// 辅助结构体,用于分组初始化
type BaseModels struct {
UserModel model.UserModel
UserAuthModel model.UserAuthModel
ProductModel model.ProductModel
FeatureModel model.FeatureModel
ProductFeatureModel model.ProductFeatureModel
ProductRenderModel model.ProductRenderModel
OrderModel model.OrderModel
OrderRefundModel model.OrderRefundModel
QueryModel model.QueryModel
GlobalNotificationsModel model.GlobalNotificationsModel
ExampleModel model.ExampleModel
ExampleParamsModel model.ExampleParamsModel
}
type AdminModels struct {
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
}
type PromotionModels struct {
AdminPromotionLinkModel model.AdminPromotionLinkModel
AdminPromotionLinkStatsTotalModel model.AdminPromotionLinkStatsTotalModel
AdminPromotionLinkStatsHistoryModel model.AdminPromotionLinkStatsHistoryModel
AdminPromotionOrderModel model.AdminPromotionOrderModel
}
type BusinessServices struct {
PayService *service.PayService
WestDexService *service.WestDexService
YushanService *service.YushanService
TianjuService *service.TianjuService
ApiRequestService *service.ApiRequestService
AsynqService *service.AsynqService
VerificationService *service.VerificationService
DictService *service.DictService
AdminPromotionLinkStatsService *service.AdminPromotionLinkStatsService
}
func (s *ServiceContext) Close() {
if s.AsynqService != nil {
s.AsynqService.Close()