github.com/iron-io/functions@v0.0.0-20180820112432-d59d7d1c40b2/api/datastore/internal/datastoreutil/validator.go (about) 1 package datastoreutil 2 3 import ( 4 "context" 5 6 "github.com/iron-io/functions/api/models" 7 ) 8 9 // Datastore is a copy of models.Datastore, with additional comments on parameter guarantees. 10 type Datastore interface { 11 // name will never be empty. 12 GetApp(ctx context.Context, name string) (*models.App, error) 13 14 GetApps(ctx context.Context, appFilter *models.AppFilter) ([]*models.App, error) 15 16 // app and app.Name will never be nil/empty. 17 InsertApp(ctx context.Context, app *models.App) (*models.App, error) 18 UpdateApp(ctx context.Context, app *models.App) (*models.App, error) 19 20 // name will never be empty. 21 RemoveApp(ctx context.Context, name string) error 22 23 // appName and routePath will never be empty. 24 GetRoute(ctx context.Context, appName, routePath string) (*models.Route, error) 25 RemoveRoute(ctx context.Context, appName, routePath string) error 26 27 GetRoutes(ctx context.Context, filter *models.RouteFilter) (routes []*models.Route, err error) 28 29 // appName will never be empty 30 GetRoutesByApp(ctx context.Context, appName string, filter *models.RouteFilter) (routes []*models.Route, err error) 31 32 // route will never be nil and route's AppName and Path will never be empty. 33 InsertRoute(ctx context.Context, route *models.Route) (*models.Route, error) 34 UpdateRoute(ctx context.Context, route *models.Route) (*models.Route, error) 35 36 // key will never be nil/empty 37 Put(ctx context.Context, key, val []byte) error 38 Get(ctx context.Context, key []byte) ([]byte, error) 39 } 40 41 // NewValidator returns a models.Datastore which validates certain arguments before delegating to ds. 42 func NewValidator(ds Datastore) models.Datastore { 43 return &validator{ds} 44 } 45 46 type validator struct { 47 ds Datastore 48 } 49 50 func (v *validator) GetApp(ctx context.Context, name string) (app *models.App, err error) { 51 if name == "" { 52 return nil, models.ErrDatastoreEmptyAppName 53 } 54 return v.ds.GetApp(ctx, name) 55 } 56 57 func (v *validator) GetApps(ctx context.Context, appFilter *models.AppFilter) ([]*models.App, error) { 58 return v.ds.GetApps(ctx, appFilter) 59 } 60 61 func (v *validator) InsertApp(ctx context.Context, app *models.App) (*models.App, error) { 62 if app == nil { 63 return nil, models.ErrDatastoreEmptyApp 64 } 65 if app.Name == "" { 66 return nil, models.ErrDatastoreEmptyAppName 67 } 68 69 return v.ds.InsertApp(ctx, app) 70 } 71 72 func (v *validator) UpdateApp(ctx context.Context, app *models.App) (*models.App, error) { 73 if app == nil { 74 return nil, models.ErrDatastoreEmptyApp 75 } 76 if app.Name == "" { 77 return nil, models.ErrDatastoreEmptyAppName 78 } 79 return v.ds.UpdateApp(ctx, app) 80 } 81 82 func (v *validator) RemoveApp(ctx context.Context, name string) error { 83 if name == "" { 84 return models.ErrDatastoreEmptyAppName 85 } 86 87 return v.ds.RemoveApp(ctx, name) 88 } 89 90 func (v *validator) GetRoute(ctx context.Context, appName, routePath string) (*models.Route, error) { 91 if appName == "" { 92 return nil, models.ErrDatastoreEmptyAppName 93 } 94 if routePath == "" { 95 return nil, models.ErrDatastoreEmptyRoutePath 96 } 97 98 return v.ds.GetRoute(ctx, appName, routePath) 99 } 100 101 func (v *validator) GetRoutes(ctx context.Context, routeFilter *models.RouteFilter) (routes []*models.Route, err error) { 102 if routeFilter != nil && routeFilter.AppName != "" { 103 return v.ds.GetRoutesByApp(ctx, routeFilter.AppName, routeFilter) 104 } 105 106 return v.ds.GetRoutes(ctx, routeFilter) 107 } 108 109 func (v *validator) GetRoutesByApp(ctx context.Context, appName string, routeFilter *models.RouteFilter) (routes []*models.Route, err error) { 110 if appName == "" { 111 return nil, models.ErrDatastoreEmptyAppName 112 } 113 return v.ds.GetRoutesByApp(ctx, appName, routeFilter) 114 } 115 116 func (v *validator) InsertRoute(ctx context.Context, route *models.Route) (*models.Route, error) { 117 if route == nil { 118 return nil, models.ErrDatastoreEmptyRoute 119 } 120 if route.AppName == "" { 121 return nil, models.ErrDatastoreEmptyAppName 122 } 123 if route.Path == "" { 124 return nil, models.ErrDatastoreEmptyRoutePath 125 } 126 127 return v.ds.InsertRoute(ctx, route) 128 } 129 130 func (v *validator) UpdateRoute(ctx context.Context, newroute *models.Route) (*models.Route, error) { 131 if newroute == nil { 132 return nil, models.ErrDatastoreEmptyRoute 133 } 134 if newroute.AppName == "" { 135 return nil, models.ErrDatastoreEmptyAppName 136 } 137 if newroute.Path == "" { 138 return nil, models.ErrDatastoreEmptyRoutePath 139 } 140 return v.ds.UpdateRoute(ctx, newroute) 141 } 142 143 func (v *validator) RemoveRoute(ctx context.Context, appName, routePath string) error { 144 if appName == "" { 145 return models.ErrDatastoreEmptyAppName 146 } 147 if routePath == "" { 148 return models.ErrDatastoreEmptyRoutePath 149 } 150 151 return v.ds.RemoveRoute(ctx, appName, routePath) 152 } 153 154 func (v *validator) Put(ctx context.Context, key, value []byte) error { 155 if len(key) == 0 { 156 return models.ErrDatastoreEmptyKey 157 } 158 159 return v.ds.Put(ctx, key, value) 160 } 161 162 func (v *validator) Get(ctx context.Context, key []byte) ([]byte, error) { 163 if len(key) == 0 { 164 return nil, models.ErrDatastoreEmptyKey 165 } 166 return v.ds.Get(ctx, key) 167 }