file-system/cmd/server/wire_gen.go
向宁 11315fd00b feat: wire Watermill CQRS — EventBus in usecases, event handlers, router lifecycle
- Add EventPublisher interface in biz layer for domain event publishing
- Wire EventBusPublisher (Watermill EventBus adapter) into FileUsecase, FolderUsecase, ShareUsecase
- Publish events after UploadFile, DeleteFile, CreateFolder, DeleteFolder, CreateShare
- Implement CQRSHandler with logging event handlers for all 6 event types
- Register event handlers via CQRSBus.RegisterHandlers using Watermill EventProcessor
- Store subscriber and wmLogger in CQRSBus for EventProcessor wiring
- Expose SqlDB() on Data struct for Watermill SQL pub/sub
- Start Watermill router in goroutine alongside Kratos app with graceful close
- Use appContext wrapper struct to pass CQRSBus through Wire DI graph
2026-05-25 13:52:05 +08:00

101 lines
3.2 KiB
Go

// Code generated by Wire. DO NOT EDIT.
//go:generate go run -mod=mod github.com/google/wire/cmd/wire
//go:build !wireinject
// +build !wireinject
package main
import (
"database/sql"
"github.com/go-kratos/kratos/v2"
"github.com/go-kratos/kratos/v2/log"
"github.com/go-kratos/kratos/v2/transport/grpc"
"github.com/go-kratos/kratos/v2/transport/http"
"rag/file-system/internal/biz"
"rag/file-system/internal/conf"
"rag/file-system/internal/data"
"rag/file-system/internal/server"
"rag/file-system/internal/service"
"rag/file-system/internal/watermark"
)
// Injectors from wire.go:
// initApp wires up the entire dependency graph.
func initApp(bootstrap *conf.Bootstrap, logger log.Logger) (*appContext, func(), error) {
confServer := newConfServer(bootstrap)
auth := newConfAuth(bootstrap)
confData := newConfData(bootstrap)
fileRepo := data.NewFileRepo(confData)
dataData, cleanup, err := data.NewData(confData, logger)
if err != nil {
return nil, nil, err
}
db, err := newSQLDB(dataData)
if err != nil {
cleanup()
return nil, nil, err
}
cqrsHandler := watermark.NewCQRSHandler(logger)
cqrsBus, err := watermark.NewCQRSBusWithHandlers(db, cqrsHandler, logger)
if err != nil {
cleanup()
return nil, nil, err
}
eventBusPublisher := watermark.NewEventBusPublisher(cqrsBus)
fileUsecase := biz.NewFileUsecase(fileRepo, eventBusPublisher, logger)
bucketUsecase := biz.NewBucketUsecase(fileRepo, logger)
folderRepo := data.NewFolderRepo(dataData, logger)
fileMetaRepo := data.NewFileMetaRepo(dataData, logger)
folderUsecase := biz.NewFolderUsecase(folderRepo, fileMetaRepo, fileRepo, eventBusPublisher, logger)
shareRepo := data.NewShareRepo(dataData, logger)
shareUsecase := biz.NewShareUsecase(shareRepo, fileMetaRepo, fileRepo, eventBusPublisher, logger)
fileService := service.NewFileService(fileUsecase, bucketUsecase, folderUsecase, shareUsecase, logger)
httpServer := server.NewHTTPServer(confServer, auth, fileService, logger)
grpcServer := server.NewGRPCServer(confServer, auth, fileService, logger)
app := newApp(logger, httpServer, grpcServer)
mainAppContext := newAppContext(app, cqrsBus)
return mainAppContext, func() {
cleanup()
}, nil
}
// wire.go:
// appContext holds the Kratos app and CQRS bus together for Wire.
type appContext struct {
App *kratos.App
CQRSBus *watermark.CQRSBus
}
// newApp creates a new Kratos application with HTTP and gRPC servers.
func newApp(logger log.Logger, hs *http.Server, gs *grpc.Server) *kratos.App {
return kratos.New(kratos.Name("file-system"), kratos.Logger(logger), kratos.Server(hs, gs))
}
// newAppContext wraps the app and CQRSBus into an appContext.
func newAppContext(app *kratos.App, bus *watermark.CQRSBus) *appContext {
return &appContext{App: app, CQRSBus: bus}
}
// newConfServer extracts the Server config from Bootstrap.
func newConfServer(bc *conf.Bootstrap) *conf.Server {
return bc.GetServer()
}
// newConfData extracts the Data config from Bootstrap.
func newConfData(bc *conf.Bootstrap) *conf.Data {
return bc.GetData()
}
// newConfAuth extracts the Auth config from Bootstrap.
func newConfAuth(bc *conf.Bootstrap) *conf.Auth {
return bc.GetAuth()
}
// newSQLDB extracts the underlying *sql.DB from Data for Watermill.
func newSQLDB(d *data.Data) (*sql.DB, error) {
return d.SqlDB()
}