Commit a2583d01 authored by Ильнур Табулдин's avatar Ильнур Табулдин :skull_crossbones:
Browse files

s

Showing with 213 additions and 25 deletions
+213 -25
......@@ -2,9 +2,89 @@
namespace deck\logger;
use deck\exceptions\ErrorHandler;
use Yii;
use yii\filters\Cors;
use yii\web\Response;
class Module extends \yii\base\Module
{
public $controllerNamespace = 'deck\logger\api\controllers';
public $serializerMappingClass;
public $urlMappingClass;
public function behaviors(): array
{
return [
'corsFilter' => [
'class' => Cors::class,
'cors' => [
'Origin' => ['*'],
],
],
];
}
/**
* @inheritdoc
*/
public function init(): void
{
$rules = [
'GET logger/<controller>' => 'logger/<controller>/index',
];
Yii::$app->getUrlManager()->addRules($rules, false);
parent::init();
Yii::configure($this, [
'components' => [
'errorHandler' => [
'class' => ErrorHandler::class,
'errorAction' => 'logger/error',
]
],
]);
$handler = $this->get('errorHandler');
Yii::$app->set('errorHandler', $handler);
$handler->register();
Yii::$app->user->enableSession = false;
Yii::$app->user->loginUrl = NULL;
Yii::$app->response->format = Response::FORMAT_JSON;
if (Yii::$app->request->method == 'OPTIONS') {
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: *');
header('Access-Control-Allow-Headers: *');
Yii::$app->response->statusCode = 200;
die();
}
Yii::$app->response->on(Response::EVENT_BEFORE_SEND, function ($event) {
$response = $event->sender;
if (Yii::$app->response->statusCode != 200 && Yii::$app->response->statusCode != 201) {
$error = $response->data;
$response->data = [
'data' => (object)[],
'error' => $error
];
} else {
if ($response->content !== null) {
return $response->content;
} else {
$response->data = [
'data' => $response->data,
'error' => (object)[]
];
}
}
});
}
/**
* @inheritdoc
*/
public function beforeAction($action): bool
{
Yii::$app->request->enableCsrfCookie = false;
return parent::beforeAction($action);
}
}
\ No newline at end of file
<?php
namespace deck\logger\api\controllers;
use deck\logger\api\models\Action\ActionSerializer;
use yii\rest\Controller;
class ActionController extends Controller
{
public function actionIndex(): array
{
return ActionSerializer::find()->orderBy(['id' => SORT_ASC])->all();
}
}
\ No newline at end of file
<?php
namespace deck\logger\api\controllers;
use deck\logger\api\models\EntityType\EntityTypeSerializer;
use yii\rest\Controller;
class EntityTypeController extends Controller
{
public function actionIndex(): array
{
return EntityTypeSerializer::find()->orderBy(['name' => SORT_ASC])->all();
}
}
\ No newline at end of file
<?php
namespace deck\logger\api\controllers;
use deck\logger\api\models\Error;
use Yii;
use yii\rest\Controller;
class SiteController extends Controller
{
public function actionError(): Error
{
$exception = Yii::$app->errorHandler->exception;
if ($exception !== null) {
return new Error([
'message' => $exception->getMessage(),
'statusCode' => $exception->statusCode
]);
}
return new Error([
'message' => 'Undefined error',
'statusCode' => 500
]);
}
}
\ No newline at end of file
<?php
namespace deck\logger\api\models\Action;
use deck\logger\models\Action;
class ActionSerializer extends Action
{
}
\ No newline at end of file
<?php
namespace deck\logger\api\models\EntityType;
use deck\logger\models\EntityType;
class EntityTypeSerializer extends EntityType
{
}
\ No newline at end of file
<?php
namespace deck\logger\api\models;
use Yii;
use yii\base\Model;
/**
* Class Error
* @package backend\models
*/
class Error extends Model
{
public string $message;
public int $statusCode;
public array $fields = [];
public function init()
{
Yii::$app->response->statusCode = $this->statusCode;
parent::init();
}
public function fields(): array
{
$fields = [
'message',
'statusCode'
];
switch ($this->statusCode) {
case 422:
{
$fields[] = 'fields';
break;
}
default:
{
}
}
return $fields;
}
}
\ No newline at end of file
......@@ -2,28 +2,27 @@
namespace deck\logger\api\models\Logger;
use common\helpers\DateTimeHelper;
use yii\data\ActiveDataProvider;
class LoggerSearch extends LoggerSerializer
{
public $startDatetime;
public $endDatetime;
public $entityTypeId;
public $start_datetime;
public $end_datetime;
public $entity_type_id;
public function rules(): array
{
return [
[['startDatetime', 'endDatetime'], 'string'],
['entityTypeId', 'integer'],
[['start_datetime', 'end_datetime'], 'datetime', 'format' => 'php:' . DateTimeHelper::SERVER_DATETIME_FORMAT],
[['start_datetime', 'end_datetime'], 'string'],
[['entity_type_id', 'user_id'], 'integer'],
];
}
public function search($params): ActiveDataProvider
{
$query = LoggerSerializer::find();
// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
......@@ -35,24 +34,17 @@ class LoggerSearch extends LoggerSerializer
$query->where('0=1');
return $dataProvider;
}
$query->andFilterWhere([
'logger.user_id' => $this->user_id,
]);
if (isset($this->startDatetime)) {
$query
->andFilterWhere(['>=', 'logger.created_at', $this->startDatetime])
->andFilterWhere(['>=', 'logger.updated_at', $this->startDatetime]);
}
if (isset($this->endDatetime)) {
$query
->andFilterWhere(['<=', 'logger.created_at', $this->endDatetime])
->andFilterWhere(['<=', 'logger.updated_at', $this->endDatetime]);
}
if (isset($this->entityTypeId)) {
$query
->andFilterWhere(['logger.user_id' => $this->user_id])
->andFilterWhere(['>=', 'logger.created_at', $this->start_datetime])
->andFilterWhere(['>=', 'logger.updated_at', $this->start_datetime])
->andFilterWhere(['<=', 'logger.created_at', $this->end_datetime])
->andFilterWhere(['<=', 'logger.updated_at', $this->end_datetime]);
if ($this->entity_type_id !== null) {
$query->innerJoin('logger.event e', 'e.logger_id=logger.id');
$query->andFilterWhere([
'e.entity_type_id' => $this->entityTypeId,
'e.entity_type_id' => $this->entity_type_id,
]);
}
......
File mode changed from 100644 to 100755
......@@ -9,7 +9,7 @@ class EventSerializer extends Event
{
public function fields(): array
{
$fields = parent::fields();
$fields = array_merge(parent::fields(), ['action', 'entityType']);
$serializerMappingClass = Yii::$app->modules['logger']->serializerMappingClass;
$serializerMap = $serializerMappingClass::map();
if (array_key_exists($this->entity_type_id, $serializerMap)) {
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
Supports Markdown
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