# HG changeset patch # User Sascha L. Teichmann # Date 1549625807 -3600 # Node ID 51c5aead78c0bac08819d9fe0c7201dad3cf177c # Parent a08e0f532304221da761f99ad512a7aaf5f6a979 Print templates: Implemented /api/templates/print/{name} GET. diff -r a08e0f532304 -r 51c5aead78c0 pkg/controllers/printtemplates.go --- a/pkg/controllers/printtemplates.go Fri Feb 08 12:30:22 2019 +0100 +++ b/pkg/controllers/printtemplates.go Fri Feb 08 12:36:47 2019 +0100 @@ -14,14 +14,19 @@ package controllers import ( + "bytes" "database/sql" "net/http" "time" + "github.com/gorilla/mux" + "github.com/jackc/pgx/pgtype" + "gemma.intevation.de/gemma/pkg/models" - "github.com/gorilla/mux" ) +const maxPrintTemplateSize = 5 * 1024 * 1024 + const ( listPrintTemplatesSQL = ` SELECT @@ -36,6 +41,9 @@ deletePrintTemplateSQL = ` DELETE FROM users.templates WHERE name = $1` + + selectPrintTemplateSQL = ` +SELECT template_data FROM users.templates WHERE name = $1` ) func listPrintTemplates( @@ -76,7 +84,30 @@ req *http.Request, conn *sql.Conn, ) (jr JSONResult, err error) { - // TODO: Implement me! + + ctx := req.Context() + name := mux.Vars(req)["name"] + + var data pgtype.Bytea + err = conn.QueryRowContext(ctx, selectPrintTemplateSQL, name).Scan(&data) + + switch { + case err == sql.ErrNoRows: + err = JSONError{ + Code: http.StatusNotFound, + Message: "No such template found", + } + return + case err != nil: + return + case data.Status != pgtype.Present: + err = JSONError{ + Code: http.StatusInternalServerError, + Message: "Unexpected return value from database query", + } + return + } + jr = JSONResult{Result: bytes.NewReader(data.Bytes)} return } @@ -96,7 +127,6 @@ ) (jr JSONResult, err error) { ctx := req.Context() - name := mux.Vars(req)["name"] var tx *sql.Tx @@ -122,6 +152,7 @@ Code: http.StatusInternalServerError, Message: "Unexpected return value from database query", } + return } if _, err = tx.ExecContext(ctx, deletePrintTemplateSQL, name); err != nil { diff -r a08e0f532304 -r 51c5aead78c0 pkg/controllers/routes.go --- a/pkg/controllers/routes.go Fri Feb 08 12:30:22 2019 +0100 +++ b/pkg/controllers/routes.go Fri Feb 08 12:36:47 2019 +0100 @@ -105,7 +105,9 @@ })).Methods(http.MethodGet) api.Handle("/templates/print/{name}", waterwayAdmin(&JSONHandler{ + Input: func(*http.Request) interface{} { return new(models.PrintTemplateIn) }, Handle: createPrintTemplate, + Limit: maxPrintTemplateSize, })).Methods(http.MethodPost) api.Handle("/templates/print/{name}", waterwayAdmin(&JSONHandler{