API extensions: Route listerens (#887)

This commit is contained in:
Denis Makogon
2018-03-26 20:25:13 +03:00
committed by Reed Allman
parent 7810b3cb9b
commit 6393cf6777
4 changed files with 140 additions and 2 deletions

View File

@@ -6,16 +6,18 @@ import (
"github.com/fnproject/fn/api/models"
)
func NewDatastore(ds models.Datastore, al AppListener) models.Datastore {
func NewDatastore(ds models.Datastore, al AppListener, rl RouteListener) models.Datastore {
return &extds{
Datastore: ds,
al: al,
rl: rl,
}
}
type extds struct {
models.Datastore
al AppListener
rl RouteListener
}
func (e *extds) GetApp(ctx context.Context, appName string) (*models.App, error) {
@@ -93,3 +95,45 @@ func (e *extds) GetApps(ctx context.Context, filter *models.AppFilter) ([]*model
err = e.al.AfterAppsList(ctx, apps)
return apps, err
}
func (e *extds) InsertRoute(ctx context.Context, route *models.Route) (*models.Route, error) {
err := e.rl.BeforeRouteCreate(ctx, route)
if err != nil {
return nil, err
}
route, err = e.Datastore.InsertRoute(ctx, route)
if err != nil {
return nil, err
}
err = e.rl.AfterRouteCreate(ctx, route)
return route, err
}
func (e *extds) UpdateRoute(ctx context.Context, route *models.Route) (*models.Route, error) {
err := e.rl.BeforeRouteUpdate(ctx, route)
if err != nil {
return nil, err
}
route, err = e.Datastore.UpdateRoute(ctx, route)
if err != nil {
return nil, err
}
err = e.rl.AfterRouteUpdate(ctx, route)
return route, err
}
func (e *extds) RemoveRoute(ctx context.Context, appName string, routePath string) error {
err := e.rl.BeforeRouteDelete(ctx, appName, routePath)
if err != nil {
return err
}
err = e.Datastore.RemoveRoute(ctx, appName, routePath)
if err != nil {
return err
}
return e.rl.AfterRouteDelete(ctx, appName, routePath)
}

View File

@@ -41,6 +41,21 @@ type AppListener interface {
// }
}
type RouteListener interface {
// BeforeRouteCreate called before route created in the datastore
BeforeRouteCreate(ctx context.Context, route *models.Route) error
// AfterRouteCreate called after route create in the datastore
AfterRouteCreate(ctx context.Context, route *models.Route) error
// BeforeRouteUpdate called before route update in datastore
BeforeRouteUpdate(ctx context.Context, route *models.Route) error
// AfterRouteUpdate called after route updated in datastore
AfterRouteUpdate(ctx context.Context, route *models.Route) error
// BeforeRouteDelete called before route deleted from the datastore
BeforeRouteDelete(ctx context.Context, appName string, routePath string) error
// AfterRouteDelete called after route deleted from the datastore
AfterRouteDelete(ctx context.Context, appName string, routePath string) error
}
// CallListener enables callbacks around Call events
type CallListener interface {
// BeforeCall called before a function is executed