55 lines
1.6 KiB
Go
55 lines
1.6 KiB
Go
package common
|
|
|
|
import "context"
|
|
|
|
type (
|
|
DatabaseEntityType string
|
|
OperationType string
|
|
PayloadFilterFunc func(ChangePayload) bool
|
|
)
|
|
|
|
const (
|
|
RepositoryEntityType DatabaseEntityType = "repository"
|
|
OrganizationEntityType DatabaseEntityType = "organization"
|
|
EnterpriseEntityType DatabaseEntityType = "enterprise"
|
|
PoolEntityType DatabaseEntityType = "pool"
|
|
UserEntityType DatabaseEntityType = "user"
|
|
InstanceEntityType DatabaseEntityType = "instance"
|
|
JobEntityType DatabaseEntityType = "job"
|
|
ControllerEntityType DatabaseEntityType = "controller"
|
|
GithubCredentialsEntityType DatabaseEntityType = "github_credentials" // #nosec G101
|
|
GiteaCredentialsEntityType DatabaseEntityType = "gitea_credentials" // #nosec G101
|
|
GithubEndpointEntityType DatabaseEntityType = "github_endpoint"
|
|
ScaleSetEntityType DatabaseEntityType = "scaleset"
|
|
)
|
|
|
|
const (
|
|
CreateOperation OperationType = "create"
|
|
UpdateOperation OperationType = "update"
|
|
DeleteOperation OperationType = "delete"
|
|
)
|
|
|
|
type ChangePayload struct {
|
|
EntityType DatabaseEntityType `json:"entity-type"`
|
|
Operation OperationType `json:"operation"`
|
|
Payload interface{} `json:"payload"`
|
|
}
|
|
|
|
type Consumer interface {
|
|
Watch() <-chan ChangePayload
|
|
IsClosed() bool
|
|
Close()
|
|
SetFilters(filters ...PayloadFilterFunc)
|
|
}
|
|
|
|
type Producer interface {
|
|
Notify(ChangePayload) error
|
|
IsClosed() bool
|
|
Close()
|
|
}
|
|
|
|
type Watcher interface {
|
|
RegisterProducer(ctx context.Context, ID string) (Producer, error)
|
|
RegisterConsumer(ctx context.Context, ID string, filters ...PayloadFilterFunc) (Consumer, error)
|
|
Close()
|
|
}
|