Getting Started¶
Install¶
go get github.com/GettEngineering/effe/cmd/effe
Create new project¶
mkdir example && cd example
go mod init github.com/example/example
Create repositories/structs¶
repositories.go¶
package mypackage import ( "context" ) type UserRepository interface { Create(context.Context, User) error }
structs.go¶
package mypackage type User struct { Email string Password string } type UserAttributes struct { Email string Password string }
Create steps¶
steps.go¶
package mypackage import ( "context" ) func buildUser() func(UserAttributes) User { return func(uAttrs UserAttributes) User { return User{ Email: uAttrs.Email, Password: uAttrs.Password, } } } func createUser(userRepo UserRepository) func(context.Context, User) error { return func(ctx context.Context, user User) error { return userRepo.Create(ctx, user) } }
Define Workflow¶
effe.go¶
// +build effeinject package mypackage import ( "github.com/GettEngineering/effe" ) func BuildCreateUserFlow(uAttrs UserAttributes) error { effe.BuildFlow( effe.Step(buildUser), effe.Step(createUser), ) return nil }
Generate flow¶
run effe
command
$ effe effe: wrote /app/effe_gen.go
effe_gen.go¶
// Code generated by Effe. DO NOT EDIT. //+build !effeinject package mypackage import ( "context" "fmt" "github.com/example/example" ) func BuildCreateUserFlow(service BuildCreateUserFlowService) BuildCreateUserFlowFunc { return func(ctx context.Context, UserAttributesVal UserAttributes) error { UserVal := service.BuildUser(UserAttributesVal) err := service.CreateUser(ctx, UserVal) if err != nil { return err } return nil } } func NewBuildCreateUserFlowImpl(userRepo UserRepository) *BuildCreateUserFlowImpl { return &BuildCreateUserFlowImpl{buildUserFieldFunc: buildUser(), createUserFieldFunc: createUser(userRepo)} } type BuildCreateUserFlowService interface { BuildUser(uAttrs UserAttributes) User CreateUser(ctx context.Context, user User) error } type BuildCreateUserFlowImpl struct { buildUserFieldFunc func(uAttrs UserAttributes) User createUserFieldFunc func(ctx context.Context, user User) error } type BuildCreateUserFlowFunc func(ctx context.Context, UserAttributesVal UserAttributes) error func (b *BuildCreateUserFlowImpl) BuildUser(uAttrs UserAttributes) User { return b.buildUserFieldFunc(uAttrs) } func (b *BuildCreateUserFlowImpl) CreateUser(ctx context.Context, user User) error { return b.createUserFieldFunc(ctx, user) }