diff pkg/imports/agm.go @ 4049:4a7c2140e44b

AGM import: Generate entries for deleted items. To detect them: Array with two lines. The second is null.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 24 Jul 2019 17:09:30 +0200
parents a18bf6bc7e3c
children 033a8e3fec8e 15c9d4064f0f
line wrap: on
line diff
--- a/pkg/imports/agm.go	Wed Jul 24 16:11:51 2019 +0200
+++ b/pkg/imports/agm.go	Wed Jul 24 17:09:30 2019 +0200
@@ -26,6 +26,7 @@
 	"math"
 	"os"
 	"path/filepath"
+	"sort"
 	"strconv"
 	"strings"
 	"time"
@@ -497,9 +498,10 @@
 	var removed int
 
 	// Issue deletes
-	for _, old := range oldGMLines {
+	for _, key := range sortByLocationCode(oldGMLines) {
+		old := oldGMLines[key]
 		removed += len(old)
-		for _, line := range old {
+		for _, line := range sortByMeasureDate(old) {
 			if _, err := txTrackStmt.ExecContext(
 				ctx, importID, "waterway.gauge_measurements",
 				line.id,
@@ -507,6 +509,11 @@
 			); err != nil {
 				return nil, err
 			}
+			entries = append(entries, &agmSummaryEntry{
+				FKGaugeID:   line.Location,
+				MeasureDate: line.MeasureDate,
+				Versions:    []*agmLine{line, nil},
+			})
 		}
 	}
 
@@ -528,6 +535,32 @@
 	return entries, nil
 }
 
+func sortByLocationCode(data map[models.Isrs]map[int64]*agmLine) []models.Isrs {
+	keys := make([]models.Isrs, len(data))
+	var i int
+	for key := range data {
+		keys[i] = key
+		i++
+	}
+	sort.Slice(keys, func(i, j int) bool {
+		return keys[i].Less(&keys[j])
+	})
+	return keys
+}
+
+func sortByMeasureDate(data map[int64]*agmLine) []*agmLine {
+	lines := make([]*agmLine, len(data))
+	var i int
+	for _, line := range data {
+		lines[i] = line
+		i++
+	}
+	sort.Slice(lines, func(i, j int) bool {
+		return lines[i].MeasureDate.Before(lines[j].MeasureDate.Time)
+	})
+	return lines
+}
+
 func getOldGMLines(
 	ctx context.Context,
 	stmt *sql.Stmt,