Mercurial > gemma
changeset 5129:882b3d2308c4 queued-stage-done
Merge default into queued-stage-done
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Fri, 27 Mar 2020 12:24:25 +0100 |
parents | 6910c1cad1fb (current diff) 7bd9c5161836 (diff) |
children | 52e3980e3462 |
files | schema/gemma.sql |
diffstat | 8 files changed, 57 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/controllers/routes.go Fri Mar 27 00:40:52 2020 +0100 +++ b/pkg/controllers/routes.go Fri Mar 27 12:24:25 2020 +0100 @@ -176,11 +176,6 @@ Handle: listSurveys, })).Methods(http.MethodGet) - // Bottlenecks - api.Handle("/bottlenecks", any(&mw.JSONHandler{ - Handle: listBottlenecks, - })).Methods(http.MethodGet) - // difference calculation api.Handle("/diff", any(&mw.JSONHandler{ Input: func(*http.Request) interface{} { return new(models.DiffCalculationInput) },
--- a/pkg/controllers/search.go Fri Mar 27 00:40:52 2020 +0100 +++ b/pkg/controllers/search.go Fri Mar 27 12:24:25 2020 +0100 @@ -15,7 +15,6 @@ package controllers import ( - "database/sql" "net/http" "strings" @@ -26,18 +25,6 @@ const ( searchMostSQL = `SELECT search_most($1)::text` - - listBottlenecksSQL = ` -SELECT COALESCE(json_agg(r),'[]') -FROM ( - SELECT - objnam AS name, - ST_AsGeoJSON(ST_Centroid(area))::json AS geom, - 'bottleneck' AS type - FROM waterway.bottlenecks - WHERE validity @> current_timestamp -ORDER BY objnam) r -` ) func searchFeature(req *http.Request) (jr mw.JSONResult, err error) { @@ -66,24 +53,3 @@ jr.Result = strings.NewReader(result) return } - -func listBottlenecks(req *http.Request) (jr mw.JSONResult, err error) { - - var result string - err = mw.JSONConn(req).QueryRowContext( - req.Context(), listBottlenecksSQL).Scan(&result) - - switch { - case err == sql.ErrNoRows: - err = mw.JSONError{ - Code: http.StatusNotFound, - Message: "Cannot find any bottleneck.", - } - return - case err != nil: - return - } - - jr = mw.JSONResult{Result: strings.NewReader(result)} - return -}
--- a/pkg/imports/dsr.go Fri Mar 27 00:40:52 2020 +0100 +++ b/pkg/imports/dsr.go Fri Mar 27 12:24:25 2020 +0100 @@ -112,8 +112,13 @@ dsr.BottleneckID, dsr.Date.Time) var id int64 - if err := tx.QueryRowContext(ctx, dsrFindSQL, - dsr.BottleneckID, dsr.Date.Time).Scan(&id); err != nil { + switch err := tx.QueryRowContext(ctx, dsrFindSQL, + dsr.BottleneckID, dsr.Date.Time).Scan(&id); err { + case sql.ErrNoRows: + return nil, UnchangedError("Sounding result does not exist") + case nil: + // Continue + default: return nil, err }
--- a/pkg/pgxutils/errors.go Fri Mar 27 00:40:52 2020 +0100 +++ b/pkg/pgxutils/errors.go Fri Mar 27 12:24:25 2020 +0100 @@ -132,6 +132,13 @@ c = http.StatusConflict return } + case "fairway_dimensions": + switch err.ConstraintName { + case "fairway_dimensions_area_unique": + m = "Duplicate fairway area" + c = http.StatusConflict + return + } } } case exclusionViolation:
--- a/schema/gemma.sql Fri Mar 27 00:40:52 2020 +0100 +++ b/schema/gemma.sql Fri Mar 27 12:24:25 2020 +0100 @@ -721,6 +721,9 @@ CREATE TRIGGER fairway_dimensions_date_info BEFORE UPDATE ON fairway_dimensions FOR EACH ROW EXECUTE PROCEDURE update_date_info() + CREATE CONSTRAINT TRIGGER fairway_dimensions_area_unique + AFTER INSERT OR UPDATE OF area, staging_done ON fairway_dimensions + FOR EACH ROW EXECUTE FUNCTION prevent_st_equals('area', 'staging_done') -- -- Bottlenecks
--- a/schema/gemma_tests.sql Fri Mar 27 00:40:52 2020 +0100 +++ b/schema/gemma_tests.sql Fri Mar 27 12:24:25 2020 +0100 @@ -52,3 +52,38 @@ $$, 23505, NULL, 'No duplicate geometries can be inserted into waterway_area'); + +SELECT throws_ok($$ + INSERT INTO waterway.fairway_dimensions ( + area, level_of_service, + min_width, max_width, min_depth, source_organization + ) VALUES ( + ST_GeogFromText('MULTIPOLYGON(((0 0, 1 1, 1 0, 0 0)))'), 3, + 100, 200, 2, 'test' + ), ( + ST_GeogFromText('MULTIPOLYGON(((0 0, 1 1, 1 0, 0 0)))'), 3, + 100, 200, 2, 'test' + ) + $$, + 23505, NULL, + 'No duplicate geometries can be inserted into fairway_dimensions'); + +SELECT lives_ok($$ + INSERT INTO waterway.fairway_dimensions ( + area, level_of_service, + min_width, max_width, min_depth, source_organization, staging_done + ) VALUES ( + ST_GeogFromText('MULTIPOLYGON(((0 0, 1 1, 1 0, 0 0)))'), 3, + 100, 200, 2, 'test', false + ), ( + ST_GeogFromText('MULTIPOLYGON(((0 0, 1 1, 1 0, 0 0)))'), 3, + 100, 200, 2, 'test', true + ) + $$, + 'Duplicate fairway area can be inserted if stage_done differs'); + +SELECT throws_ok($$ + UPDATE waterway.fairway_dimensions SET staging_done = true + $$, + 23505, NULL, + 'No duplicate fairway area can be released from staging area');
--- a/schema/run_tests.sh Fri Mar 27 00:40:52 2020 +0100 +++ b/schema/run_tests.sh Fri Mar 27 12:24:25 2020 +0100 @@ -80,7 +80,7 @@ -c 'SET client_min_messages TO WARNING' \ -c "DROP ROLE IF EXISTS $TEST_ROLES" \ -f "$BASEDIR"/tap_tests_data.sql \ - -c "SELECT plan(85 + ( + -c "SELECT plan(88 + ( SELECT count(*)::int FROM information_schema.tables WHERE table_schema = 'waterway'))" \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/updates/1431/01.prevent_equal_fairway_areas.sql Fri Mar 27 12:24:25 2020 +0100 @@ -0,0 +1,4 @@ +CREATE CONSTRAINT TRIGGER fairway_dimensions_area_unique + AFTER INSERT OR UPDATE OF area, staging_done + ON waterway.fairway_dimensions + FOR EACH ROW EXECUTE FUNCTION prevent_st_equals('area', 'staging_done');