diff --git a/src/main/java/com/backend/glowhouse/controller/SensorDataController.java b/src/main/java/com/backend/glowhouse/controller/SensorDataController.java new file mode 100644 index 0000000000000000000000000000000000000000..175c78fd1846725ea3cb7f6a365bfdbe445c9dfb --- /dev/null +++ b/src/main/java/com/backend/glowhouse/controller/SensorDataController.java @@ -0,0 +1,42 @@ +package com.backend.glowhouse.controller; + +import com.backend.glowhouse.model.DataTableItem; +import com.backend.glowhouse.model.SensorData; +import com.backend.glowhouse.service.SensorDataService; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Date; +import java.util.List; + +@RestController +@RequestMapping("/api/sensorData") +public class SensorDataController { + private ObjectMapper mapper = new ObjectMapper(); + private SensorDataService sensorDataService; + + @Autowired + public SensorDataController(SensorDataService sensorDataService) { + this.sensorDataService = sensorDataService; + } + + @GetMapping("/aggregateData") + @PreAuthorize("hasRole('USER')") + public String aggregateSensorDataBetweenDates( + @PathVariable(value = "deviceId") String deviceId, + @PathVariable(value = "startTime") long startTime, + @PathVariable(value = "endTime") long endTime, + @PathVariable(value = "dataType") String dataType) throws JsonProcessingException { + + + List<DataTableItem> sensorDataList = this.sensorDataService.retrieveSensorDataBetweenDates(deviceId, startTime, endTime, dataType); + + return mapper.writeValueAsString(sensorDataList); + } +} diff --git a/src/main/java/com/backend/glowhouse/repository/device/SensorDataRepository.java b/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepository.java similarity index 68% rename from src/main/java/com/backend/glowhouse/repository/device/SensorDataRepository.java rename to src/main/java/com/backend/glowhouse/repository/data/SensorDataRepository.java index cb8455e86a8b07994eafac9a5e2ec963954feb80..2668f9a1a9628fc9b84de4378c0bc6e5905b91b1 100644 --- a/src/main/java/com/backend/glowhouse/repository/device/SensorDataRepository.java +++ b/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepository.java @@ -1,10 +1,10 @@ -package com.backend.glowhouse.repository.device; +package com.backend.glowhouse.repository.data; import com.backend.glowhouse.model.SensorData; import org.springframework.data.mongodb.repository.MongoRepository; import java.util.List; -public interface SensorDataRepository extends MongoRepository<SensorData, String> { +public interface SensorDataRepository extends MongoRepository<SensorData, String>, SensorDataRepositoryCustom { } diff --git a/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepositoryCustom.java b/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepositoryCustom.java new file mode 100644 index 0000000000000000000000000000000000000000..48ce4ac5c9bd53fc167731d7145a32394a8458c2 --- /dev/null +++ b/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepositoryCustom.java @@ -0,0 +1,10 @@ +package com.backend.glowhouse.repository.data; + +import com.backend.glowhouse.model.DataTableItem; + +import java.util.Date; +import java.util.List; + +public interface SensorDataRepositoryCustom { + List<DataTableItem> findDataByDeviceIdBetweenDates(String deviceId, Date startDate, Date endDate, String dataType); +} diff --git a/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepositoryImpl.java b/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepositoryImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..76be6fa991adf8cd52b9df0b1de4bc1277934ac9 --- /dev/null +++ b/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepositoryImpl.java @@ -0,0 +1,57 @@ +package com.backend.glowhouse.repository.data; + +import com.backend.glowhouse.model.DataTableItem; +import com.backend.glowhouse.model.SensorData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class SensorDataRepositoryImpl implements SensorDataRepositoryCustom { + private final MongoTemplate mongoTemplate; + + @Autowired + public SensorDataRepositoryImpl(MongoTemplate mongoTemplate) { + this.mongoTemplate = mongoTemplate; + } + + @Override + public List<DataTableItem> findDataByDeviceIdBetweenDates(String deviceId, Date startDate, Date endDate, String dataType) { + //Query for existing device + Query query = new Query(); + query.addCriteria(Criteria.where("dId").is(deviceId)); + query.addCriteria(Criteria.where("date").gte(startDate)); + query.addCriteria(Criteria.where("date").lte(endDate)); + + List<SensorData> sensorDataList = mongoTemplate.find(query, SensorData.class); + + List<DataTableItem> dataTable = new ArrayList<>(); + for (SensorData data : sensorDataList) { + if (data.getDate() != null) { + float value = 0f; + + switch (dataType) { + case "t": + value = data.getT(); + break; + case "h": + value = data.getH(); + break; + case "ph": + value = data.getPh(); + break; + } + + if (value != 0f) { + dataTable.add(new DataTableItem(data.getDate().getTime(), value)); + } + } + } + + return dataTable; + } +} diff --git a/src/main/java/com/backend/glowhouse/service/SensorDataService.java b/src/main/java/com/backend/glowhouse/service/SensorDataService.java index 08332daacce50688ede6c06ce1e6532cd46293eb..79b47ce33e17c4333e8362b1c961fbff7c65b024 100644 --- a/src/main/java/com/backend/glowhouse/service/SensorDataService.java +++ b/src/main/java/com/backend/glowhouse/service/SensorDataService.java @@ -1,10 +1,12 @@ package com.backend.glowhouse.service; +import com.backend.glowhouse.model.DataTableItem; import com.backend.glowhouse.model.SensorData; -import com.backend.glowhouse.repository.device.SensorDataRepository; +import com.backend.glowhouse.repository.data.SensorDataRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Date; import java.util.List; @Service @@ -23,4 +25,11 @@ public class SensorDataService { public void processMultipleSensorData(List<SensorData> sensorData) { this.sensorDataRepository.saveAll(sensorData); } + + public List<DataTableItem> retrieveSensorDataBetweenDates(String deviceId, long startTime, long endTime, String dataType) { + Date startDate = new Date(startTime); + Date endDate = new Date(endTime); + + return this.sensorDataRepository.findDataByDeviceIdBetweenDates(deviceId, startDate, endDate, dataType); + } }