package client import ( "context" "net/http" "strconv" ) // CreateSpeciesTaskTemplate adds an automatic task rule to a species. func (c *Client) CreateSpeciesTaskTemplate(ctx context.Context, gardenID, speciesID int, input SpeciesTaskTemplateInput) (SpeciesTaskTemplate, *Response, error) { return c.writeSpeciesTaskTemplate(ctx, http.MethodPost, speciesTaskTemplateCollectionPath(gardenID, speciesID), input) } // SpeciesTaskTemplates lists task-generation rules for a species. func (c *Client) SpeciesTaskTemplates(ctx context.Context, gardenID, speciesID int) ([]SpeciesTaskTemplate, *Response, error) { var envelope struct { TaskTemplates []SpeciesTaskTemplate `json:"task_templates"` } response, err := c.do(ctx, http.MethodGet, speciesTaskTemplateCollectionPath(gardenID, speciesID), nil, &envelope) return envelope.TaskTemplates, response, err } // SpeciesTaskTemplate returns one task-generation rule within its species. func (c *Client) SpeciesTaskTemplate(ctx context.Context, gardenID, speciesID, templateID int) (SpeciesTaskTemplate, *Response, error) { var envelope struct { TaskTemplate SpeciesTaskTemplate `json:"task_template"` } response, err := c.do(ctx, http.MethodGet, speciesTaskTemplatePath(gardenID, speciesID, templateID), nil, &envelope) return envelope.TaskTemplate, response, err } // UpdateSpeciesTaskTemplate changes a task-generation rule. func (c *Client) UpdateSpeciesTaskTemplate(ctx context.Context, gardenID, speciesID, templateID int, input SpeciesTaskTemplateInput) (SpeciesTaskTemplate, *Response, error) { return c.writeSpeciesTaskTemplate(ctx, http.MethodPatch, speciesTaskTemplatePath(gardenID, speciesID, templateID), input) } // DeleteSpeciesTaskTemplate removes a task-generation rule. func (c *Client) DeleteSpeciesTaskTemplate(ctx context.Context, gardenID, speciesID, templateID int) (*Response, error) { return c.do(ctx, http.MethodDelete, speciesTaskTemplatePath(gardenID, speciesID, templateID), nil, nil) } func (c *Client) writeSpeciesTaskTemplate(ctx context.Context, method, path string, input SpeciesTaskTemplateInput) (SpeciesTaskTemplate, *Response, error) { var envelope struct { TaskTemplate SpeciesTaskTemplate `json:"task_template"` } response, err := c.do(ctx, method, path, input, &envelope) return envelope.TaskTemplate, response, err } func speciesTaskTemplateCollectionPath(gardenID, speciesID int) string { return speciesPath(gardenID, speciesID) + "/task-templates" } func speciesTaskTemplatePath(gardenID, speciesID, templateID int) string { return speciesTaskTemplateCollectionPath(gardenID, speciesID) + "/" + strconv.Itoa(templateID) }