- 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
66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"os"
|
|
|
|
"rag/file-system/internal/conf"
|
|
|
|
"github.com/go-kratos/kratos/v2/config"
|
|
fileconfig "github.com/go-kratos/kratos/v2/config/file"
|
|
"github.com/go-kratos/kratos/v2/log"
|
|
)
|
|
|
|
var (
|
|
flagconf string
|
|
)
|
|
|
|
func init() {
|
|
flag.StringVar(&flagconf, "conf", "configs/config.yaml", "config path, eg: -conf config.yaml")
|
|
}
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
|
|
logger := log.With(log.NewStdLogger(os.Stdout),
|
|
"ts", log.DefaultTimestamp,
|
|
"caller", log.DefaultCaller,
|
|
"service.kind", "file-system",
|
|
)
|
|
|
|
c := config.New(
|
|
config.WithSource(
|
|
fileconfig.NewSource(flagconf),
|
|
),
|
|
)
|
|
if err := c.Load(); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
var bc conf.Bootstrap
|
|
if err := c.Scan(&bc); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
ctx, cleanup, err := initApp(&bc, logger)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer cleanup()
|
|
|
|
// Start Watermill router alongside the Kratos app.
|
|
if ctx.CQRSBus != nil {
|
|
go func() {
|
|
if err := ctx.CQRSBus.Router.Run(context.Background()); err != nil {
|
|
logger.Log(log.LevelError, "msg", "watermill router error", "error", err)
|
|
}
|
|
}()
|
|
defer ctx.CQRSBus.Router.Close()
|
|
}
|
|
|
|
if err := ctx.App.Run(); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|