Current File : /home/getxxhzo/app.genicards.com/app/Repositories/AppointmentRepository.php |
<?php
namespace App\Repositories;
use App\Mail\AppointmentMail;
use App\Mail\UserAppointmentMail;
use App\Models\ScheduleAppointment;
use Carbon\Carbon;
use Illuminate\Support\Facades\Mail;
use Stripe\Checkout\Session;
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
/**
* Class AppointmentRepository
*/
class AppointmentRepository extends BaseRepository
{
public function model(): string
{
return ScheduleAppointment::class;
}
public function getFieldsSearchable()
{
//
}
/**
* @param $appointment
*/
public function userCreateSession($userId, $vcard, $input): array
{
try {
setUserStripeApiKey($userId);
$successUrl = route('user.payment-success');
$cancelUrl = route('user.failed-payment');
$session = Session::create([
'payment_method_types' => ['card'],
'customer_email' => $input['email'],
'line_items' => [
[
'price_data' => [
'product_data' => [
'name' => $vcard->name,
],
'unit_amount' => $input['amount'] * 100,
'currency' => $input['currency_code'],
],
'quantity' => 1,
],
],
'client_reference_id' => $vcard->id,
'mode' => 'payment',
'success_url' => url($successUrl) . '?session_id={CHECKOUT_SESSION_ID}&vcard_id=' . $vcard->id,
'cancel_url' => url($cancelUrl . '?error=payment_cancelled&vcard_id=' . $vcard->id),
]);
session()->put([
'appointment_details' => $input,
'vcard_id' => $vcard->id,
]);
$result = [
'sessionId' => $session['id'],
];
return $result;
} catch (\Exception $e) {
throw new UnprocessableEntityHttpException($e->getMessage());
}
}
/**
* @return mixed
*/
public function appointmentStoreOrEmail($input, $vcardUserEmail)
{
$appointment = ScheduleAppointment::create($input);
$input['date'] = Carbon::parse($input['date'])->format('d M, Y');
Mail::to($input['email'])
->send(new AppointmentMail(
'emails.appointment_mail',
__('messages.mail.book_appointment'),
$input
));
Mail::to($vcardUserEmail)
->send(new UserAppointmentMail(
'emails.user_appointment_mail',
__('messages.mail.book_appointment'),
$input
));
return $appointment;
}
}