diff --git a/common/components/DoorMoveContext.php b/common/components/DoorMoveContext.php index fe5574b..d270b28 100644 --- a/common/components/DoorMoveContext.php +++ b/common/components/DoorMoveContext.php @@ -4,14 +4,14 @@ namespace common\components; use yii\base\BaseObject; class DoorMoveContext extends BaseObject { -public $id; +public $requestId; public $identifier; public $device; public $direction; public $originalDirection; public $verifyOnly; -public $created_at; +public $createdAt; public $date; public $card; diff --git a/common/manager/DoorManager.php b/common/manager/DoorManager.php index 6673ec6..f2c9a48 100644 --- a/common/manager/DoorManager.php +++ b/common/manager/DoorManager.php @@ -44,8 +44,8 @@ class DoorManager extends BaseObject { $requestId = uniqid("", false); $context = new DoorMoveContext([ - 'id' => $requestId, - '$identifier' => $identifier, + 'requestId' => $requestId, + 'identifier' => $identifier, 'device' => $device, 'direction' => $direction, 'originalDirection' => $direction, @@ -70,7 +70,7 @@ class DoorManager extends BaseObject $createdAt = DateUtil::utcDateTime(); } - $context->created_at = $createdAt; + $context->createdAt = $createdAt; if (isset($date)) { $date = DateUtil::parseDateTime($date); @@ -153,14 +153,25 @@ class DoorManager extends BaseObject $context->error = true; $context->exception = $e->originalException; $context->errorCode = $e->errorCode; + + if ( $e->type == FitnessException::TYPE_BAD_REQUEST){ + throw new BadRequestHttpException($e->getMessage()); + } else { + throw new ServerErrorHttpException($e->getMessage()); + } + +// throw $e->originalException; +// throw new BadRequestHttpException(); } catch (\Exception $e) { $context->error = true; $context->exception = $e; $context->errorCode = "UNKNOWN"; + throw $e; } finally { // do logging $this->logContext($context); } + } /** @@ -170,7 +181,7 @@ class DoorManager extends BaseObject function logContext($ctx){ try{ $result = [ - 'requestId' => $ctx->id, + 'requestId' => $ctx->requestId, 'identifier' => $ctx->identifier, 'verifyOnly' => $ctx->verifyOnly, 'device' => $ctx->device, @@ -185,7 +196,7 @@ class DoorManager extends BaseObject 'customerName' => isset($ctx->customer) ? $ctx->customer->name : null, 'customerEmail' => isset($ctx->customer) ? $ctx->customer->email : null, 'key' => isset($ctx->key) ? $ctx->key->name : null, - 'idVirtualKey' => isset($ctx->virtualKey) ? $ctx->virtualKey->idVirtualKey : null, + 'idVirtualKey' => isset($ctx->virtualKey) ? $ctx->virtualKey->id : null, 'kind' => $ctx->kind, 'actions' => implode(",",$ctx->actions), 'error' => $ctx->error, @@ -195,14 +206,14 @@ class DoorManager extends BaseObject if ( $ctx->error === true ){ if ( isset($ctx->exception )){ - $result['errorMessage'] = substr( $ctx->exception->message,0,100); + $result['errorMessage'] = substr( $ctx->exception->getMessage(),0,100); } } \Yii::info("door log: " . implode(";", $result)); }catch (\Exception $e){ - \Yii::error("Failed to log door context"); + \Yii::error("Failed to log door context:". $e->getMessage()); } } @@ -547,9 +558,9 @@ class DoorManager extends BaseObject ); } - if (isset($virtualKey)) { - - if (!isset($virtualKey->direction_in_at)) { + if (isset($ctx->virtualKey)) { + \Yii::info("Move OUT: Virtual key set"); + if (!isset($ctx->virtualKey->direction_in_at)) { throw new FitnessException( "$ctx->requestId: Virtual key: move out without move in", FitnessException::TYPE_BAD_REQUEST, @@ -558,7 +569,7 @@ class DoorManager extends BaseObject ); } - if (isset($virtualKey->direction_out_at)) { + if (isset($ctx->virtualKey->direction_out_at)) { throw new FitnessException( "$ctx->requestId: Virtual key: already move out", FitnessException::TYPE_BAD_REQUEST, @@ -567,10 +578,10 @@ class DoorManager extends BaseObject ); } - $virtualKey->direction_out_at = Helper::getDateTimeString(); + $ctx->virtualKey->direction_out_at = Helper::getDateTimeString(); if (!$ctx->verifyOnly) { - $virtualKey->save(false); + $ctx->virtualKey->save(false); } } @@ -606,11 +617,11 @@ class DoorManager extends BaseObject \Yii::$app->db->transaction->commit(); \Yii::info("$ctx->requestId: Commited"); } catch (FitnessException $fe) { - \Yii::$app->db->transaction->rollBack(); + $this->doRollback(); \Yii::info("$ctx->requestId: rollbacked"); throw $fe; } catch (\Exception $e) { - \Yii::$app->db->transaction->rollBack(); + $this->doRollback(); \Yii::info("$ctx->requestId: rollbacked"); throw new FitnessException( "UNKNOWN_ERROR", @@ -623,6 +634,12 @@ class DoorManager extends BaseObject } } + function doRollback(){ + if ( isset(\Yii::$app->db->transaction ) && \Yii::$app->db->transaction->isActive ){ + \Yii::$app->db->transaction->rollBack(); + } + } + function getActiveInterval($intervals, $date) { foreach ($intervals as $interval) { diff --git a/docker/fitness/.env b/docker/fitness/.env index 5d4a13c..9e81705 100644 --- a/docker/fitness/.env +++ b/docker/fitness/.env @@ -1,2 +1,2 @@ FITNESS_REST_ALLOW_VERIFY_ONLY=true -DOOR_ENTRY_STRATEGY=door_pass \ No newline at end of file +DOOR_ENTRY_STRATEGY=door_pass111 \ No newline at end of file diff --git a/rest.http b/door-api.http similarity index 100% rename from rest.http rename to door-api.http diff --git a/frontend/web/doortest/index.html b/frontend/web/doortest/index.html new file mode 100644 index 0000000..42acee7 --- /dev/null +++ b/frontend/web/doortest/index.html @@ -0,0 +1,61 @@ + + +
+ + + +