package database import ( "io" "time" proto "git.xeserv.us/xena/route/proto" "github.com/Xe/ln" "golang.org/x/net/context" ) // Routes is the set of API calls needed to manage Route resources. // // Database backends should implement this interface. type Routes interface { io.Closer Get(ctx context.Context, id string) (Route, error) GetHost(ctx context.Context, host string) (Route, error) GetAll(ctx context.Context, user string) ([]Route, error) Put(ctx context.Context, r Route) (Route, error) Delete(ctx context.Context, r Route) (Route, error) } // Route is a single HTTP route. type Route struct { ID string `storm:"id"` Creator string Hostname string `storm:"unique"` CreatedAt time.Time EditedAt time.Time Active bool } // F https://godoc.org/github.com/Xe/ln#F func (r Route) F() ln.F { return ln.F{ "route-id": r.ID, "route-creator": r.Creator, "route-hostname": r.Hostname, } } func (r *Route) Scan(row Scanner) error { return row.Scan(&r.ID, &r.Creator, &r.Hostname, &r.CreatedAt, &r.EditedAt, &r.Active) } // AsProto converts this into a protobuf Route. func (r Route) AsProto() *proto.Route { return &proto.Route{ Id: r.ID, Creator: r.Creator, Host: r.Hostname, } }