route/internal/database/route.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,
}
}