@@ -25,12 +25,14 @@ import entity.zone.Room
25
25
import entity.zone.RoomEnvironmentalData
26
26
import entity.zone.RoomID
27
27
import org.litote.kmongo.KMongo
28
+ import org.litote.kmongo.ascendingSort
28
29
import org.litote.kmongo.descendingSort
29
30
import org.litote.kmongo.div
30
31
import org.litote.kmongo.eq
31
32
import org.litote.kmongo.find
32
33
import org.litote.kmongo.findOne
33
34
import org.litote.kmongo.getCollection
35
+ import org.litote.kmongo.gt
34
36
import org.litote.kmongo.lte
35
37
import org.litote.kmongo.setValue
36
38
import java.time.Instant
@@ -80,6 +82,30 @@ class DatabaseManager(customConnectionString: String? = null) : RoomDatabaseMana
80
82
}.toRoomEnvironmentalData()
81
83
)
82
84
85
+ override fun getRoomEnvironmentalData (
86
+ roomId : RoomID ,
87
+ start : Instant ,
88
+ end : Instant ,
89
+ ): List <Pair <Instant , RoomEnvironmentalData >>? {
90
+ var roomCurrentData = this .findBy(roomId, start)?.environmentalData
91
+ if (roomCurrentData != null ) {
92
+ // The room exist
93
+ return this .roomTimeSeriesCollection.find(
94
+ TimeSeriesRoomEnvironmentalData ::metadata / TimeSeriesRoomMetadata ::roomId eq roomId,
95
+ TimeSeriesRoomEnvironmentalData ::dateTime gt start,
96
+ TimeSeriesRoomEnvironmentalData ::dateTime lte end
97
+ ).ascendingSort(TimeSeriesRoomEnvironmentalData ::dateTime).toList().map {
98
+ // update current data about the room in order to have an update image of it
99
+ val updatedRoom = mapOf (it.metadata.type to it).toRoomEnvironmentalData(roomCurrentData)
100
+ roomCurrentData = updatedRoom
101
+ // map the update to corresponding date time
102
+ it.dateTime to updatedRoom
103
+ }
104
+ } else {
105
+ return null // The room does not exist
106
+ }
107
+ }
108
+
83
109
override fun getAllRooms (): Set <Room > = this .roomCollection.find().toSet()
84
110
85
111
override fun updateRoomEnvironmentalData (
0 commit comments