File "IntegrationService.php"
Full Path: /var/www/html/back/app/Services/IntegrationService.php
File size: 3.12 KB
MIME-type: text/x-php
Charset: utf-8
<?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);
}
}
}