57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
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,
|
|
}
|
|
}
|