From 9dd173b57744179541f544ffc6aed10d6841312b Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Thu, 22 Feb 2024 10:50:48 +0100
Subject: [PATCH] upate: sql query and json conversion, not tested

---
 server/map/get_markers.py | 72 ++++++++++++++++++---------------------
 1 file changed, 34 insertions(+), 38 deletions(-)

diff --git a/server/map/get_markers.py b/server/map/get_markers.py
index fccd78df..13b97aa5 100644
--- a/server/map/get_markers.py
+++ b/server/map/get_markers.py
@@ -3,79 +3,75 @@ import json
 
 # get_markers requests all marker data or valid markers, converts the data to json, and writes
 # the data to the response object
-def get_all_markers(self, cursor, valid: bool):
+def get_all_markers(self, cursor, valid: bool, waterBodyName):
     try:
         # NB: interval temporarily hard coded to 5 days
         if valid:
             cursor.execute('''
-                SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, d.Latitude, d.Longitude,
-                       d.IceTop, d.IceBottom, d.CalculatedThickness, d.Accuracy, s.SensorType, s.Active,
-                       c.CornerID, c.CornerLatitude, c.CornerLongitude, b.Name
+                SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, 
+                       s.SensorType, s.Active, 
+                       b.Name,
+                       d.SubDivisionID, d.GroupID, d.MinimumThickness, 
+                       d.AverageThickness, d.CenterLatitude, d.CenterLongitude, 
+                       d.Accuracy
                 FROM Measurement m
                 INNER JOIN Sensor s ON m.SensorID = s.SensorID
-                INNER JOIN Data d ON m.MeasurementID = d.MeasurementID
-                LEFT JOIN Corner c ON m.MeasurementID = c.MeasurementID
                 INNER JOIN BodyOfWater b ON m.WaterBodyName = b.Name
-                WHERE m.TimeMeasured > DATE_SUB(NOW(), INTERVAL 5 DAY);
-            ''')
+                LEFT JOIN SubDivision d ON m.MeasurementID = d.MeasurementID
+                WHERE m.TimeMeasured > DATE_SUB(NOW(), INTERVAL 5 DAY) & b.Name = ?
+            ''', waterBodyName)
         else:
             cursor.execute('''
-                SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, d.Latitude, d.Longitude,
-                       d.IceTop, d.IceBottom, d.CalculatedThickness, d.Accuracy, s.SensorType, s.Active,
-                       c.CornerID, c.CornerLatitude, c.CornerLongitude, b.Name
+                SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, 
+                       s.SensorType, s.Active, 
+                       b.Name,
+                       d.SubDivisionID, d.GroupID, d.MinimumThickness, 
+                       d.AverageThickness, d.CenterLatitude, d.CenterLongitude, 
+                       d.Accuracy
                 FROM Measurement m
                 INNER JOIN Sensor s ON m.SensorID = s.SensorID
-                INNER JOIN Data d ON m.MeasurementID = d.MeasurementID
-                LEFT JOIN Corner c ON m.MeasurementID = c.MeasurementID
                 INNER JOIN BodyOfWater b ON m.WaterBodyName = b.Name
-            ''')
+                LEFT JOIN SubDivision d ON m.MeasurementID = d.MeasurementID
+                WHERE b.Name = ?
+            ''', waterBodyName)
 
         rows = cursor.fetchall()
 
+        # Container for all fetched measurement objects
         measurement_data = {}
 
-        # Iterate over the fetched rows
+        # Iterate over all fetched rows
         for row in rows:
             measurement_id = row[0]
 
-            # Create data object for current row
-            data_object = {
-                'Latitude': row[3],
-                'Longitude': row[4],
-                'IceTop': row[5],
-                'IceBottom': row[6],
-                'CalculatedThickness': row[7],
-                'Accuracy': row[8]
-            }
-
-            # Create corner object for current row
-            corner_object = {
-                'CornerID': row[11],
-                'Latitude': row[12],
-                'Longitude': row[13]
+            # Create subdivision object for current row
+            sub_division = {
+                'SubDivisionID': row[3],
+                'GroupID': row[4],
+                'MinimumThickness': row[5],
+                'AverageThickness': row[6],
+                'CenterLatitude': row[7],
+                'CenterlONGITUDE': row[8],
+                'Accuracy': row[9]
             }
 
             # Check if measurement ID already exists in measurement_data
             if measurement_id in measurement_data:
                 # Check if the data object already exists in the list
-                if data_object not in measurement_data[measurement_id]['Data']:
-                    measurement_data[measurement_id]['Data'].append(data_object)
+                if sub_division not in measurement_data[measurement_id]['SubDivision']:
+                    measurement_data[measurement_id]['SubDivision'].append(sub_division)
 
-                # Check if the corner object already exists in the list
-                if corner_object not in measurement_data[measurement_id]['Corners']:
-                    measurement_data[measurement_id]['Corners'].append(corner_object)
             else:
                 # Create a new entry for measurement_id if it does not already exist in the list
                 measurement_data[measurement_id] = {
                     'MeasurementID': measurement_id,
                     'TimeMeasured': row[2],
-                    'Sensor': {
+                    'Sensor': {  # Each measurement only has one related sensor
                         'SensorID': row[1],
                         'SensorType': row[9],
                         'Active': bool(row[10])
                     },
-                    'Data': [data_object],
-                    'Corners': [corner_object],
+                    'SubDivision': [sub_division],  # Array of sub_division objects
                     'BodyOfWater': row[14]
                 }
 
-- 
GitLab