This repository has been archived on 2020-08-21. You can view files and clone it, but cannot push or open issues or pull requests.
filicop/server/api/fleet.go

63 lines
1.8 KiB
Go

package api
import (
"encoding/json"
"errors"
"strconv"
"git.nemunai.re/filicop/server/models"
"github.com/julienschmidt/httprouter"
)
func init() {
router.GET("/fleets/", apiHandler(func (_ httprouter.Params, body []byte) (interface{}, error) {
return filicop.GetFleets()
}))
router.POST("/fleets/", apiHandler(newFleet))
router.DELETE("/fleets/", apiHandler(func (_ httprouter.Params, _ []byte) (interface{}, error) {
return filicop.ClearFleets()
}))
router.GET("/fleets/:fid", apiHandler(fleetHandler(func (fleet filicop.Fleet, _ []byte) (interface{}, error) {
return fleet, nil
})))
router.PUT("/fleets/:fid", apiHandler(fleetHandler(updateFleet)))
router.DELETE("/fleets/:fid", apiHandler(fleetHandler(func (fleet filicop.Fleet, _ []byte) (interface{}, error) {
return fleet.Delete()
})))
}
func fleetHandler(f func(filicop.Fleet, []byte) (interface{}, error)) func(httprouter.Params, []byte) (interface{}, error) {
return func(ps httprouter.Params, body []byte) (interface{}, error) {
if fid, err := strconv.ParseInt(string(ps.ByName("fid")), 10, 64); err != nil {
return nil, err
} else if fleet, err := filicop.GetFleet(fid); err != nil {
return nil, err
} else {
return f(fleet, body)
}
}
}
func parseFleetJSON(body []byte, next func (filicop.Fleet) (filicop.Fleet, error)) (filicop.Fleet, error) {
var uf filicop.Fleet
if err := json.Unmarshal(body, &uf); err != nil {
return uf, err
}
if len(uf.Label) == 0 {
return uf, errors.New("Fleet's label cannot be empty")
}
return next(uf)
}
func newFleet(_ httprouter.Params, body []byte) (interface{}, error) {
return parseFleetJSON(body, filicop.NewFleet)
}
func updateFleet(fleet filicop.Fleet, body []byte) (interface{}, error) {
return parseFleetJSON(body, fleet.Update)
}