Skip to content
Snippets Groups Projects
Commit 311e467b authored by Luke O'mahony's avatar Luke O'mahony
Browse files

upd: added missing sensor data controller and service, moved repository classes into own package

parent 61c8697c
Branches
No related merge requests found
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);
}
}
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 {
}
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);
}
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;
}
}
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);
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment