mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-14 20:40:49 +08:00
refactor model event again
This commit is contained in:
@@ -14,6 +14,8 @@ use App\Models\Torrent;
|
||||
use App\Models\User;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Nexus\Database\NexusDB;
|
||||
use Symfony\Component\Console\Command\Command as CommandAlias;
|
||||
|
||||
class FireEvent extends Command
|
||||
{
|
||||
@@ -22,14 +24,14 @@ class FireEvent extends Command
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'event:fire {--name=} {--id=}';
|
||||
protected $signature = 'event:fire {--name=} {--idKey=} {--idKeyOld=""}';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Fire a event, options: --name, --id';
|
||||
protected $description = 'Fire a event, options: --name, --idKey --idKeyOld';
|
||||
|
||||
protected array $eventMaps = [
|
||||
"torrent_created" => ['event' => TorrentCreated::class, 'model' => Torrent::class],
|
||||
@@ -49,18 +51,32 @@ class FireEvent extends Command
|
||||
public function handle()
|
||||
{
|
||||
$name = $this->option('name');
|
||||
$id = $this->option('id');
|
||||
$log = "FireEvent, name: $name, id: $id";
|
||||
$idKey = $this->option('idKey');
|
||||
$idKeyOld = $this->option('idKeyOld');
|
||||
$log = "FireEvent, name: $name, idKey: $idKey, idKeyOld: $idKeyOld";
|
||||
if (isset($this->eventMaps[$name])) {
|
||||
$eventName = $this->eventMaps[$name]['event'];
|
||||
$modelName = $this->eventMaps[$name]['model'];
|
||||
/** @var Model $model */
|
||||
$model = new $modelName();
|
||||
$result = call_user_func([$eventName, "dispatch"], $model::query()->find($id));
|
||||
$this->info("$log, success call dispatch, result: " . var_export($result, true));
|
||||
$model = unserialize(NexusDB::cache_get($idKey));
|
||||
if ($model instanceof Model) {
|
||||
$params = [$model];
|
||||
if ($idKeyOld) {
|
||||
$modelOld = unserialize(NexusDB::cache_get($idKeyOld));
|
||||
if ($modelOld instanceof Model) {
|
||||
$params[] = $modelOld;
|
||||
} else {
|
||||
$log .= ", invalid idKeyOld";
|
||||
}
|
||||
}
|
||||
$result = call_user_func_array([$eventName, "dispatch"], $params);
|
||||
$log .= ", success call dispatch, result: " . var_export($result, true);
|
||||
} else {
|
||||
$log .= ", invalid argument to call, it should be instance of: " . Model::class;
|
||||
}
|
||||
} else {
|
||||
$this->error("$log, no event match this name");
|
||||
$log .= ", no event match this name";
|
||||
}
|
||||
return Command::SUCCESS;
|
||||
$this->info($log);
|
||||
do_log($log);
|
||||
return CommandAlias::SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,14 +17,17 @@ class TorrentUpdated
|
||||
|
||||
public ?Model $model = null;
|
||||
|
||||
public ?Model $modelOld = null;
|
||||
|
||||
/**
|
||||
* Create a new event instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(Model $model)
|
||||
public function __construct(Model $model, Model $modelOld)
|
||||
{
|
||||
$this->model = $model;
|
||||
$this->modelOld = $modelOld;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
34
app/Listeners/DeductUserBonusWhenTorrentDeleted.php
Normal file
34
app/Listeners/DeductUserBonusWhenTorrentDeleted.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
|
||||
class DeductUserBonusWhenTorrentDeleted
|
||||
{
|
||||
/**
|
||||
* Create the event listener.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the event.
|
||||
*
|
||||
* @param object $event
|
||||
* @return void
|
||||
*/
|
||||
public function handle($event)
|
||||
{
|
||||
/**
|
||||
* Just a test
|
||||
*/
|
||||
$torrent = $event->model;
|
||||
do_log(sprintf("torrent: %d is deleted, and it's pieces_hash is: %s", $torrent->id, $torrent->pieces_hash));
|
||||
}
|
||||
}
|
||||
38
app/Listeners/TestTorrentUpdated.php
Normal file
38
app/Listeners/TestTorrentUpdated.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
|
||||
class TestTorrentUpdated
|
||||
{
|
||||
/**
|
||||
* Create the event listener.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the event.
|
||||
*
|
||||
* @param object $event
|
||||
* @return void
|
||||
*/
|
||||
public function handle($event)
|
||||
{
|
||||
/**
|
||||
* Just a test
|
||||
*/
|
||||
$torrentNew = $event->model;
|
||||
$torrentOld = $event->modelOld;
|
||||
do_log(sprintf(
|
||||
"torrent: %d is updated, old descr: %s, new descr: %s",
|
||||
$torrentNew->id, $torrentOld->descr, $torrentNew->descr
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -4,13 +4,16 @@ namespace App\Providers;
|
||||
|
||||
use App\Events\SeedBoxRecordUpdated;
|
||||
use App\Events\TorrentCreated;
|
||||
use App\Events\TorrentDeleted;
|
||||
use App\Events\TorrentUpdated;
|
||||
use App\Events\UserDestroyed;
|
||||
use App\Events\UserDisabled;
|
||||
use App\Listeners\DeductUserBonusWhenTorrentDeleted;
|
||||
use App\Listeners\FetchTorrentImdb;
|
||||
use App\Listeners\RemoveOauthTokens;
|
||||
use App\Listeners\RemoveSeedBoxRecordCache;
|
||||
use App\Listeners\SyncTorrentToEs;
|
||||
use App\Listeners\TestTorrentUpdated;
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||
@@ -27,15 +30,19 @@ class EventServiceProvider extends ServiceProvider
|
||||
Registered::class => [
|
||||
SendEmailVerificationNotification::class,
|
||||
],
|
||||
TorrentUpdated::class => [
|
||||
SyncTorrentToEs::class,
|
||||
],
|
||||
SeedBoxRecordUpdated::class => [
|
||||
RemoveSeedBoxRecordCache::class,
|
||||
],
|
||||
TorrentUpdated::class => [
|
||||
SyncTorrentToEs::class,
|
||||
TestTorrentUpdated::class,
|
||||
],
|
||||
TorrentCreated::class => [
|
||||
FetchTorrentImdb::class,
|
||||
],
|
||||
TorrentDeleted::class => [
|
||||
DeductUserBonusWhenTorrentDeleted::class,
|
||||
],
|
||||
UserDisabled::class => [
|
||||
RemoveOauthTokens::class,
|
||||
],
|
||||
|
||||
@@ -20,6 +20,7 @@ use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
use Nexus\Database\NexusDB;
|
||||
|
||||
class UserRepository extends BaseRepository
|
||||
@@ -199,7 +200,7 @@ class UserRepository extends BaseRepository
|
||||
});
|
||||
do_log("user: $uid, $modCommentText");
|
||||
$this->clearCache($targetUser);
|
||||
fire_event("user_disabled", $uid);
|
||||
fire_event("user_disabled", $targetUser);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -226,7 +227,7 @@ class UserRepository extends BaseRepository
|
||||
$targetUser->updateWithModComment($update, $modCommentText);
|
||||
do_log("user: $uid, $modCommentText, update: " . nexus_json_encode($update));
|
||||
$this->clearCache($targetUser);
|
||||
fire_event("user_enabled", $uid);
|
||||
fire_event("user_enabled", $targetUser);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -631,11 +632,10 @@ class UserRepository extends BaseRepository
|
||||
}
|
||||
if (is_int($id)) {
|
||||
$uidArr = Arr::wrap($id);
|
||||
$users = User::query()->with('language')->whereIn('id', $uidArr)->get(['id', 'username', 'lang']);
|
||||
} else {
|
||||
$users = $id;
|
||||
$uidArr = $users->pluck('id')->toArray();
|
||||
$uidArr = $id->pluck('id')->toArray();
|
||||
}
|
||||
$users = User::query()->with('language')->whereIn('id', $uidArr)->get();
|
||||
if (empty($uidArr)) {
|
||||
return;
|
||||
}
|
||||
@@ -668,7 +668,7 @@ class UserRepository extends BaseRepository
|
||||
UserBanLog::query()->insert($userBanLogs);
|
||||
if (is_int($id)) {
|
||||
do_action("user_delete", $id);
|
||||
fire_event("user_destroyed", $id);
|
||||
fire_event("user_destroyed", $users->first());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user