go-genappevent

command module
v0.0.0-...-c34678f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 26, 2019 License: MIT Imports: 4 Imported by: 0

README

go-genappevent

Application Event generator for Go.

Feature

  • Generate application event struct
  • Generate publisher in application layer
  • Generate subscriber in application layer
  • Generate publisher in external layer
  • Generate subscriber in external layer
  • Generate multi publisher in external layer
  • Generate publisher in adapter layer (Using external layer publisher and implemented application layer publisher)
  • Generate subscriber in adapter layer (Using external layer subscriber and implemented application layer subscriber)
  • Custom template

Usage

    //events {EventName}[,paramName paramType]...

with go generate command

    //go:generate go-genappevent {templateName} {dstFileName} [recommendImportPackagePath]...

recommendImportPackagePath is used for import resolution in generated code.

generated Event and Publisher usage sample is following

type Opener struct {
	repository     ShopRepository
	eventPublisher ShopOpenedEventPublisher
	logger         *zap.Logger
}

func (y Opener) Open(
	ctx context.Context,
	operator OperatorDescriptor,
	shopID domain.ShopID,
) domain.Error {

	// TODO: authorization

	shop, version, err := y.repository.FindByID(ctx, shopID)
	if err != nil {
		return err
	}

	if err := shop.Open(); err != nil {
		return err
	}

	if err := y.repository.Update(ctx, shop, version); err != nil {
		return err
	}

	go func() {
		//event ShopOpened,shopID domain.ShopID,operatorID string,operatorType string
		event := NewShopOpenedEvent(
			time.Now(),
			shopID,
			operator.ID(),
			operator.Typ(),
		)
		for err := range y.eventPublisher.PublishShopOpenedEvent(context.Background(), event) {
			y.logger.Error(
				"failed to publish event",
				zap.String("eventName", event.EventName()),
				zap.Any("event", event),
				zaperr.ToField(err),
			)
		}
	}()

	return nil
}
Example

def

generated

Installation

$ go get github.com/hori-ryota/go-genappevent

Documentation

Overview

```go

//events {EventName}[,paramName paramType]...

```

with `go generate` command

```go

//go:generate go-genappevent {templateName} {dstFileName} [recommendImportPackagePath]...

```

`recommendImportPackagePath` is used for import resolution in generated code.

Directories

Path Synopsis
_example

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL