Add date filter stub

This commit is contained in:
2026-01-04 13:42:46 +01:00
parent f5e8a0afa5
commit b081cc5854
2 changed files with 90 additions and 1 deletions

View File

@@ -0,0 +1,70 @@
from datetime import datetime
from flask import request, jsonify
from src.models import logger
from src.services.mongo_service import MongoService
class TelemetryController:
_database_service : MongoService = None
def __init__(self, app, database_service : MongoService):
self._register_routes(app)
def _register_routes(self, app):
app.add_url_rule("/telemetry/history/sound", view_func=self.sound, methods=['GET'])
app.add_url_rule("/telemetry/history/light", view_func=self.light, methods=['GET'])
app.add_url_rule("/telemetry/history/gps", view_func=self.gps, methods=['GET'])
def sound(self):
try:
odata_filter = request.args.get("$filter")
start_date, end_date = self._extract_dates_from_odata(odata_filter)
return self._database_service.find_by_date("telemetry", start_date, end_date)
except Exception as e:
logger.log_info(e)
def light(self):
try:
odata_filter = request.args.get("$filter")
start_date, end_date = self._extract_dates_from_odata(odata_filter)
return self._database_service.find_by_date("telemetry", start_date, end_date)
except Exception as e:
logger.log_info(e)
def gps(self):
try:
odata_filter = request.args.get("$filter")
start_date, end_date = self._extract_dates_from_odata(odata_filter)
return self._database_service.find_by_date("telemetry", start_date, end_date)
except Exception as e:
logger.log_info(e)
def _extract_dates_from_odata(self, filter_str):
start_date = None
end_date = None
if not filter_str:
return start_date, end_date
conditions = filter_str.split("and")
for cond in conditions:
parts = cond.strip().split()
if len(parts) != 3:
continue
field, operator, value = parts
try:
dt = datetime.fromisoformat(value)
except ValueError:
continue
if operator == "ge":
start_date = dt
elif operator == "le":
end_date = dt
return start_date, end_date

View File

@@ -1,4 +1,5 @@
import json import json
from datetime import datetime
from pymongo import MongoClient from pymongo import MongoClient
from pymongo.synchronous.database import Database from pymongo.synchronous.database import Database
@@ -27,13 +28,31 @@ class MongoService:
except Exception as e: except Exception as e:
logger.log_info(e) logger.log_info(e)
def find(self, collection: str, field: str, value): def find_by_value(self, collection: str, field: str, value):
try : try :
collection = self._db[collection] collection = self._db[collection]
return list(collection.find({field: value})) return list(collection.find({field: value}))
except Exception as e: except Exception as e:
logger.log_info(e) logger.log_info(e)
def find_by_date(self, collection: str, filters: dict = None, timestamp_field: str = "created_at",
start_time: datetime = None, end_time: datetime = None):
try:
collection = self._db[collection]
query = filters.copy() if filters else {}
if start_time or end_time:
query[timestamp_field] = {}
if start_time:
query[timestamp_field]["$gte"] = start_time
if end_time:
query[timestamp_field]["$lte"] = end_time
return list(collection.find(query))
except Exception as e:
logger.log_info(e)
return []
def _to_document(self, obj): def _to_document(self, obj):
if obj is None or isinstance(obj, (str, int, float, bool)): if obj is None or isinstance(obj, (str, int, float, bool)):
return obj return obj