Skip to content

Latest commit

 

History

History
94 lines (74 loc) · 3.52 KB

README.md

File metadata and controls

94 lines (74 loc) · 3.52 KB

Laravel_pausable_job_banner

Total Downloads Latest Stable Version License

Laravel Pausable Job

This package allows your laravel jobs to be pausable & resumeable by any model in your application on runtime.

Note

Currently it only supports Laravel's Default Database Connection for Queues

The Use Case

Imagine you have an Email Marketing Application where your clients can create Campaigns and send Emails to their Subscribers. A campaign may have thousands of email in it and you want add a feature so your clients can simply pause the campaign and the email will be paused realtime.

Since campaign emails will likely to be processed by the queue using a job we can no longer pause the queue or the jobs for this specific campaign because they have already been dispatched.
That's where this package comes into play. You can simply pause all the jobs related to a perticular model whenever you want.

Installation

composer require itsemon245/laravel-pausable-job

Publish Migration

php artisan vendor:publish --provider="Itsemon245\PausableJob\PausableJobServiceProvider"
php artisan migrate

Usage

  1. Use the Pausable trait in the job that you want to make pausable
//Other imports
 use Itsemon245\PausableJob\Traits\Pausable;

class EmailJob implements ShouldQueue
{
  // Other Traits
   use Pausable;

    public function __construct(public Campaign $campaign)
    {
        /**
         * Set or bind which model is responsible to pause the job
         */
        $this->setPausedBy($campaign);
    }
}
  1. Use the HasPausableJobs trait in the model that you want to use to pause the jobs
//Other imports
 use Itsemon245\PausableJob\Traits\HasPausableJobs;

class Campaign extends Model
{
    //Other traits
   use HasPausableJobs;
}
  1. After using the HasPausableJobs trait your model should have access to the resumeJobs() method to resume the jobs again. You can now pause and resume the jobs by following this example in your controllers.
class CampaignController extends Controller{

  public function pause(Campaign $campaign){
    //Immediately pause all jobs that are related to this campaign 
    $campaign->pauseJobs();
  
    return back();
  }
  
  public function resume(Campaign $campaign){
  // Resume jobs whenever you want
   $campaign->resumeJobs();
  }

}

And with that you now have the ability to pause and resume any job on the fly as long as it relates to a model.

Note

Thank you for considering the package.
This is my first package so feel free to critisize my mistakes & help me overcome them.
And a star would be higly appreciated and will help increase my motivation.

If you have any suggestion please don't hasitate.

Thanks Again & Happy Coding