From 76b1f07febd72166f73b47188acfd1b3e9102298 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Tue, 23 Apr 2019 11:02:12 +0000 Subject: [PATCH] Create rider tracker service. Create a test command to test rider tracker service. #180 --- src/Command/TestRiderTrackerCommand.php | 46 ++++++++++++++++++++ src/Service/RiderTracker.php | 58 +++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 src/Command/TestRiderTrackerCommand.php create mode 100644 src/Service/RiderTracker.php diff --git a/src/Command/TestRiderTrackerCommand.php b/src/Command/TestRiderTrackerCommand.php new file mode 100644 index 00000000..7b26a9ed --- /dev/null +++ b/src/Command/TestRiderTrackerCommand.php @@ -0,0 +1,46 @@ +setName('test:ridertracker') + ->setDescription('Test the rider tracker service') + ->setHelp('Test the rider tracker service.') + ->addArgument('rider_id', InputArgument::REQUIRED, 'Rider ID'); + } + + public function __construct(RiderTracker $rtracker) + { + $this->rtracker = $rtracker; + + parent::__construct(); + } + + public function execute(InputInterface $input, OutputInterface $output) + { + $rider_id = $input->getArgument('rider_id'); + + $coordinates = $this->rtracker->getRiderLocation($rider_id); + + if ($coordinates != null) + { + echo "Rider Location: " . $coordinates->getLongitude() . "," . $coordinates->getLatitude() . "\n"; + } + else + { + echo "Invalid rider id." . "\n"; + } + } +} diff --git a/src/Service/RiderTracker.php b/src/Service/RiderTracker.php new file mode 100644 index 00000000..59bf1f17 --- /dev/null +++ b/src/Service/RiderTracker.php @@ -0,0 +1,58 @@ +em = $em; + + // TODO: make it read redis settings from config + // build a service maybe? + $this->redis = new PredisClient(); + } + + protected function getRiderKey($rider_id) + { + return self::RIDER_PREFIX_KEY . '.' . $rider_id; + } + + public function getRiderLocation($rider_id) + { + // check if rider id exists or is valid + $rider = $this->em->getRepository(Rider::class)->find($rider_id); + if ($rider != null) + { + $coordinates = $rider->getHub()->getCoordinates(); + + $key = $this->getRiderKey($rider_id); + + // check redis cache for rider information + if (($this->redis->hexists($key, 'longitude')) && + ($this->redis->hexists($key, 'latitude'))) + { + $long = $this->redis->hget($key, 'longitude'); + $lat = $this->redis->hget($key, 'latitude'); + + $coordinates = new Point($long, $lat); + } + + return $coordinates; + + } + } +}