| Current Path : /home/users/unlimited/www/whatsapp-crm/app/Services/ |
| Current File : /home/users/unlimited/www/whatsapp-crm/app/Services/TemplateService.php |
<?php
namespace App\Services;
use App\Events\NewChatEvent;
use App\Http\Resources\TemplateResource;
use App\Models\Organization;
use App\Models\Template;
use App\Services\WhatsappService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\ValidationException;
use Inertia\Inertia;
use DB;
use Validator;
class TemplateService
{
private $whatsappService;
private $organizationId;
public function __construct($organizationId)
{
$this->organizationId = $organizationId;
$this->initializeWhatsappService();
}
private function initializeWhatsappService()
{
$config = Organization::where('id', $this->organizationId)->first()->metadata;
$config = $config ? json_decode($config, true) : [];
$accessToken = $config['whatsapp']['access_token'] ?? null;
$apiVersion = config('graph.api_version');
$appId = $config['whatsapp']['app_id'] ?? null;
$phoneNumberId = $config['whatsapp']['phone_number_id'] ?? null;
$wabaId = $config['whatsapp']['waba_id'] ?? null;
$this->whatsappService = new WhatsappService($accessToken, $apiVersion, $appId, $phoneNumberId, $wabaId, $this->organizationId);
}
public function getTemplates(Request $request, $uuid = null, $searchTerm = null)
{
$response = [];
if ($uuid === null) {
$response = $this->getTemplatesListResponse($request);
} elseif ($uuid === 'sync') {
$response = $this->whatsappService->syncTemplates();
} else {
$response = $this->getTemplateDetailResponse($request, $uuid);
}
return $response;
}
private function getTemplatesListResponse(Request $request)
{
if ($request->expectsJson()) {
$rows = Template::where('organization_id', $this->organizationId)->where('deleted_at', null)
->get()
->map(function ($row) {
return [
'value' => $row->id,
'label' => $row->name,
];
});
return response()->json([$rows]);
}
return Inertia::render('User/Templates/Index', [
'title' => __('templates'),
'allowCreate' => true,
'rows' => TemplateResource::collection(
Template::where('organization_id', $this->organizationId)->where('deleted_at', null)->latest()->paginate(10)
),
]);
}
private function getTemplateDetailResponse(Request $request, $uuid)
{
if ($request->expectsJson()) {
$row = Template::where('uuid', $uuid)->where('deleted_at', null)->first();
return response()->json($row);
}
$data['languages'] = config('languages');
$data['template'] = Template::where('uuid', $uuid)->first();
$data['title'] = 'Edit Template';
return Inertia::render('User/Templates/Edit', $data);
}
public function createTemplate(Request $request)
{
if ($request->isMethod('get')){
$data['languages'] = config('languages');
$data['settings'] = Organization::where('id', $this->organizationId)->first();
return Inertia::render('User/Templates/Add', $data);
} else if ($request->isMethod('post')){
$validator = Validator::make($request->all(),[
'name' => 'required',
'category' => 'required',
'language' => 'required',
]);
if ($validator->fails()) {
return response()->json(['success' => false,'message'=>'Some required fields have not been filled','errors'=>$validator->messages()->get('*')]);
}
return $this->whatsappService->createTemplate($request);
}
}
public function deleteTemplate($uuid)
{
$query = $this->whatsappService->deleteTemplate($uuid);
if($query->success === true){
return response()->json([
'success' => true,
'message'=> __('Template deleted successfully')
]);
} else {
return response()->json([
'success' => false,
'message'=> __('something went wrong. Refresh the page and try again')
]);
}
}
}