Documentation
¶
Index ¶
- Variables
- func DisableMock()
- func EnableMock()
- func ErrInvalidRequest(err error) render.Renderer
- func ErrRender(err error) render.Renderer
- func InternalServerError(err error) render.Renderer
- func NewID() babyapi.ID
- type API
- type AllGardensResponse
- type AllWaterSchedulesResponse
- type AllWeatherClientsResponse
- type AllZonesResponse
- type Config
- type ErrResponse
- type GardenActionResponse
- type GardenResponse
- type GardensAPI
- type Link
- type LogConfig
- type NextLightAction
- type NextWaterDetails
- type NotificationClientResponse
- type NotificationClientTestResponse
- type NotificationClientsAPI
- type RainData
- type TemperatureData
- type TemperatureHumidityData
- type TestNotificationClientRequest
- type WaterRoutineAPI
- 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 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 API ¶
type API struct { *babyapi.API[*babyapi.NilResource] // contains filtered or unexported fields }
API contains all HTTP API handling and logic
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) HTML ¶
func (agr AllGardensResponse) HTML(_ http.ResponseWriter, r *http.Request) string
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(_ http.ResponseWriter, r *http.Request) string
func (AllWaterSchedulesResponse) Render ¶
func (aws AllWaterSchedulesResponse) Render(w http.ResponseWriter, r *http.Request) error
type AllWeatherClientsResponse ¶
type AllWeatherClientsResponse struct { babyapi.ResourceList[*WeatherClientResponse] }
func (AllWeatherClientsResponse) HTML ¶
func (aws AllWeatherClientsResponse) HTML(_ http.ResponseWriter, r *http.Request) string
func (AllWeatherClientsResponse) Render ¶
func (aws AllWeatherClientsResponse) Render(w http.ResponseWriter, r *http.Request) error
type AllZonesResponse ¶
type AllZonesResponse struct { babyapi.ResourceList[*ZoneResponse] // contains filtered or unexported fields }
func (AllZonesResponse) HTML ¶
func (azr AllZonesResponse) HTML(_ http.ResponseWriter, r *http.Request) string
func (AllZonesResponse) Render ¶
func (azr AllZonesResponse) Render(w http.ResponseWriter, r *http.Request) error
type Config ¶
type Config struct { WebConfig WebConfig `mapstructure:"web_server" yaml:"web_server"` InfluxDBConfig influxdb.Config `mapstructure:"influxdb" yaml:"influxdb"` MQTTConfig mqtt.Config `mapstructure:"mqtt" yaml:"mqtt"` StorageConfig storage.Config `mapstructure:"storage" yaml:"storage"` LogConfig LogConfig `mapstructure:"log" yaml:"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 additional 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 NewGardenAPI ¶
func NewGardenAPI() *GardensAPI
func (*GardensAPI) NewGardenResponse ¶
func (api *GardensAPI) NewGardenResponse(garden *pkg.Garden, links ...Link) *GardenResponse
NewGardenResponse creates a self-referencing GardenResponse
type LogConfig ¶
type LogConfig struct { Level string `mapstructure:"level" yaml:"level"` Format string `mapstructure:"format" yaml:"format"` }
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(r *http.Request, ws *pkg.WaterSchedule, worker *worker.Worker, excludeWeatherData bool) NextWaterDetails
GetNextWaterDetails returns the NextWaterDetails for the WaterSchedule
type NotificationClientResponse ¶
type NotificationClientResponse struct { *notifications.Client Links []Link `json:"links,omitempty"` }
func (*NotificationClientResponse) Render ¶
func (resp *NotificationClientResponse) Render(_ http.ResponseWriter, _ *http.Request) error
Render ...
type NotificationClientTestResponse ¶
type NotificationClientTestResponse struct {
WeatherData
}
NotificationClientTestResponse is used to return WeatherData from testing that the client works
func (*NotificationClientTestResponse) Render ¶
func (resp *NotificationClientTestResponse) Render(_ http.ResponseWriter, _ *http.Request) error
Render ...
type NotificationClientsAPI ¶
type NotificationClientsAPI struct { *babyapi.API[*notifications.Client] // contains filtered or unexported fields }
NotificationClientsAPI encapsulates the structs and dependencies necessary for the NotificationClients API to function, including storage and configuring
func NewNotificationClientsAPI ¶
func NewNotificationClientsAPI() *NotificationClientsAPI
NewNotificationClientsAPI creates a new NotificationClientsResource
type RainData ¶
RainData shows the total rain in the last watering interval and the scaling factor it would result in
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 WaterRoutineAPI ¶
type WaterRoutineAPI struct { *babyapi.API[*pkg.WaterRoutine] // contains filtered or unexported fields }
func NewWaterRoutineAPI ¶
func NewWaterRoutineAPI() *WaterRoutineAPI
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 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() *WaterSchedulesAPI
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(w http.ResponseWriter, r *http.Request) error
Render ...
type WeatherClientTestResponse ¶
type WeatherClientTestResponse struct {
WeatherData
}
func (*WeatherClientTestResponse) Render ¶
func (resp *WeatherClientTestResponse) Render(_ http.ResponseWriter, _ *http.Request) error
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() *WeatherClientsAPI
type WeatherData ¶
type WeatherData struct { Rain *RainData `json:"rain,omitempty"` Temperature *TemperatureData `json:"average_temperature,omitempty"` }
WeatherData is used to represent the data used for WeatherControl to a user
type WebConfig ¶
type WebConfig struct { Port int `mapstructure:"port" yaml:"port"` ReadOnly bool `mapstructure:"readonly" yaml:"readonly"` DisableMetrics bool `mapstructure:"disable_metrics" yaml:"disable_metrics"` }
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:"-"` Progress *pkg.WaterHistoryProgress `json:"-"` // contains filtered or unexported fields }
ZoneResponse is used to represent a Zone in the response body with the additional data and hypermedia Links fields
func (*ZoneResponse) HTML ¶
func (zr *ZoneResponse) HTML(_ http.ResponseWriter, r *http.Request) string
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() *ZonesAPI
func (*ZonesAPI) NewZoneResponse ¶
func (api *ZonesAPI) NewZoneResponse(zone *pkg.Zone, links ...Link) *ZoneResponse
NewZoneResponse creates a self-referencing ZoneResponse