package main import ( "fmt" "dim/query" "dim/types" ) type ( Layer3DomainSetOptions struct { Attributes types.FieldMap `json:"attributes"` } ) func layer3DomainSetAttr(c *Context, req Request, res *Response) error { name := "" attrs := types.FieldMap{} if err := req.ParseAtLeast(2, &name, &attrs); err != nil { res.AddMessage(LevelError, "could not parse options: %s", err) return nil } if name == "" { res.AddMessage(LevelError, "empty name was provided") return nil } if attrs.Size() == 0 { res.AddMessage(LevelError, "no key/value pairs provided to update") return nil } setClause, args, err := query.FieldMapToUpdate(attrs, layer3DomainListMap) if err != nil { res.AddMessage(LevelError, "could not encode requested attributes: %s", err) return nil } queryStr := fmt.Sprintf("update layer3domains l set %s where name = $%d", setClause, len(args)+1) args = append(args, name) // don't forget to add the where clause parameter if _, err := c.tx.Exec(queryStr, args...); err != nil { res.AddMessage(LevelError, "could not set attributes") c.Logf(LevelError, "could not set attributes on layer3domain '%s': %s - query: `%s` - args: `%#v`", name, err, queryStr, args) return nil } return nil }