You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
4.7 KiB
140 lines
4.7 KiB
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Anik\Amqp\Exchange;
|
|
use Anik\Amqp\Facades\Amqp;
|
|
use App\Events\ModelSaved;
|
|
use PhpAmqpLib\Wire\AMQPTable;
|
|
use Anik\Amqp\PublishableMessage;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Database\Eloquent\Relations\Pivot;
|
|
|
|
class ReportableRelation extends Pivot
|
|
{
|
|
public const CREATED = 10;
|
|
|
|
public const UPDATED = 20;
|
|
|
|
public const DELETED = 30;
|
|
|
|
protected static function booted()
|
|
{
|
|
static::created(function ($model) {
|
|
$model->action = static::CREATED;
|
|
static::report($model);
|
|
});
|
|
static::updated(function ($model) {
|
|
$model->action = static::UPDATED;
|
|
static::report($model);
|
|
});
|
|
static::deleted(function ($model) {
|
|
$model->action = static::DELETED;
|
|
static::report($model);
|
|
});
|
|
}
|
|
|
|
public static function report($model)
|
|
{
|
|
$payload = [
|
|
'auth' => Auth::id(),
|
|
'timestamp' => $model->freshTimestamp(),
|
|
'business' => $model->pivotParent->getValueOf('business_id'),
|
|
'info' => \request('_business_info') ?? null,
|
|
'project' => $model->pivotParent->getValueOf('project_id'),
|
|
'data' => [
|
|
'sprint_id' => $model->pivotParent->getValueOf('sprint_id'),
|
|
'system_id' => $model->pivotParent->getValueOf('system_id'),
|
|
'workflow_id' => $model->pivotParent->getValueOf('workflow_id'),
|
|
'status_id' => $model->pivotParent->getValueOf('status_id'),
|
|
'task_id' => $model->pivotParent->getValueOf('task_id'),
|
|
'user_id' => $model->user_id,
|
|
'table_name' => $model->getTable(),
|
|
'crud_id' => $model->action,
|
|
'original' => $model->getOriginal() + $model->getAttributes(),
|
|
'diff' => $model->getChanges(),
|
|
],
|
|
'from' => env('CONTAINER_NAME'),
|
|
];
|
|
|
|
ModelSaved::dispatch(json_encode($payload));
|
|
// $message = new PublishableMessage(json_encode($payload));
|
|
//
|
|
// $routers = [
|
|
// "activity_exchange" => ["name" => "activity",],
|
|
// "notif_exchange" => ["name" => "notif",],
|
|
// "socket_exchange" => ["name" => "socket",],
|
|
// ];
|
|
//
|
|
// foreach ($routers as $exchange => $properties) {
|
|
// $message->setProperties(["application_headers" => new AMQPTable($properties)]);
|
|
//
|
|
// $message->setExchange(new Exchange($exchange));
|
|
//
|
|
// Amqp::publish($message, "");
|
|
// }
|
|
}
|
|
|
|
public function properties()
|
|
{
|
|
return $properties = [
|
|
// Message properties
|
|
'Persistent' => '1', // Marks a message as persistent
|
|
|
|
// those familiar with the protocol may choose to use this property instead of Persistent. They control the same thing.
|
|
// Non-persistent (1) or persistent (2).
|
|
'DeliveryMode' => '',
|
|
|
|
// Used to describe the mime-type of the encoding. For example for the often used JSON encoding it is a good practice to set this property to: application/json.
|
|
// MIME content type.
|
|
// short string (max. 256 characters)
|
|
'content_type' => '',
|
|
|
|
// Commonly used to name a callback queue.
|
|
// Address to reply to.
|
|
// short string (max. 256 characters)
|
|
'reply_to' => '',
|
|
|
|
// Useful to correlate RPC responses with requests.
|
|
// Application correlation identifier.
|
|
// short string (max. 256 characters)
|
|
'correlation_id' => '',
|
|
|
|
/** Rarley Used Properties */
|
|
|
|
// This defines the message priority
|
|
// Message priority, 0 to 9
|
|
'priority' => '',
|
|
|
|
// This is the message time stamp
|
|
// Message timestamp.
|
|
'timestamp' => '',
|
|
|
|
// This is the broker with whom the user sends the message (by default, it is "guest").
|
|
// Creating user id.
|
|
// short string (max. 256 characters)
|
|
'user_id' => '',
|
|
|
|
// MIME content encoding.
|
|
// short string (max. 256 characters)
|
|
'content_encoding' => '',
|
|
|
|
// Message expiration specification.
|
|
// short string (max. 256 characters)
|
|
'expiration' => '',
|
|
|
|
// Application message identifier.
|
|
// short string (max. 256 characters)
|
|
'message_id' => '',
|
|
|
|
// Message type name.
|
|
// short string (max. 256 characters)
|
|
'type' => '',
|
|
|
|
// Creating application id.
|
|
// short string (max. 256 characters)
|
|
'app_id' => '',
|
|
'cluster_id' => '',
|
|
];
|
|
}
|
|
}
|