# HG changeset patch
# User Christophe de Vienne <christophe@cdevienne.info>
# Date 1633090537 -7200
#      Fri Oct 01 14:15:37 2021 +0200
# Node ID 2defe6a5a126875beea9790225e82d2b802e01ab
# Parent  5746457e68bcec77f71b69f5eba624437b2d01ff
Generate url builders

diff --git a/scripts/generate_db_helpers.go b/scripts/generate_db_helpers.go
--- a/scripts/generate_db_helpers.go
+++ b/scripts/generate_db_helpers.go
@@ -275,6 +275,7 @@
 	PKeyColumn() string
 	Columns(withPKey bool) []string
 	Values(columns ...string) []interface{}
+	ValuesMap(columns ...string) map[string]interface{}
 }
 
 type TableSchema interface {
@@ -483,6 +484,20 @@
 	return values
 }
 
+// ValuesMap returns the values map for a list of columns. If a column does not
+// exits, the corresponding value is left empty
+func (s {{.Name}}) ValuesMap(columns ...string) map[string]interface{} {
+	values := make(map[string]interface{})
+	for _, column := range columns {
+		switch column {
+		{{- range .Fields}}
+		case "{{.Column}}":
+			values["{{.Column}}"] = s.{{.Name}}
+		{{- end}}
+		}
+	}
+	return values
+}
 {{- if .HasTable}}
 
 func New{{.Name}}TableSchema() *{{.Name}}TableSchema {
diff --git a/server.yaml b/server.yaml
--- a/server.yaml
+++ b/server.yaml
@@ -95,6 +95,11 @@
       source: asset:serverOperation
       target: "{{ if gt (len .Tags) 0 }}{{ joinFilePath .Target .ServerPackage .APIPackage .Package  }}{{ else }}{{ joinFilePath .Target .ServerPackage .Package  }}{{ end }}"
       file_name: "{{ (snakize (pascalize .Name)) }}.go"
+    - name: urlbuilder
+      source: "asset:serverUrlbuilder"
+      target: "{{ if .UseTags }}{{ joinFilePath .Target (toPackagePath .ServerPackage) (toPackagePath .APIPackage) (toPackagePath .Package) }}{{ else }}{{ joinFilePath .Target (toPackagePath .ServerPackage) (toPackagePath .Package) }}{{ end }}"
+      file_name: "{{ (snakize (pascalize .Name)) }}_urlbuilder.go"
+
 
     # custom templates
     - name: prometheus