DeleteRemoteStatusPipeline.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace App\Jobs\DeletePipeline;
  3. use Illuminate\Bus\Queueable;
  4. use Illuminate\Contracts\Queue\ShouldBeUnique;
  5. use Illuminate\Contracts\Queue\ShouldQueue;
  6. use Illuminate\Foundation\Bus\Dispatchable;
  7. use Illuminate\Queue\InteractsWithQueue;
  8. use Illuminate\Queue\SerializesModels;
  9. use App\Bookmark;
  10. use App\DirectMessage;
  11. use App\Like;
  12. use App\Media;
  13. use App\MediaTag;
  14. use App\Mention;
  15. use App\Report;
  16. use App\Status;
  17. use App\StatusHashtag;
  18. use App\StatusView;
  19. use App\Notification;
  20. use App\Services\NetworkTimelineService;
  21. use App\Services\StatusService;
  22. use App\Jobs\ProfilePipeline\DecrementPostCount;
  23. use App\Jobs\MediaPipeline\MediaDeletePipeline;
  24. class DeleteRemoteStatusPipeline implements ShouldQueue
  25. {
  26. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  27. protected $status;
  28. public $timeout = 300;
  29. public $tries = 3;
  30. public $maxExceptions = 1;
  31. /**
  32. * Create a new job instance.
  33. *
  34. * @return void
  35. */
  36. public function __construct(Status $status)
  37. {
  38. $this->status = $status->withoutRelations();
  39. }
  40. /**
  41. * Execute the job.
  42. *
  43. * @return void
  44. */
  45. public function handle()
  46. {
  47. $status = $this->status;
  48. NetworkTimelineService::del($status->id);
  49. StatusService::del($status->id, true);
  50. DecrementPostCount::dispatchNow($status->profile_id);
  51. Bookmark::whereStatusId($status->id)->delete();
  52. Notification::whereItemType('App\Status')
  53. ->whereItemId($status->id)
  54. ->forceDelete();
  55. DirectMessage::whereStatusId($status->id)->delete();
  56. Like::whereStatusId($status->id)->forceDelete();
  57. MediaTag::whereStatusId($status->id)->delete();
  58. Media::whereStatusId($status->id)
  59. ->get()
  60. ->each(function($media) {
  61. MediaDeletePipeline::dispatch($media)->onQueue('mmo');
  62. });
  63. Mention::whereStatusId($status->id)->forceDelete();
  64. Report::whereObjectType('App\Status')->whereObjectId($status->id)->delete();
  65. StatusHashtag::whereStatusId($status->id)->delete();
  66. StatusView::whereStatusId($status->id)->delete();
  67. Status::whereReblogOfId($status->id)->forceDelete();
  68. $status->delete();
  69. }
  70. }