|
1 | 1 | from datetime import datetime, timedelta
|
2 | 2 | from os import environ
|
3 | 3 |
|
4 |
| -from common.convert_types_to_names import convert_types_to_names |
5 | 4 | from flask_restful import Resource
|
6 |
| -from models import AreaModel |
| 5 | +from models import AreaModel, SensorModel, SensorDataModel |
7 | 6 | from sqlalchemy import desc
|
8 | 7 |
|
9 | 8 |
|
10 | 9 | class Map(Resource):
|
11 | 10 | def get(self):
|
12 |
| - maxdate = datetime.now() - timedelta(hours=int(environ.get('MAX_RECORD_HOURS'))) |
| 11 | + latest_records = self._get_latest_records() |
| 12 | + aqi_records = [] |
13 | 13 |
|
14 |
| - areas = AreaModel.query.order_by(desc(AreaModel.created)).filter( |
15 |
| - AreaModel.created >= maxdate).all() |
| 14 | + for record in latest_records: |
| 15 | + aqi_record = AreaModel.query \ |
| 16 | + .order_by( |
| 17 | + AreaModel.created.desc() |
| 18 | + ).filter_by( |
| 19 | + latitude=record.latitude |
| 20 | + ).filter_by( |
| 21 | + longitude=record.longitude |
| 22 | + ).first() |
16 | 23 |
|
17 |
| - areas_coords = [] |
18 |
| - areas_list = [] |
| 24 | + if aqi_record: |
| 25 | + aqi_records.append(aqi_record.as_dict()) |
19 | 26 |
|
20 |
| - for area in areas: |
21 |
| - if (area.latitude, area.longitude) in areas_coords: |
| 27 | + return aqi_records |
| 28 | + |
| 29 | + def _get_latest_records(self): |
| 30 | + sensors = SensorModel.query.all() |
| 31 | + |
| 32 | + latest_records = [] |
| 33 | + for sensor in sensors: |
| 34 | + record = SensorDataModel.query.order_by(SensorDataModel.recorded.desc()).filter_by( |
| 35 | + internal_id=sensor.external_id).first() |
| 36 | + |
| 37 | + if not record: |
22 | 38 | continue
|
23 | 39 |
|
24 |
| - areas_coords.append((area.latitude, area.longitude)) |
25 |
| - areas_list.append(convert_types_to_names(area)) |
| 40 | + timedelta = datetime.now() - record.recorded |
| 41 | + if (timedelta.seconds // 3600) <= int(environ.get('MAX_RECORD_HOURS')): |
| 42 | + latest_records.append(record) |
26 | 43 |
|
27 |
| - return areas_list |
| 44 | + return latest_records |
0 commit comments