@wkinne
validation:
Use ValidateRequest Trait or for more freedom use form request (https://laravel.com/docs/5.6/validation#form-request-validation).
$this->validate($request,$rule)
creating or get customer:
send the validated data to customer model and create or get. most likely get all item from here itself.
Customer::register($request)
Model Customer
public function register{
static::firstOrCreate($request)
}
calculation and payment getway:
create different method in the controller and move the code there for calculation and payment gateway return payment gateway response to post method. U can create method or can create class subscription
$this->subscription($request);
public function subscription{
calculate and send the pay money to payment gateway and return to controller.
}
PDF
This is same as subscription can create method or class PDF
$this->registerpdf($request);
public function registerpdf{
PDF::create or something ur code
}
Totally would be like..
Class Register
public function post {
$this->validate($request,$rule);
Customer::register($request);
$payGateRes = $this->subscription($request);
if(! $payGateRes) {
return false or error msg
}
$pdfRes = $this->registerpdf($request);
if(! $pdfRes) {
return false or error msg
}
return true or success msg
}