nidus-sync/resource/site.go

55 lines
1.4 KiB
Go

package resource
import (
"context"
"net/http"
"strconv"
nhttp "github.com/Gleipnir-Technology/nidus-sync/http"
"github.com/Gleipnir-Technology/nidus-sync/platform"
"github.com/Gleipnir-Technology/nidus-sync/platform/types"
//"github.com/aarondl/opt/null"
"github.com/gorilla/mux"
)
type siteR struct {
router *router
}
func Site(r *router) *siteR {
return &siteR{
router: r,
}
}
func (res *siteR) ByIDGet(ctx context.Context, r *http.Request, user platform.User, query QueryParams) (*types.Site, *nhttp.ErrorWithStatus) {
vars := mux.Vars(r)
id_str := vars["id"]
id, err := strconv.Atoi(id_str)
if err != nil {
return nil, nhttp.NewBadRequest("'%s' is not a valid site ID: %w", id_str, err)
}
site, err := platform.SiteByID(ctx, user, int32(id))
if err != nil {
return nil, nhttp.NewError("site by id: %w", err)
}
return site, nil
}
func (res *siteR) List(ctx context.Context, r *http.Request, user platform.User, query QueryParams) ([]*types.Site, *nhttp.ErrorWithStatus) {
limit := 1000
if query.Limit != nil {
limit = *query.Limit
}
sites, err := platform.SiteList(ctx, user, limit)
if err != nil {
return nil, nhttp.NewError("list signals: %w", err)
}
for _, site := range sites {
uri, err := res.router.IDToURI("site.ByIDGet", int(site.ID))
if err != nil {
return nil, nhttp.NewError("set uri: %w", err)
}
site.URI = uri
}
return sites, nil
}