diff --git a/go.mod b/go.mod index 933a128..004038c 100644 --- a/go.mod +++ b/go.mod @@ -56,6 +56,7 @@ require ( github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sethvargo/go-retry v0.3.0 // indirect diff --git a/go.sum b/go.sum index 1b05325..cf253e0 100644 --- a/go.sum +++ b/go.sum @@ -167,13 +167,11 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogeecn/fabfile v1.4.0 h1:Rw7/7OH8cV4aRPw79Oa4hHHFKaC/ol+sNmGcB/usHaQ= github.com/rogeecn/fabfile v1.4.0/go.mod h1:EPwX7TtVcIWSLJkJAqxSzYjM/aV1Q0wymcaXqnMgzas= -github.com/rogeecn/swag v1.0.0 h1:PpoYWTywc/G4DR8MJKATCcxcz4D40J127XJjK0e3RUc= -github.com/rogeecn/swag v1.0.0/go.mod h1:flG2NXERPxlRl2VdpU2VXTO8iBnQiERyowOXSkZVMOc= github.com/rogeecn/swag v1.0.1 h1:s1yxLgopqO1m8sqGjVmt6ocMBRubMPIh2JtIPG4xjQE= github.com/rogeecn/swag v1.0.1/go.mod h1:flG2NXERPxlRl2VdpU2VXTO8iBnQiERyowOXSkZVMOc= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= diff --git a/pkg/ast/provider/provider.go b/pkg/ast/provider/provider.go index fce1f30..d925ee3 100644 --- a/pkg/ast/provider/provider.go +++ b/pkg/ast/provider/provider.go @@ -59,6 +59,14 @@ type Provider struct { ProviderFile string } +func atomPackage(suffix string) string { + root := gomod.GetModuleName() + "/pkg/atom" + if suffix != "" { + return fmt.Sprintf("%s/%s", root, suffix) + } + return root +} + func Parse(source string) []Provider { if strings.HasSuffix(source, "_test.go") { return []Provider{} @@ -256,8 +264,8 @@ func Parse(source string) []Provider { modePkg := gomod.GetModuleName() + "/providers/grpc" - provider.Imports["git.ipao.vip/rogeecn/atom"] = "" - provider.Imports["git.ipao.vip/rogeecn/atom/contracts"] = "" + provider.Imports[atomPackage("")] = "" + provider.Imports[atomPackage("contracts")] = "" provider.Imports[modePkg] = "" provider.ProviderGroup = "atom.GroupInitial" @@ -277,8 +285,8 @@ func Parse(source string) []Provider { modePkg := gomod.GetModuleName() + "/providers/event" - provider.Imports["git.ipao.vip/rogeecn/atom"] = "" - provider.Imports["git.ipao.vip/rogeecn/atom/contracts"] = "" + provider.Imports[atomPackage("")] = "" + provider.Imports[atomPackage("contracts")] = "" provider.Imports[modePkg] = "" provider.ProviderGroup = "atom.GroupInitial" @@ -297,8 +305,8 @@ func Parse(source string) []Provider { modePkg := gomod.GetModuleName() + "/providers/job" - provider.Imports["git.ipao.vip/rogeecn/atom"] = "" - provider.Imports["git.ipao.vip/rogeecn/atom/contracts"] = "" + provider.Imports[atomPackage("")] = "" + provider.Imports[atomPackage("contracts")] = "" provider.Imports["github.com/riverqueue/river"] = "" provider.Imports[modePkg] = "" diff --git a/pkg/ast/provider/render.go b/pkg/ast/provider/render.go index 0e33bb9..22c8536 100644 --- a/pkg/ast/provider/render.go +++ b/pkg/ast/provider/render.go @@ -23,8 +23,8 @@ func Render(filename string, conf []Provider) error { }() imports := map[string]string{ - "git.ipao.vip/rogeecn/atom/container": "", - "git.ipao.vip/rogeecn/atom/utils/opt": "", + atomPackage("container"): "", + atomPackage("opt"): "", } lo.ForEach(conf, func(item Provider, _ int) { for k, v := range item.Imports { diff --git a/templates/project/app/events/publishers/user_register.go.tpl b/templates/project/app/events/publishers/user_register.go.tpl new file mode 100644 index 0000000..88fc681 --- /dev/null +++ b/templates/project/app/events/publishers/user_register.go.tpl @@ -0,0 +1,22 @@ +package publishers + +import ( + "encoding/json" + + "{{.ModuleName}}/app/events" + "{{.ModuleName}}/pkg/atom/contracts" +) + +var _ contracts.EventPublisher = (*UserRegister)(nil) + +type UserRegister struct { + ID int64 `json:"id"` +} + +func (e *UserRegister) Marshal() ([]byte, error) { + return json.Marshal(e) +} + +func (e *UserRegister) Topic() string { + return events.TopicUserRegister +} diff --git a/templates/project/app/events/subscribers/user_register.go.tpl b/templates/project/app/events/subscribers/user_register.go.tpl new file mode 100644 index 0000000..f2dd2b1 --- /dev/null +++ b/templates/project/app/events/subscribers/user_register.go.tpl @@ -0,0 +1,46 @@ +package subscribers + +import ( + "encoding/json" + + "{{.ModuleName}}/app/events" + "{{.ModuleName}}/app/events/publishers" + "{{.ModuleName}}/pkg/atom/contracts" + + "github.com/ThreeDotsLabs/watermill/message" + "github.com/sirupsen/logrus" +) + +var _ contracts.EventHandler = (*UserRegister)(nil) + +// @provider(event) +type UserRegister struct { + log *logrus.Entry `inject:"false"` +} + +func (e *UserRegister) Prepare() error { + e.log = logrus.WithField("module", "events.subscribers.user_register") + return nil +} + +// PublishToTopic implements contracts.EventHandler. +func (e *UserRegister) PublishToTopic() string { + return events.TopicProcessed +} + +// Topic implements contracts.EventHandler. +func (e *UserRegister) Topic() string { + return events.TopicUserRegister +} + +// Handler implements contracts.EventHandler. +func (e *UserRegister) Handler(msg *message.Message) ([]*message.Message, error) { + var payload publishers.UserRegister + err := json.Unmarshal(msg.Payload, &payload) + if err != nil { + return nil, err + } + e.log.Infof("received event %s", msg.Payload) + + return nil, nil +} diff --git a/templates/project/app/events/topics.go.tpl b/templates/project/app/events/topics.go.tpl index 059cd0f..e2b777a 100644 --- a/templates/project/app/events/topics.go.tpl +++ b/templates/project/app/events/topics.go.tpl @@ -1,5 +1,6 @@ package events const ( - TopicProcessed = "event:processed" + TopicProcessed = "event:processed" + TopicUserRegister = "event:user_register" ) diff --git a/templates/project/app/service/event/event.go.tpl b/templates/project/app/service/event/event.go.tpl index ea7b3aa..647282d 100644 --- a/templates/project/app/service/event/event.go.tpl +++ b/templates/project/app/service/event/event.go.tpl @@ -3,7 +3,7 @@ package event import ( "context" - "{{.ModuleName}}/app/events" + "{{.ModuleName}}/app/events/subscribers" "{{.ModuleName}}/app/service" "{{.ModuleName}}/pkg/atom" "{{.ModuleName}}/pkg/atom/container" @@ -31,7 +31,7 @@ func Command() atom.Option { atom.Providers( defaultProviders(). With( - events.Provide, + subscribers.Provide, ), ), )