import '../../domain/models/sensor.dart'; import '../sources/localiser/realtime_data_client.dart'; import '../sources/localiser/sensor_client.dart'; import 'sensor_repository.dart'; class PhoenixSensorRepository implements SensorRepository { const PhoenixSensorRepository({ required this.client, required this.realtime, }); final SensorClient client; final RealtimeDataClient realtime; @override Future createSensor(String sensorId, {String? name}) async => Sensor.fromJson(await client.createSensor(sensorId, name: name)); @override Future> getSensors() async { final list = await client.getSensors(); return list.map((j) => Sensor.fromJson(j as Map)).toList(); } @override Future> getUnplacedSensors() async { final list = await client.getUnplacedSensors(); return list.map((j) => Sensor.fromJson(j as Map)).toList(); } @override Future getSensor(int id) async => Sensor.fromJson(await client.getSensor(id)); @override Future updateSensor(int id, {String? name}) async { final params = {}; if (name != null) params['name'] = name; return Sensor.fromJson(await client.updateSensor(id, params)); } @override Future deleteSensor(int id) => client.deleteSensor(id); @override Future placeSensor(int id, {required int roomId, required double x, required double y}) async => Sensor.fromJson( await client.placeSensor(id, {'room_id': roomId, 'x': x, 'y': y})); @override Future unplaceSensor(int id) async => Sensor.fromJson(await client.unplaceSensor(id)); @override Future getVersion(int id) => client.getVersion(id); @override Stream> sensorEvents() => realtime .channelMessages('sensors') .map((m) => {'event': m.event, ...m.payload}); }