mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
replace default bolt option with sqlite3 option. the story here is that we just need a working out of the box solution, and sqlite3 is just fine for that (actually, likely better than bolt). with sqlite3 supplanting bolt, we mostly have sql databases. so remove redis and then we just have one package that has a `sql` implementation of the `models.Datastore` and lean on sqlx to do query rewriting. this does mean queries have to be formed a certain way and likely have to be ANSI-SQL (no special features) but we weren't using them anyway and our base api is basically done and we can easily extend this api as needed to only implement certain methods in certain backends if we need to get cute. * remove bolt & redis datastores (can still use as mqs) * make sql queries work on all 3 (maybe?) * remove bolt log store and use sqlite3 * shove the FnLog shit into the datastore shit for now (free pg/mysql logs... just for demos, etc, not prod) * fix up the docs to remove bolt references * add sqlite3, sqlx dep * fix up tests & mock stuff, make validator less insane * remove put & get in datastore layer as nobody is using. this passes tests which at least seem like they test all the different backends. if we trust our tests then this seems to work great. (tests `make docker-test-run-with-*` work now too)
77 lines
3.5 KiB
Go
77 lines
3.5 KiB
Go
package models
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
)
|
|
|
|
type Datastore interface {
|
|
// GetApp gets an App by name.
|
|
// Returns ErrDatastoreEmptyAppName for empty appName.
|
|
// Returns ErrAppsNotFound if no app is found.
|
|
GetApp(ctx context.Context, appName string) (*App, error)
|
|
|
|
// GetApps gets a slice of Apps, optionally filtered by name.
|
|
// Missing filter or empty name will match all Apps.
|
|
GetApps(ctx context.Context, filter *AppFilter) ([]*App, error)
|
|
|
|
// InsertApp inserts an App. Returns ErrDatastoreEmptyApp when app is nil, and
|
|
// ErrDatastoreEmptyAppName when app.Name is empty.
|
|
// Returns ErrAppsAlreadyExists if an App by the same name already exists.
|
|
InsertApp(ctx context.Context, app *App) (*App, error)
|
|
|
|
// UpdateApp updates an App's Config. Returns ErrDatastoreEmptyApp when app is nil, and
|
|
// ErrDatastoreEmptyAppName when app.Name is empty.
|
|
// Returns ErrAppsNotFound if an App is not found.
|
|
UpdateApp(ctx context.Context, app *App) (*App, error)
|
|
|
|
// RemoveApp removes the App named appName. Returns ErrDatastoreEmptyAppName if appName is empty.
|
|
// Returns ErrAppsNotFound if an App is not found.
|
|
// TODO remove routes automatically? #528
|
|
RemoveApp(ctx context.Context, appName string) error
|
|
|
|
// GetRoute looks up a matching Route for appName and the literal request route routePath.
|
|
// Returns ErrDatastoreEmptyAppName when appName is empty, and ErrDatastoreEmptyRoutePath when
|
|
// routePath is empty.
|
|
// Returns ErrRoutesNotFound when no matching route is found.
|
|
GetRoute(ctx context.Context, appName, routePath string) (*Route, error)
|
|
|
|
// GetRoutes gets a slice of Routes, optionally filtered by filter.
|
|
GetRoutes(ctx context.Context, filter *RouteFilter) (routes []*Route, err error)
|
|
|
|
// GetRoutesByApp gets a slice of routes for a appName, optionally filtering on filter (filter.AppName is ignored).
|
|
// Returns ErrDatastoreEmptyAppName if appName is empty.
|
|
GetRoutesByApp(ctx context.Context, appName string, filter *RouteFilter) (routes []*Route, err error)
|
|
|
|
// InsertRoute inserts a route. Returns ErrDatastoreEmptyRoute when route is nil, and ErrDatastoreEmptyAppName
|
|
// or ErrDatastoreEmptyRoutePath for empty AppName or Path.
|
|
// Returns ErrRoutesAlreadyExists if the exact route.Path already exists, or ErrRoutesCreate if a conflicting
|
|
// route already exists.
|
|
InsertRoute(ctx context.Context, route *Route) (*Route, error)
|
|
|
|
// UpdateRoute updates route's Config and Header fields. Returns ErrDatastoreEmptyRoute when route is nil, and
|
|
// ErrDatastoreEmptyAppName or ErrDatastoreEmptyRoutePath for empty AppName or Path.
|
|
UpdateRoute(ctx context.Context, route *Route) (*Route, error)
|
|
|
|
// RemoveRoute removes a route. Returns ErrDatastoreEmptyAppName when appName is empty, and
|
|
// ErrDatastoreEmptyRoutePath when routePath is empty. Returns ErrRoutesNotFound when no route exists.
|
|
RemoveRoute(ctx context.Context, appName, routePath string) error
|
|
|
|
// InsertTask inserts a task
|
|
InsertTask(ctx context.Context, task *Task) error
|
|
GetTask(ctx context.Context, callID string) (*FnCall, error)
|
|
GetTasks(ctx context.Context, filter *CallFilter) (FnCalls, error)
|
|
|
|
// Implement FnLog methods for convenience
|
|
FnLog
|
|
}
|
|
|
|
var (
|
|
ErrDatastoreEmptyAppName = errors.New("Missing app name")
|
|
ErrDatastoreEmptyRoutePath = errors.New("Missing route name")
|
|
ErrDatastoreEmptyApp = errors.New("Missing app")
|
|
ErrDatastoreEmptyRoute = errors.New("Missing route")
|
|
ErrDatastoreEmptyKey = errors.New("Missing key")
|
|
ErrDatastoreEmptyTaskID = errors.New("Missing task ID")
|
|
)
|