- 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
55 lines
1.8 KiB
Go
55 lines
1.8 KiB
Go
package watermark
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/go-kratos/kratos/v2/log"
|
|
)
|
|
|
|
// CQRSHandler holds all Watermill event handlers.
|
|
type CQRSHandler struct {
|
|
log *log.Helper
|
|
}
|
|
|
|
// NewCQRSHandler creates a new CQRSHandler.
|
|
func NewCQRSHandler(logger log.Logger) *CQRSHandler {
|
|
return &CQRSHandler{log: log.NewHelper(logger)}
|
|
}
|
|
|
|
// OnFileUploaded handles the FileUploadedEvent.
|
|
func (h *CQRSHandler) OnFileUploaded(ctx context.Context, event *FileUploadedEvent) error {
|
|
h.log.Infof("event: file uploaded, bucket=%s key=%s size=%d", event.BucketName, event.ObjectKey, event.Size)
|
|
return nil
|
|
}
|
|
|
|
// OnFileDeleted handles the FileDeletedEvent.
|
|
func (h *CQRSHandler) OnFileDeleted(ctx context.Context, event *FileDeletedEvent) error {
|
|
h.log.Infof("event: file deleted, bucket=%s key=%s", event.BucketName, event.ObjectKey)
|
|
return nil
|
|
}
|
|
|
|
// OnFolderCreated handles the FolderCreatedEvent.
|
|
func (h *CQRSHandler) OnFolderCreated(ctx context.Context, event *FolderCreatedEvent) error {
|
|
h.log.Infof("event: folder created, id=%s name=%s owner=%s", event.FolderID, event.Name, event.OwnerID)
|
|
return nil
|
|
}
|
|
|
|
// OnFolderDeleted handles the FolderDeletedEvent.
|
|
func (h *CQRSHandler) OnFolderDeleted(ctx context.Context, event *FolderDeletedEvent) error {
|
|
h.log.Infof("event: folder deleted, id=%s owner=%s", event.FolderID, event.OwnerID)
|
|
return nil
|
|
}
|
|
|
|
// OnShareCreated handles the ShareCreatedEvent.
|
|
func (h *CQRSHandler) OnShareCreated(ctx context.Context, event *ShareCreatedEvent) error {
|
|
h.log.Infof("event: share created, id=%s token=%s resource=%s/%s by=%s",
|
|
event.ShareID, event.Token, event.ResourceType, event.ResourceID, event.CreatedBy)
|
|
return nil
|
|
}
|
|
|
|
// OnShareDownloaded handles the ShareDownloadedEvent.
|
|
func (h *CQRSHandler) OnShareDownloaded(ctx context.Context, event *ShareDownloadedEvent) error {
|
|
h.log.Infof("event: share downloaded, token=%s", event.Token)
|
|
return nil
|
|
}
|