Documentation ¶
Index ¶
- Variables
- func EndDatedFilter[T pkg.EndDateable](r *http.Request) babyapi.FilterFunc[T]
- func ErrInvalidRequest(err error) render.Renderer
- func ErrRender(err error) render.Renderer
- func InternalServerError(err error) render.Renderer
- type AllGardensResponse
- type AllWaterSchedulesResponse
- type AllZonesResponse
- type Config
- type ErrResponse
- type GardenActionResponse
- type GardenResponse
- type GardensAPI
- type Link
- type LogConfig
- type NextLightAction
- type NextWaterDetails
- type RainData
- type Server
- type TemperatureData
- type TemperatureHumidityData
- type WaterScheduleResponse
- type WaterSchedulesAPI
- type WeatherClientResponse
- type WeatherClientTestResponse
- type WeatherClientsAPI
- type WeatherData
- type WebConfig
- type ZoneActionResponse
- type ZoneResponse
- type ZoneWaterHistoryResponse
- type ZonesAPI
Constants ¶
This section is empty.
Variables ¶
var ErrNotFoundResponse = &ErrResponse{HTTPStatusCode: 404, StatusText: "Resource not found."}
ErrNotFoundResponse is a basic error response for missing resource
Functions ¶
func EndDatedFilter ¶
func EndDatedFilter[T pkg.EndDateable](r *http.Request) babyapi.FilterFunc[T]
func ErrInvalidRequest ¶
ErrInvalidRequest creates a 400 ErrResponse for a bad request
func InternalServerError ¶
InternalServerError creates a generic 500 error for a server-side error
Types ¶
type AllGardensResponse ¶
type AllGardensResponse struct { babyapi.ResourceList[*GardenResponse] }
AllGardensResponse is a simple struct being used to render and return a list of all Gardens
func (AllGardensResponse) Render ¶
func (agr AllGardensResponse) Render(w http.ResponseWriter, r *http.Request) error
type AllWaterSchedulesResponse ¶
type AllWaterSchedulesResponse struct { babyapi.ResourceList[*WaterScheduleResponse] }
AllWaterSchedulesResponse is a simple struct being used to render and return a list of all WaterSchedules
func (AllWaterSchedulesResponse) HTML ¶
func (aws AllWaterSchedulesResponse) HTML(r *http.Request) string
func (AllWaterSchedulesResponse) Render ¶
func (aws AllWaterSchedulesResponse) Render(w http.ResponseWriter, r *http.Request) error
type AllZonesResponse ¶
type AllZonesResponse struct { babyapi.ResourceList[*ZoneResponse] // contains filtered or unexported fields }
func (AllZonesResponse) Render ¶
func (azr AllZonesResponse) Render(w http.ResponseWriter, r *http.Request) error
type Config ¶
type Config struct { WebConfig `mapstructure:"web_server"` InfluxDBConfig influxdb.Config `mapstructure:"influxdb"` MQTTConfig mqtt.Config `mapstructure:"mqtt"` StorageConfig storage.Config `mapstructure:"storage"` LogConfig LogConfig `mapstructure:"log"` }
Config holds all the options and sub-configs for the server
type ErrResponse ¶
type ErrResponse struct { Err error `json:"-"` // low-level runtime error HTTPStatusCode int `json:"-"` // http response status code StatusText string `json:"status"` // user-level status message AppCode int64 `json:"code,omitempty"` // application-specific error code ErrorText string `json:"error,omitempty"` // application-level error message, for debugging }
ErrResponse is a struct used to organize HTTP error responses
func (*ErrResponse) Render ¶
func (e *ErrResponse) Render(_ http.ResponseWriter, r *http.Request) error
Render will verify and render the ErrResponse
type GardenActionResponse ¶
type GardenActionResponse struct{}
func (*GardenActionResponse) Render ¶
func (*GardenActionResponse) Render(_ http.ResponseWriter, _ *http.Request) error
type GardenResponse ¶
type GardenResponse struct { *pkg.Garden NextLightAction *NextLightAction `json:"next_light_action,omitempty"` Health *pkg.GardenHealth `json:"health,omitempty"` TemperatureHumidityData *TemperatureHumidityData `json:"temperature_humidity_data,omitempty"` NumZones uint `json:"num_zones"` Links []Link `json:"links,omitempty"` // contains filtered or unexported fields }
GardenResponse is used to represent a Garden in the response body with the additional Moisture data and hypermedia Links fields
func (*GardenResponse) Render ¶
func (g *GardenResponse) Render(w http.ResponseWriter, r *http.Request) error
Render is used to make this struct compatible with the go-chi webserver for writing the JSON response
type GardensAPI ¶
GardensAPI encapsulates the structs and dependencies necessary for the "/gardens" API to function, including storage and configurating
func NewGardensAPI ¶
func NewGardensAPI(config Config, storageClient *storage.Client, influxdbClient influxdb.Client, worker *worker.Worker) (*GardensAPI, error)
NewGardensAPI creates a new GardenResource
func (*GardensAPI) NewGardenResponse ¶
func (api *GardensAPI) NewGardenResponse(garden *pkg.Garden, links ...Link) *GardenResponse
NewGardenResponse creates a self-referencing GardenResponse
type LogConfig ¶
LogConfig holds settings for logger
func (LogConfig) GetLogLevel ¶
GetLogLevel returns the Level based on parsed string. Defaults to Info instead of error
type NextLightAction ¶
type NextLightAction struct { Time *time.Time `json:"time"` State pkg.LightState `json:"state"` }
NextLightAction contains the time and state for the next scheduled LightAction
type NextWaterDetails ¶
type NextWaterDetails struct { Time *time.Time `json:"time,omitempty"` Duration *pkg.Duration `json:"duration,omitempty"` WaterScheduleID *xid.ID `json:"water_schedule_id,omitempty"` Message string `json:"message,omitempty"` }
NextWaterDetails has information about the next time this WaterSchedule will be used
func GetNextWaterDetails ¶
func GetNextWaterDetails(ws *pkg.WaterSchedule, worker *worker.Worker, excludeWeatherData bool) NextWaterDetails
GetNextWaterDetails returns the NextWaterDetails for the WaterSchedule
type RainData ¶
RainData shows the total rain in the last watering interval and the scaling factor it would result in
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server contains all of the necessary resources for running a server
type TemperatureData ¶
type TemperatureData struct { Celsius float32 `json:"celsius"` ScaleFactor float32 `json:"scale_factor"` }
TemperatureData shows the average high temperatures in the last watering interval and the scaling factor it would result in
type TemperatureHumidityData ¶
type TemperatureHumidityData struct { TemperatureCelsius float64 `json:"temperature_celsius"` HumidityPercentage float64 `json:"humidity_percentage"` }
TemperatureHumidityData has the temperature and humidity of the Garden
type WaterScheduleResponse ¶
type WaterScheduleResponse struct { *pkg.WaterSchedule WeatherData *WeatherData `json:"weather_data,omitempty"` NextWater NextWaterDetails `json:"next_water,omitempty"` Links []Link `json:"links,omitempty"` // contains filtered or unexported fields }
WaterScheduleResponse is used to represent a WaterSchedule in the response body with the additional Moisture data and hypermedia Links fields
func (*WaterScheduleResponse) Render ¶
func (ws *WaterScheduleResponse) Render(w http.ResponseWriter, r *http.Request) error
Render is used to make this struct compatible with the go-chi webserver for writing the JSON response
type WaterSchedulesAPI ¶
type WaterSchedulesAPI struct { *babyapi.API[*pkg.WaterSchedule] // contains filtered or unexported fields }
WaterSchedulesAPI provides and API for interacting with WaterSchedules
func NewWaterSchedulesAPI ¶
func NewWaterSchedulesAPI(storageClient *storage.Client, worker *worker.Worker) (WaterSchedulesAPI, error)
NewWaterSchedulesAPI creates a new WaterSchedulesResource
func (*WaterSchedulesAPI) NewWaterScheduleResponse ¶
func (api *WaterSchedulesAPI) NewWaterScheduleResponse(ws *pkg.WaterSchedule, links ...Link) *WaterScheduleResponse
NewWaterScheduleResponse creates a self-referencing WaterScheduleResponse
type WeatherClientResponse ¶
func (*WeatherClientResponse) Render ¶
func (resp *WeatherClientResponse) Render(_ http.ResponseWriter, _ *http.Request) error
Render ...
type WeatherClientTestResponse ¶
type WeatherClientTestResponse struct {
WeatherData
}
WeatherClientTestResponse is used to return WeatherData from testing that the client works
func (*WeatherClientTestResponse) Render ¶
func (resp *WeatherClientTestResponse) Render(_ http.ResponseWriter, _ *http.Request) error
Render ...
type WeatherClientsAPI ¶
type WeatherClientsAPI struct { *babyapi.API[*weather.Config] // contains filtered or unexported fields }
WeatherClientsAPI encapsulates the structs and dependencies necessary for the WeatherClients API to function, including storage and configuring
func NewWeatherClientsAPI ¶
func NewWeatherClientsAPI(storageClient *storage.Client) (*WeatherClientsAPI, error)
NewWeatherClientsAPI creates a new WeatherClientsResource
type WeatherData ¶
type WeatherData struct { Rain *RainData `json:"rain,omitempty"` Temperature *TemperatureData `json:"average_temperature,omitempty"` SoilMoisturePercent *float64 `json:"soil_moisture_percent,omitempty"` }
WeatherData is used to represent the data used for WeatherControl to a user
type WebConfig ¶
type WebConfig struct {
Port int `mapstructure:"port"`
}
WebConfig is used to allow reading the "web_server" section into the main Config struct
type ZoneActionResponse ¶
type ZoneActionResponse struct{}
func (*ZoneActionResponse) Render ¶
func (*ZoneActionResponse) Render(_ http.ResponseWriter, _ *http.Request) error
type ZoneResponse ¶
type ZoneResponse struct { *pkg.Zone WeatherData *WeatherData `json:"weather_data,omitempty"` NextWater NextWaterDetails `json:"next_water,omitempty"` Links []Link `json:"links,omitempty"` // History is only used in HTML responses and is excluded from JSON History ZoneWaterHistoryResponse `json:"-"` HistoryError string `json:"-"` // contains filtered or unexported fields }
ZoneResponse is used to represent a Zone in the response body with the additional Moisture data and hypermedia Links fields
func (*ZoneResponse) Render ¶
func (zr *ZoneResponse) Render(w http.ResponseWriter, r *http.Request) error
Render is used to make this struct compatible with the go-chi webserver for writing the JSON response
type ZoneWaterHistoryResponse ¶
type ZoneWaterHistoryResponse struct { History []pkg.WaterHistory `json:"history"` Count int `json:"count"` Average string `json:"average"` Total string `json:"total"` }
ZoneWaterHistoryResponse wraps a slice of WaterHistory structs plus some aggregate stats for an HTTP response
func NewZoneWaterHistoryResponse ¶
func NewZoneWaterHistoryResponse(history []pkg.WaterHistory) ZoneWaterHistoryResponse
NewZoneWaterHistoryResponse creates a response by creating some basic statistics about a list of history events
func (ZoneWaterHistoryResponse) Render ¶
func (resp ZoneWaterHistoryResponse) Render(_ http.ResponseWriter, _ *http.Request) error
Render is used to make this struct compatible with the go-chi webserver for writing the JSON response
type ZonesAPI ¶
ZonesAPI encapsulates the structs and dependencies necessary for the "/zones" API to function, including storage, scheduling, and caching
func NewZonesAPI ¶
func NewZonesAPI(storageClient *storage.Client, influxdbClient influxdb.Client, worker *worker.Worker) (ZonesAPI, error)
NewZonesAPI creates a new ZonesResource
func (*ZonesAPI) NewZoneResponse ¶
func (api *ZonesAPI) NewZoneResponse(zone *pkg.Zone, links ...Link) *ZoneResponse
NewZoneResponse creates a self-referencing ZoneResponse