feat(grpc): add gRPC server infrastructure and schedule sync service
Add gRPC server support with configurable TLS, environment-based settings, and Wire injection. Implement schedule synchronization service with task runner integration for external course data fetching. - Add gRPC configuration with env var overrides (APP_GRPC_ENABLED, APP_GRPC_PORT, etc.) - Create gRPC server infrastructure with runner task management - Implement ScheduleSyncService for course data synchronization - Add sync endpoint to schedule handler for external system integration - Update repository with context-aware batch delete operation - Wire all dependencies including zap logger for structured logging
This commit is contained in:
25
internal/wire/grpc.go
Normal file
25
internal/wire/grpc.go
Normal file
@@ -0,0 +1,25 @@
|
||||
package wire
|
||||
|
||||
import (
|
||||
"carrot_bbs/internal/config"
|
||||
"carrot_bbs/internal/grpc/runner"
|
||||
|
||||
"github.com/google/wire"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// GRPCSet gRPC 相关的 Provider Set
|
||||
var GRPCSet = wire.NewSet(
|
||||
ProvideGRPCServer,
|
||||
ProvideTaskManager,
|
||||
)
|
||||
|
||||
// ProvideGRPCServer 提供 gRPC 服务器
|
||||
func ProvideGRPCServer(cfg *config.Config, logger *zap.Logger) *runner.Server {
|
||||
return runner.NewServer(&cfg.GRPC, logger)
|
||||
}
|
||||
|
||||
// ProvideTaskManager 提供 TaskManager
|
||||
func ProvideTaskManager(server *runner.Server) *runner.TaskManager {
|
||||
return server.GetTaskManager()
|
||||
}
|
||||
@@ -22,7 +22,6 @@ var HandlerSet = wire.NewSet(
|
||||
handler.NewPushHandler,
|
||||
handler.NewStickerHandler,
|
||||
handler.NewVoteHandler,
|
||||
handler.NewScheduleHandler,
|
||||
|
||||
// 需要特殊处理的 Handler
|
||||
ProvidePostHandler,
|
||||
@@ -30,6 +29,7 @@ var HandlerSet = wire.NewSet(
|
||||
ProvideSystemMessageHandler,
|
||||
ProvideGroupHandler,
|
||||
ProvideGorseHandler,
|
||||
ProvideScheduleHandler,
|
||||
)
|
||||
|
||||
// ProvidePostHandler 提供帖子处理器
|
||||
@@ -72,3 +72,11 @@ func ProvideGroupHandler(
|
||||
func ProvideGorseHandler(cfg *config.Config, db *gorm.DB) *handler.GorseHandler {
|
||||
return handler.NewGorseHandler(cfg.Gorse, db)
|
||||
}
|
||||
|
||||
// ProvideScheduleHandler 提供课表处理器
|
||||
func ProvideScheduleHandler(
|
||||
scheduleService service.ScheduleService,
|
||||
scheduleSyncService service.ScheduleSyncService,
|
||||
) *handler.ScheduleHandler {
|
||||
return handler.NewScheduleHandler(scheduleService, scheduleSyncService)
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import (
|
||||
"carrot_bbs/internal/repository"
|
||||
|
||||
"github.com/google/wire"
|
||||
"go.uber.org/zap"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
@@ -24,6 +25,9 @@ var InfrastructureSet = wire.NewSet(
|
||||
// 配置
|
||||
ProvideConfig,
|
||||
|
||||
// 日志
|
||||
ProvideLogger,
|
||||
|
||||
// 数据库
|
||||
ProvideDB,
|
||||
|
||||
@@ -119,3 +123,12 @@ func ProvideS3Client(cfg *config.Config) (*s3.Client, error) {
|
||||
func ProvideTransactionManager(db *gorm.DB) repository.TransactionManager {
|
||||
return repository.NewTransactionManager(db)
|
||||
}
|
||||
|
||||
// ProvideLogger 提供 Zap Logger
|
||||
func ProvideLogger() *zap.Logger {
|
||||
logger, err := zap.NewProduction()
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to create logger: %v", err)
|
||||
}
|
||||
return logger
|
||||
}
|
||||
|
||||
@@ -8,4 +8,5 @@ var AllSet = wire.NewSet(
|
||||
RepositorySet,
|
||||
ServiceSet,
|
||||
HandlerSet,
|
||||
GRPCSet,
|
||||
)
|
||||
|
||||
@@ -3,6 +3,7 @@ package wire
|
||||
import (
|
||||
"carrot_bbs/internal/cache"
|
||||
"carrot_bbs/internal/config"
|
||||
"carrot_bbs/internal/grpc/runner"
|
||||
"carrot_bbs/internal/pkg/email"
|
||||
"carrot_bbs/internal/pkg/gorse"
|
||||
"carrot_bbs/internal/pkg/openai"
|
||||
@@ -12,6 +13,7 @@ import (
|
||||
"carrot_bbs/internal/service"
|
||||
|
||||
"github.com/google/wire"
|
||||
"go.uber.org/zap"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
@@ -36,6 +38,7 @@ var ServiceSet = wire.NewSet(
|
||||
ProvideVoteService,
|
||||
ProvideChatService,
|
||||
ProvideScheduleService,
|
||||
ProvideScheduleSyncService,
|
||||
ProvideGroupService,
|
||||
ProvideUploadService,
|
||||
)
|
||||
@@ -168,6 +171,15 @@ func ProvideScheduleService(
|
||||
return service.NewScheduleService(scheduleRepo)
|
||||
}
|
||||
|
||||
// ProvideScheduleSyncService 提供课表同步服务
|
||||
func ProvideScheduleSyncService(
|
||||
taskManager *runner.TaskManager,
|
||||
scheduleRepo repository.ScheduleRepository,
|
||||
logger *zap.Logger,
|
||||
) service.ScheduleSyncService {
|
||||
return service.NewScheduleSyncService(taskManager, scheduleRepo, logger)
|
||||
}
|
||||
|
||||
// ProvideGroupService 提供群组服务
|
||||
func ProvideGroupService(
|
||||
db *gorm.DB,
|
||||
|
||||
Reference in New Issue
Block a user