Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
gilour
/
back
/
app
/
Services
:
IntegrationService.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php declare(strict_types=1); namespace App\Services; use App\Models\Integration; use App\Models\System; use App\Repositories\Integrations\Interfaces\IntegrationInterface; use Carbon\Carbon; use Illuminate\Support\Facades\DB; class IntegrationService { private $integrationRepository; public function __construct(IntegrationInterface $integration) { $this->integrationRepository = $integration; } public function store($modelId, $request) { try { DB::beginTransaction(); $dateStart = $request['date_start'] ?? null; $dateEnd = $request['date_end'] ?? null; $name = $data['name'] ?? 'API Token'; $token = $this->createToken($modelId, $dateStart, $dateEnd, $name); $integration = Integration::query()->create([ 'system_id' => $modelId, 'name' => $request['name'], 'configuration' => $request['configuration'], 'compare_payments' => $request['compare_payments'], 'currency' => $request['currency'], 'api_key' => $token->plainTextToken, 'date_refresh' => Carbon::now(), 'date_start' => $dateStart, 'date_end' => $dateEnd ]); DB::commit(); return response()->json([ 'token' => $token->plainTextToken, 'token_type' => 'Bearer', ]); } catch (\Exception $e) { DB::rollBack(); return response()->json(['error' => $e->getMessage()], 500); } } public function update($integrationId, $request) { $integration = Integration::query()->find($integrationId); return $integration->update($request); } public function index() { return Integration::query()->get(); } public function createToken($modelId, $dateStart, $dateEnd, $name) { $system = System::findOrFail($modelId); return $system->createToken($name, ['*'], Carbon::parse($dateEnd)); } public function addData($modelId, $data) { try { $dataMappings = [ 'organizations' => 'createDataInOrganizationsDb', 'counterpartys' => 'createDataInCounterpartyDb', 'accounts' => 'createDataInAccountDb', 'payments' => 'createDataInPaymentsDb', ]; DB::transaction(function () use ($modelId, $data, $dataMappings) { foreach ($dataMappings as $key => $method) { if (!empty($data[$key])) { foreach ($data[$key] as $item) { $this->integrationRepository->$method($modelId, $item); } } } }); $packageNumber = $data['PackageNumber'] ?? null; return response()->json([ 'packageNumber' => $packageNumber, 'status' => 200 ]); } catch (\Exception $e) { return response()->json(['error' => $e->getMessage()], 500); } } }