|
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