annotate pkg/controllers/printtemplates.go @ 5564:aaa9e658cabd

Log export: Added marker interface to JobCreators that log messages should be loaded at export. Removes the hard coded SR export SQL logic.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sat, 12 Feb 2022 18:56:55 +0100
parents 4394daeea96a
children 6270951dda28
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2148
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2 // without warranty, see README.md and license for details.
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 //
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 //
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 // Copyright (C) 2018 by via donau
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 //
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 // Author(s):
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 package controllers
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import (
2155
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
17 "bytes"
2148
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 "database/sql"
2161
7444b75d5497 Print templates endpoints: Get rid of useless models.PrintTemplateIn model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2158
diff changeset
19 "encoding/json"
2148
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 "net/http"
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
21 "strings"
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
22 "time"
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
23
2155
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
24 "github.com/gorilla/mux"
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
25 "github.com/jackc/pgx/pgtype"
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
26
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
27 "gemma.intevation.de/gemma/pkg/models"
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
28
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
29 mw "gemma.intevation.de/gemma/pkg/middleware"
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
30 )
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
31
2155
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
32 const maxPrintTemplateSize = 5 * 1024 * 1024
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
33
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
34 const (
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
35 listPrintTemplatesSQL = `
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
36 SELECT
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
37 template_name,
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
38 template_type::varchar,
2270
1c8b8a4476af Print templates: Add country to listing if template has one.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2267
diff changeset
39 date_info,
1c8b8a4476af Print templates: Add country to listing if template has one.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2267
diff changeset
40 country
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
41 FROM users.templates
3223
9e087a495f41 Fixed SQL statements. Got broken when migrated to new filter builder.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3217
diff changeset
42 WHERE
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
43 `
2153
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
44
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
45 hasPrintTemplateSQL = `
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
46 SELECT true FROM users.templates
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
47 WHERE template_name = $1 AND template_type = $2::template_types`
2153
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
48
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
49 deletePrintTemplateSQL = `
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
50 DELETE FROM users.templates
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
51 WHERE template_name = $1 AND template_type = $2::template_types`
2155
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
52
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
53 selectPrintTemplateSQL = `
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
54 SELECT template_data FROM users.templates
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
55 WHERE template_name = $1 AND template_type = $2::template_types`
2158
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
56
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
57 insertPrintTemplateSQL = `
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
58 INSERT INTO users.templates (template_name, template_type, template_data, country)
2267
37ae1bee3e4a Ajjusted RLS for user templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2247
diff changeset
59 SELECT
37ae1bee3e4a Ajjusted RLS for user templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2247
diff changeset
60 $1,
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
61 $2::template_types,
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
62 $3,
2267
37ae1bee3e4a Ajjusted RLS for user templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2247
diff changeset
63 CASE WHEN pg_has_role('sys_admin', 'MEMBER') THEN NULL
4158
5466562cca60 Remove utility function with possibly bad performance impact
Tom Gottfried <tom@intevation.de>
parents: 3228
diff changeset
64 ELSE (SELECT country FROM users.list_users
5466562cca60 Remove utility function with possibly bad performance impact
Tom Gottfried <tom@intevation.de>
parents: 3228
diff changeset
65 WHERE username = current_user)
2267
37ae1bee3e4a Ajjusted RLS for user templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2247
diff changeset
66 END`
2162
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
67
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
68 updatePrintTemplateSQL = `
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
69 UPDATE user.templates template_data = $2
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
70 WHERE template_name = $1 AND template_type = $2::template_types`
2148
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 )
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
73 var templateTypes = []string{"map", "diagram", "report"}
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
74
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
75 func listPrintTemplates(req *http.Request) (jr mw.JSONResult, err error) {
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
76
3228
607a158fe8f5 Print templates: Fixed accessing templates by type.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3226
diff changeset
77 ts := mux.Vars(req)["type"]
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
78 if ts == "" {
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
79 if ts = req.FormValue("types"); ts == "" {
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
80 ts = strings.Join(templateTypes, ",")
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
81 }
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
82 }
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
83
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
84 types := toTextArray(ts, templateTypes)
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
85 filter := buildFilterTerm("template_type = ANY($%d) ", types)
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
86
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
87 var stmt strings.Builder
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
88 var args []interface{}
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
89
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
90 stmt.WriteString(listPrintTemplatesSQL)
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
91 filter.serialize(&stmt, &args)
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
92 stmt.WriteString(" ORDER BY date_info DESC")
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
93
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
94 var rows *sql.Rows
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
95 if rows, err = mw.JSONConn(req).QueryContext(req.Context(), stmt.String(), args...); err != nil {
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
96 return
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
97 }
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
98 defer rows.Close()
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
99
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
100 type template struct {
2270
1c8b8a4476af Print templates: Add country to listing if template has one.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2267
diff changeset
101 Name string `json:"name"`
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
102 Type string `json:"type"`
2270
1c8b8a4476af Print templates: Add country to listing if template has one.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2267
diff changeset
103 Time models.Time `json:"time"`
1c8b8a4476af Print templates: Add country to listing if template has one.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2267
diff changeset
104 Country *string `json:"country,omitempty"`
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
105 }
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
106
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
107 templates := []*template{}
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
108
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
109 for rows.Next() {
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
110 var tmpl template
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
111 var w time.Time
2270
1c8b8a4476af Print templates: Add country to listing if template has one.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2267
diff changeset
112 var country sql.NullString
3226
d84c64c0f510 Print templates: Forget to scan the type from the result set when listing available templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3223
diff changeset
113 if err = rows.Scan(
d84c64c0f510 Print templates: Forget to scan the type from the result set when listing available templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3223
diff changeset
114 &tmpl.Name,
d84c64c0f510 Print templates: Forget to scan the type from the result set when listing available templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3223
diff changeset
115 &tmpl.Type,
d84c64c0f510 Print templates: Forget to scan the type from the result set when listing available templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3223
diff changeset
116 &w,
d84c64c0f510 Print templates: Forget to scan the type from the result set when listing available templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3223
diff changeset
117 &country,
d84c64c0f510 Print templates: Forget to scan the type from the result set when listing available templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3223
diff changeset
118 ); err != nil {
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
119 return
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
120 }
3089
813309225e35 Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2270
diff changeset
121 tmpl.Time = models.Time{Time: w}
2270
1c8b8a4476af Print templates: Add country to listing if template has one.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2267
diff changeset
122 if country.Valid {
1c8b8a4476af Print templates: Add country to listing if template has one.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2267
diff changeset
123 tmpl.Country = &country.String
1c8b8a4476af Print templates: Add country to listing if template has one.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2267
diff changeset
124 }
2150
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
125 templates = append(templates, &tmpl)
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
126 }
2c67c51d57ad Print templates: Implemented GET of all templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2148
diff changeset
127
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
128 jr = mw.JSONResult{Result: templates}
2148
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
129 return
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130 }
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
131
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
132 func fetchPrintTemplate(req *http.Request) (jr mw.JSONResult, err error) {
2155
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
133
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
134 vars := mux.Vars(req)
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
135 name, typ := vars["name"], vars["type"]
2155
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
136
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
137 ctx := req.Context()
2155
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
138 var data pgtype.Bytea
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
139 err = mw.JSONConn(req).QueryRowContext(ctx, selectPrintTemplateSQL, name, typ).Scan(&data)
2155
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
140
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
141 switch {
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
142 case err == sql.ErrNoRows:
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
143 err = mw.JSONError{
2155
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
144 Code: http.StatusNotFound,
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
145 Message: "No such template found",
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
146 }
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
147 return
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
148 case err != nil:
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
149 return
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
150 case data.Status != pgtype.Present:
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
151 err = mw.JSONError{
2155
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
152 Code: http.StatusInternalServerError,
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
153 Message: "Unexpected return value from database query",
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
154 }
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
155 return
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
156 }
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
157 jr = mw.JSONResult{Result: bytes.NewReader(data.Bytes)}
2148
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
158 return
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
159 }
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
160
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
161 func createPrintTemplate(req *http.Request) (jr mw.JSONResult, err error) {
2158
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
162
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
163 vars := mux.Vars(req)
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
164 name, typ := vars["name"], vars["type"]
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
165
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
166 in := mw.JSONInput(req).(*json.RawMessage)
2158
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
167
2161
7444b75d5497 Print templates endpoints: Get rid of useless models.PrintTemplateIn model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2158
diff changeset
168 if name == "" {
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
169 err = mw.JSONError{
2158
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
170 Code: http.StatusBadRequest,
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
171 Message: "Template must have a none empty name",
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
172 }
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
173 return
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
174 }
2161
7444b75d5497 Print templates endpoints: Get rid of useless models.PrintTemplateIn model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2158
diff changeset
175 if len(*in) == 0 {
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
176 err = mw.JSONError{
2158
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
177 Code: http.StatusBadRequest,
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
178 Message: "Template must have a none empty template",
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
179 }
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
180 return
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
181 }
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
182
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
183 ctx := req.Context()
2158
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
184 var tx *sql.Tx
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
185 if tx, err = mw.JSONConn(req).BeginTx(ctx, nil); err != nil {
2158
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
186 return
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
187 }
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
188 defer tx.Rollback()
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
189
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
190 var dummy bool
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
191 err = tx.QueryRowContext(ctx, hasPrintTemplateSQL, name, typ).Scan(&dummy)
2158
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
192
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
193 switch {
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
194 case err == sql.ErrNoRows:
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
195 // This is fine.
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
196 case err != nil:
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
197 return
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
198 default:
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
199 err = mw.JSONError{
2158
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
200 Code: http.StatusBadRequest,
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
201 Message: "A template with this name already exists",
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
202 }
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
203 return
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
204 }
2161
7444b75d5497 Print templates endpoints: Get rid of useless models.PrintTemplateIn model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2158
diff changeset
205 data := pgtype.Bytea{Bytes: *in, Status: pgtype.Present}
2158
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
206
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
207 if _, err = tx.ExecContext(ctx, insertPrintTemplateSQL, name, typ, &data); err != nil {
2158
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
208 return
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
209 }
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
210
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
211 if err = tx.Commit(); err != nil {
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
212 return
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
213 }
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
214 jr = mw.JSONResult{
2158
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
215 Code: http.StatusCreated,
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
216 Result: map[string]string{
2161
7444b75d5497 Print templates endpoints: Get rid of useless models.PrintTemplateIn model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2158
diff changeset
217 "created": name,
2158
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
218 },
7bd485bf85e8 Print templates: Implemented /api/templates/print POST to create new templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2155
diff changeset
219 }
2148
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
220 return
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
221 }
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
222
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
223 func deletePrintTemplate(req *http.Request) (jr mw.JSONResult, err error) {
2153
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
224
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
225 vars := mux.Vars(req)
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
226 name, typ := vars["name"], vars["type"]
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
227
2153
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
228 ctx := req.Context()
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
229 var tx *sql.Tx
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
230 if tx, err = mw.JSONConn(req).BeginTx(ctx, nil); err != nil {
2153
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
231 return
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
232 }
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
233 defer tx.Rollback()
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
234
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
235 var dummy bool
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
236 err = tx.QueryRowContext(ctx, hasPrintTemplateSQL, name, typ).Scan(&dummy)
2153
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
237
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
238 switch {
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
239 case err == sql.ErrNoRows:
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
240 err = mw.JSONError{
2153
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
241 Code: http.StatusNotFound,
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
242 Message: "No such template found",
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
243 }
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
244 return
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
245 case err != nil:
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
246 return
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
247 case !dummy:
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
248 err = mw.JSONError{
2153
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
249 Code: http.StatusInternalServerError,
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
250 Message: "Unexpected return value from database query",
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
251 }
2155
51c5aead78c0 Print templates: Implemented /api/templates/print/{name} GET.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2153
diff changeset
252 return
2153
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
253 }
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
254
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
255 if _, err = tx.ExecContext(ctx, deletePrintTemplateSQL, name, typ); err != nil {
2153
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
256 return
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
257 }
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
258
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
259 if err = tx.Commit(); err != nil {
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
260 return
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
261 }
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
262
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
263 jr = mw.JSONResult{
2153
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
264 Result: map[string]string{
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
265 "deleted": name,
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
266 },
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
267 }
cdd68f555ad7 Print templates: Implemented /api/templates/print/{name} DELETE.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2150
diff changeset
268
2148
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
269 return
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
270 }
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
271
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
272 func updatePrintTemplate(req *http.Request) (jr mw.JSONResult, err error) {
2162
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
273
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
274 vars := mux.Vars(req)
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
275 name, typ := vars["name"], vars["type"]
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
276
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
277 in := mw.JSONInput(req).(*json.RawMessage)
2162
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
278
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
279 if name == "" {
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
280 err = mw.JSONError{
2162
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
281 Code: http.StatusBadRequest,
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
282 Message: "Template must have a none empty name",
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
283 }
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
284 return
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
285 }
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
286 if len(*in) == 0 {
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
287 err = mw.JSONError{
2162
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
288 Code: http.StatusBadRequest,
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
289 Message: "Template must have a none empty template",
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
290 }
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
291 return
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
292 }
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
293
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
294 ctx := req.Context()
2162
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
295 var tx *sql.Tx
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
296 if tx, err = mw.JSONConn(req).BeginTx(ctx, nil); err != nil {
2162
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
297 return
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
298 }
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
299 defer tx.Rollback()
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
300
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
301 var dummy bool
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
302 err = tx.QueryRowContext(ctx, hasPrintTemplateSQL, name, typ).Scan(&dummy)
2162
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
303
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
304 switch {
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
305 case err == sql.ErrNoRows:
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
306 err = mw.JSONError{
2162
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
307 Code: http.StatusNotFound,
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
308 Message: "No such template found",
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
309 }
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
310 return
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
311 case err != nil:
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
312 return
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
313 case !dummy:
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
314 err = mw.JSONError{
2162
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
315 Code: http.StatusInternalServerError,
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
316 Message: "Unexpected return value from database query",
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
317 }
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
318 return
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
319 }
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
320 data := pgtype.Bytea{Bytes: *in, Status: pgtype.Present}
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
321
3217
4c254651d80b Added template types "map", "diagram", "report".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3089
diff changeset
322 if _, err = tx.ExecContext(ctx, updatePrintTemplateSQL, name, typ, &data); err != nil {
2162
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
323 return
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
324 }
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
325
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
326 if err = tx.Commit(); err != nil {
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
327 return
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
328 }
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
329
4244
4394daeea96a Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4243
diff changeset
330 jr = mw.JSONResult{
2162
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
331 Code: http.StatusOK,
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
332 Result: map[string]string{
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
333 "updated": name,
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
334 },
0627565fb4d2 Print templates: Implemented /api/templates/print/{name} PATCH to update print templates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2161
diff changeset
335 }
2148
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
336 return
4057a1f15174 Print templates: Forget to add controller file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
337 }