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);
        }
    }
}