/* ------------------------------------------------------------------------------------------------------------------------ ####### api ####### Copyright (c) 2021 mls-361 ##################################################### MIT License ####### ------------------------------------------------------------------------------------------------------------------------ */ package api import ( "errors" "expvar" "net/http" "forge.chapril.org/armen/jw" "forge.chapril.org/armen/model" "forge.chapril.org/mls-361/jsonapi" "forge.chapril.org/armen/armen/internal/components" ) const ( _maxBodySize = 1024 * 32 ) type api struct { logger components.Logger model components.Model } func newAPI(logger components.Logger, model components.Model) *api { return &api{ logger: logger, model: model, } } func (api *api) createJob(rw http.ResponseWriter, r *http.Request) { job := new(jw.Job) if jsonapi.Decode(rw, r, _maxBodySize, job) != nil { return } done, err := api.model.CreateJob(job) if err != nil { if errors.Is(err, model.ErrValidation) { jsonapi.BadRequest(rw, err) } else { jsonapi.InternalServerError(rw, err) } return } if done { jsonapi.Render(rw, r, job, api.logger) return } rw.WriteHeader(http.StatusOK) } func Build(logger components.Logger, router components.Router, model components.Model) { api := newAPI(logger, model) router.Get("/debug", expvar.Handler()) router.Get("/status", http.HandlerFunc(func(rw http.ResponseWriter, _ *http.Request) { rw.WriteHeader(http.StatusOK) })) router.Post("/job/create", http.HandlerFunc(api.createJob)) } /* ######################################################################################################## @(°_°)@ ####### */