refs #452. Migrate clients and hardware profile ended
parent
8a17d8c527
commit
2893c0921e
|
@ -575,16 +575,16 @@
|
|||
},
|
||||
{
|
||||
"name": "doctrine/dbal",
|
||||
"version": "3.8.4",
|
||||
"version": "3.8.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/dbal.git",
|
||||
"reference": "b05e48a745f722801f55408d0dbd8003b403dbbd"
|
||||
"reference": "0e3536ba088a749985c8801105b6b3ac6c1280b6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/dbal/zipball/b05e48a745f722801f55408d0dbd8003b403dbbd",
|
||||
"reference": "b05e48a745f722801f55408d0dbd8003b403dbbd",
|
||||
"url": "https://api.github.com/repos/doctrine/dbal/zipball/0e3536ba088a749985c8801105b6b3ac6c1280b6",
|
||||
"reference": "0e3536ba088a749985c8801105b6b3ac6c1280b6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -600,12 +600,12 @@
|
|||
"doctrine/coding-standard": "12.0.0",
|
||||
"fig/log-test": "^1",
|
||||
"jetbrains/phpstorm-stubs": "2023.1",
|
||||
"phpstan/phpstan": "1.10.58",
|
||||
"phpstan/phpstan-strict-rules": "^1.5",
|
||||
"phpunit/phpunit": "9.6.16",
|
||||
"phpstan/phpstan": "1.11.1",
|
||||
"phpstan/phpstan-strict-rules": "^1.6",
|
||||
"phpunit/phpunit": "9.6.19",
|
||||
"psalm/plugin-phpunit": "0.18.4",
|
||||
"slevomat/coding-standard": "8.13.1",
|
||||
"squizlabs/php_codesniffer": "3.9.0",
|
||||
"squizlabs/php_codesniffer": "3.9.2",
|
||||
"symfony/cache": "^5.4|^6.0|^7.0",
|
||||
"symfony/console": "^4.4|^5.4|^6.0|^7.0",
|
||||
"vimeo/psalm": "4.30.0"
|
||||
|
@ -668,7 +668,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/dbal/issues",
|
||||
"source": "https://github.com/doctrine/dbal/tree/3.8.4"
|
||||
"source": "https://github.com/doctrine/dbal/tree/3.8.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -684,7 +684,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-25T07:04:44+00:00"
|
||||
"time": "2024-06-08T17:49:56+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/deprecations",
|
||||
|
|
|
@ -4,10 +4,12 @@ doctrine:
|
|||
default:
|
||||
url: '%env(resolve:DATABASE_URL)%'
|
||||
profiling_collect_backtrace: '%kernel.debug%'
|
||||
use_savepoints: true
|
||||
mapping_types:
|
||||
enum: string
|
||||
og_1:
|
||||
url: '%env(resolve:OG_1_DATABASE_URL)%'
|
||||
use_savepoints: true
|
||||
default_connection: default
|
||||
|
||||
orm:
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Command\Migration;
|
||||
|
||||
use App\Entity\Client;
|
||||
use App\Entity\HardwareProfile;
|
||||
use App\Entity\OrganizationalUnit;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\ORM\Query\ResultSetMapping;
|
||||
|
@ -30,57 +31,56 @@ class MigrateClientsCommand extends Command
|
|||
|
||||
$clientRepository = $this->entityManager->getRepository(Client::class);
|
||||
$organizationalUnitRepository = $this->entityManager->getRepository(OrganizationalUnit::class);
|
||||
$hardwareProfileRepository = $this->entityManager->getRepository(HardwareProfile::class);
|
||||
|
||||
/** Obtener los ordenadores de la base de datos antigua **/
|
||||
$rsmClients = new ResultSetMapping();
|
||||
$rsmClients->addScalarResult('idordenador', 'idordenador');
|
||||
$rsmClients->addScalarResult('nombrgrupoordenador', 'nombrgrupoordenador');
|
||||
$rsmClients->addScalarResult('comentarios', 'comentarios');
|
||||
$pcsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idordenador FROM ordenadores', $rsmClients);
|
||||
$pcs = $pcsQuery->getResult();
|
||||
$rsmClients->addScalarResult('nombreordenador', 'nombreordenador');
|
||||
$rsmClients->addScalarResult('numserie', 'numserie');
|
||||
$rsmClients->addScalarResult('mac', 'mac');
|
||||
$rsmClients->addScalarResult('ip', 'ip');
|
||||
$rsmClients->addScalarResult('netiface', 'netiface');
|
||||
$rsmClients->addScalarResult('netdriver', 'netdriver');
|
||||
$rsmClients->addScalarResult('idperfilhard', 'ordenadores.idperfilhard');
|
||||
$rsmClients->addScalarResult('grupoid', 'ordenadores.grupoid');
|
||||
$rsmClients->addScalarResult('idaula', 'ordenadores.idaula');
|
||||
|
||||
$clientsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idordenador, nombreordenador, numserie, ip, mac, netiface, netdriver, ordenadores.idaula, ordenadores.grupoid, ordenadores.idperfilhard FROM ordenadores LEFT JOIN aulas ON ordenadores.idaula = aulas.idaula LEFT JOIN perfileshard ON ordenadores.idperfilhard = perfileshard.idperfilhard', $rsmClients);
|
||||
$clients = $clientsQuery->getResult();
|
||||
|
||||
/** Ordenadores **/
|
||||
foreach ($pcs as $pc){
|
||||
$newClient = $clientRepository->findOneBy(['migrationId' => $pc->getIdordenador()]);
|
||||
if(!$newClient){
|
||||
$newClient = new Client();
|
||||
$newClient->setMigrationId($pc->getIdordenador());
|
||||
$this->entityManager->persist($newClient);
|
||||
$output->writeln("CLIENTES TOTAL: ". count($clients));
|
||||
foreach ($clients as $client){
|
||||
$clientEntity = $clientRepository->findOneBy(['migrationId' => $client['idordenador']]);
|
||||
if(!$clientEntity){
|
||||
$clientEntity = new Client();
|
||||
$clientEntity->setMigrationId($client['idordenador']);
|
||||
$clientEntity->setName($client['nombreordenador']);
|
||||
$clientEntity->setSerialNumber($client['numserie']);
|
||||
$clientEntity->setNetiface($client['netiface']);
|
||||
$clientEntity->setNetdriver($client['netdriver']);
|
||||
$clientEntity->setMac($client['mac']);
|
||||
$clientEntity->setIp($client['ip']);
|
||||
}
|
||||
$newClient->setName($pc->getNombreordenador());
|
||||
$newClient->setSerialNumber($pc->getNumserie());
|
||||
$newClient->setNetiface($pc->getNetiface());
|
||||
$newClient->setNetdriver($pc->getNetdriver());
|
||||
$newClient->setMac($pc->getMac());
|
||||
$newClient->setIp($pc->getIp());
|
||||
//$client->setStatus();
|
||||
//$newClient->setCache($pc->getCache());
|
||||
//$newClient->setIdproautoexec($pc->getIdproautoexec());
|
||||
//$newClient->setOglive($pc->getOglivedir());
|
||||
|
||||
// Netboot
|
||||
|
||||
//$migrationId = ""
|
||||
|
||||
// HardwareProfile
|
||||
//$hardwareProfile = $hardwareProfileRepository->findOneBy(['migrationId' => $pc->getIdperfilhard()]);
|
||||
//$newClient->setHardwareProfile($hardwareProfile);
|
||||
|
||||
// Menu
|
||||
//$menu = $menuRepository->findOneBy(['migrationId' => $pc->getIdmenu()]);
|
||||
//$newClient->setMenu($menu);
|
||||
|
||||
// Repository
|
||||
//$repository = $repositoryRepository->findOneBy(['migrationId' => $pc->getIdrepositorio()]);
|
||||
//$newClient->setRepository($repository);
|
||||
|
||||
// OrganizationalUnit
|
||||
$migrationId = $pc->getGrupoid() == 0 ? $pc->getIdaula() : $pc->getGrupoid();
|
||||
$migrationId = $client['ordenadores.grupoid'] === 0 ? $client['ordenadores.idaula'] : $client['ordenadores.grupoid'];
|
||||
$organizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $migrationId]);
|
||||
$newClient->setOrganizationalUnit($organizationalUnit);
|
||||
|
||||
if ($organizationalUnit){
|
||||
$clientEntity->setOrganizationalUnit($organizationalUnit);
|
||||
}
|
||||
|
||||
$hardwareProfile = $hardwareProfileRepository->findOneBy(['migrationId' => $client['ordenadores.idperfilhard']]);
|
||||
if ($hardwareProfile){
|
||||
$clientEntity->setHardwareProfile($hardwareProfile);
|
||||
}
|
||||
|
||||
$this->entityManager->persist($clientEntity);
|
||||
}
|
||||
$this->entityManager->flush();
|
||||
|
||||
return Command::SUCCESS;
|
||||
}
|
||||
|
||||
}
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
namespace App\Command\Migration;
|
||||
|
||||
use App\Entity\HardwareProfile;
|
||||
use App\Entity\OrganizationalUnit;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\ORM\Query\ResultSetMapping;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
@ -10,7 +12,7 @@ use Symfony\Component\Console\Command\Command;
|
|||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
#[AsCommand(name: 'opengnsys:migrate_hardware_and_hardware_profile', description: 'Migrate hardware and hardware profile data')]
|
||||
#[AsCommand(name: 'opengnsys:migrate-hardware-profile', description: 'Migrate hardware and hardware profile data')]
|
||||
class MigrateHardwareAndHardwareProfileCommand extends Command
|
||||
{
|
||||
public function __construct(
|
||||
|
@ -27,13 +29,42 @@ class MigrateHardwareAndHardwareProfileCommand extends Command
|
|||
/** @var EntityManagerInterface $oldDatabaseEntityManager */
|
||||
$oldDatabaseEntityManager = $this->doctrine->getManager('og_1');
|
||||
|
||||
$organizationalUnitRepository = $this->entityManager->getRepository(OrganizationalUnit::class);
|
||||
$hardwareProfileRepository = $this->entityManager->getRepository(HardwareProfile::class);
|
||||
|
||||
/** Obtener los centros de la base de datos antigua **/
|
||||
$rsmCenters = new ResultSetMapping();
|
||||
$rsmCenters->addScalarResult('idcentro', 'idcentro');
|
||||
$rsmCenters->addScalarResult('nombrecentro', 'nombrecentro');
|
||||
$rsmCenters->addScalarResult('comentarios', 'comentarios');
|
||||
$rsmHardwareProfiles = new ResultSetMapping();
|
||||
$rsmHardwareProfiles->addScalarResult('idperfilhard', 'idperfilhard');
|
||||
$rsmHardwareProfiles->addScalarResult('descripcion', 'descripcion');
|
||||
$rsmHardwareProfiles->addScalarResult('comentarios', 'perfilhard.comentarios');
|
||||
$rsmHardwareProfiles->addScalarResult('grupoid', 'perfilhard.grupoid');
|
||||
$rsmHardwareProfiles->addScalarResult('idcentro', 'perfilhard.idcentro');
|
||||
|
||||
$hardwareProfilesQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idperfilhard, descripcion, grupos.comentarios, perfileshard.grupoid, perfileshard.idcentro FROM perfileshard LEFT JOIN grupos ON perfileshard.grupoid = grupos.idgrupo', $rsmHardwareProfiles);
|
||||
$hardwareProfiles = $hardwareProfilesQuery->getResult();
|
||||
|
||||
/** Perfiles hardware **/
|
||||
$output->writeln("PERFILES HARDWARE TOTAL: ". count($hardwareProfiles));
|
||||
foreach ($hardwareProfiles as $hardwareProfile){
|
||||
$hardwareProfileEntity = null;
|
||||
$hardwareProfileEntity = $hardwareProfileRepository->findOneBy(['migrationId' => $hardwareProfile['idperfilhard']]);
|
||||
if(!$hardwareProfileEntity){
|
||||
$hardwareProfileEntity = new HardwareProfile();
|
||||
$hardwareProfileEntity->setMigrationId($hardwareProfile['idperfilhard']);
|
||||
$hardwareProfileEntity->setDescription($hardwareProfile['descripcion']);
|
||||
$hardwareProfileEntity->setComments($hardwareProfile['perfilhard.comentarios']);
|
||||
}
|
||||
|
||||
$migrationId = $hardwareProfile['perfilhard.grupoid'] === 0 ? $hardwareProfile['perfilhard.idcentro'] : $hardwareProfile['perfilhard.grupoid'];
|
||||
$organizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $migrationId]);
|
||||
|
||||
if ($organizationalUnit){
|
||||
$hardwareProfileEntity->setOrganizationalUnit($organizationalUnit);
|
||||
}
|
||||
|
||||
$this->entityManager->persist($hardwareProfileEntity);
|
||||
}
|
||||
$this->entityManager->flush();
|
||||
|
||||
return Command::SUCCESS;
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ class MigrateOrganizationalUnitCommand extends Command
|
|||
$rsmGroups->addScalarResult('comentarios', 'grupos.comentarios');
|
||||
$rsmGroups->addScalarResult('idcentro', 'grupos.idcentro');
|
||||
|
||||
$groupsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idgrupo, nombregrupo, grupos.comentarios, grupos.idcentro FROM grupos INNER JOIN centros ON grupos.idcentro = centros.idcentro', $rsmGroups);
|
||||
$groupsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idgrupo, nombregrupo, grupos.comentarios, grupos.idcentro FROM grupos LEFT JOIN centros ON grupos.idcentro = centros.idcentro', $rsmGroups);
|
||||
$groups = $groupsQuery->getResult();
|
||||
|
||||
/** Obtener las aulas de la base de datos antigua **/
|
||||
|
@ -55,6 +55,7 @@ class MigrateOrganizationalUnitCommand extends Command
|
|||
$rsmClassrooms->addScalarResult('nombreaula', 'nombreaula');
|
||||
$rsmClassrooms->addScalarResult('comentarios', 'aulas.comentarios');
|
||||
$rsmClassrooms->addScalarResult('grupoid', 'aulas.grupoid');
|
||||
$rsmClassrooms->addScalarResult('idcentro', 'aulas.idcentro');
|
||||
$rsmClassrooms->addScalarResult('proxy', 'proxy');
|
||||
$rsmClassrooms->addScalarResult('dns', 'dns');
|
||||
$rsmClassrooms->addScalarResult('netmask', 'netmask');
|
||||
|
@ -70,7 +71,7 @@ class MigrateOrganizationalUnitCommand extends Command
|
|||
$rsmClassrooms->addScalarResult('cagnon', 'cagnon');
|
||||
$rsmClassrooms->addScalarResult('ubicacion', 'ubicacion');
|
||||
|
||||
$roomsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idaula, nombreaula, aulas.comentarios, aulas.grupoid, proxy, dns, netmask, router, ntp, timep2p, modp2p, modomul, ipmul, velmul, pormul, pizarra, cagnon, ubicacion FROM aulas INNER JOIN grupos ON aulas.grupoid = grupos.idgrupo', $rsmClassrooms);
|
||||
$roomsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idaula, nombreaula, aulas.comentarios, aulas.grupoid, aulas.idcentro, proxy, dns, netmask, router, ntp, timep2p, modp2p, modomul, ipmul, velmul, pormul, pizarra, cagnon, ubicacion FROM aulas LEFT JOIN grupos ON aulas.grupoid = grupos.idgrupo', $rsmClassrooms);
|
||||
$rooms = $roomsQuery->getResult();
|
||||
|
||||
/** Obtener los grupos de ordenadores de la base de datos antigua **/
|
||||
|
@ -79,7 +80,7 @@ class MigrateOrganizationalUnitCommand extends Command
|
|||
$rsmClientGroups->addScalarResult('nombregrupoordenador', 'nombregrupoordenador');
|
||||
$rsmClientGroups->addScalarResult('comentarios', 'gruposordenadores.comentarios');
|
||||
$rsmClientGroups->addScalarResult('idaula', 'gruposordenadores.idaula');
|
||||
$clientGroupsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idgrupo, nombregrupoordenador, gruposordenadores.comentarios, gruposordenadores.idaula FROM gruposordenadores INNER JOIN aulas ON gruposordenadores.idaula = aulas.idaula', $rsmClientGroups);
|
||||
$clientGroupsQuery = $oldDatabaseEntityManager->createNativeQuery('SELECT idgrupo, nombregrupoordenador, gruposordenadores.comentarios, gruposordenadores.idaula FROM gruposordenadores LEFT JOIN aulas ON gruposordenadores.idaula = aulas.idaula', $rsmClientGroups);
|
||||
$clientGroups = $clientGroupsQuery->getResult();
|
||||
|
||||
$organizationalUnitRepository = $this->entityManager->getRepository(OrganizationalUnit::class);
|
||||
|
@ -88,7 +89,7 @@ class MigrateOrganizationalUnitCommand extends Command
|
|||
$output->writeln("CENTROS TOTAL: ". count($centers));
|
||||
foreach ($centers as $center){
|
||||
$centerOrganizationalUnit = null;
|
||||
$centerOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $center['idcentro']]);
|
||||
$centerOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $center['idcentro'], 'type' => OrganizationalUnitTypes::ORGANIZATIONAL_UNIT]);
|
||||
if(!$centerOrganizationalUnit){
|
||||
$centerOrganizationalUnit = new OrganizationalUnit();
|
||||
$centerOrganizationalUnit->setMigrationId($center['idcentro']);
|
||||
|
@ -104,7 +105,7 @@ class MigrateOrganizationalUnitCommand extends Command
|
|||
$output->writeln("GRUPOS DE AULAS TOTAL: ". count($groups));
|
||||
foreach ($groups as $group){
|
||||
$groupPcOrganizationalUnit = null;
|
||||
$groupPcOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $group['idgrupo']]);
|
||||
$groupPcOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $group['idgrupo'], 'type' => OrganizationalUnitTypes::CLASSROOMS_GROUP]);
|
||||
if(!$groupPcOrganizationalUnit){
|
||||
$groupPcOrganizationalUnit = new OrganizationalUnit();
|
||||
$groupPcOrganizationalUnit->setMigrationId($group['idgrupo']);
|
||||
|
@ -126,7 +127,7 @@ class MigrateOrganizationalUnitCommand extends Command
|
|||
$output->writeln("AULAS TOTAL: ". count($rooms));
|
||||
foreach ($rooms as $room){
|
||||
$roomOrganizationalUnit = null;
|
||||
$roomOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $room['idaula']]);
|
||||
$roomOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $room['idaula'], 'type' => OrganizationalUnitTypes::CLASSROOM]);
|
||||
if(!$roomOrganizationalUnit){
|
||||
$roomOrganizationalUnit = new OrganizationalUnit();
|
||||
$roomOrganizationalUnit->setMigrationId($room['idaula']);
|
||||
|
@ -137,9 +138,11 @@ class MigrateOrganizationalUnitCommand extends Command
|
|||
$roomOrganizationalUnit->setLocation($room['ubicacion']);
|
||||
$roomOrganizationalUnit->setType(OrganizationalUnitTypes::CLASSROOM);
|
||||
|
||||
$group = $organizationalUnitRepository->findOneBy(['migrationId' => $room['aulas.grupoid']]);
|
||||
if ($group){
|
||||
$roomOrganizationalUnit->setParent($group);
|
||||
$migrationId = $room['aulas.grupoid'] === 0 ? $room['aulas.idcentro'] : $room['aulas.grupoid'];
|
||||
$organizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $migrationId]);
|
||||
|
||||
if ($organizationalUnit){
|
||||
$roomOrganizationalUnit->setParent($organizationalUnit);
|
||||
}
|
||||
|
||||
$this->entityManager->persist($roomOrganizationalUnit);
|
||||
|
@ -167,11 +170,10 @@ class MigrateOrganizationalUnitCommand extends Command
|
|||
$this->entityManager->flush();
|
||||
|
||||
/** Grupo Ordenador **/
|
||||
$output->writeln("GRUPOS ORDENADORES ". count($rooms));
|
||||
$output->writeln("GRUPOS ORDENADORES ". count($clientGroups));
|
||||
foreach ($clientGroups as $clientGroup){
|
||||
var_dump($clientGroup );
|
||||
$groupPcOrganizationalUnit = null;
|
||||
$groupPcOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $clientGroup['idgrupo']]);
|
||||
$groupPcOrganizationalUnit = $organizationalUnitRepository->findOneBy(['migrationId' => $clientGroup['idgrupo'], 'type' => OrganizationalUnitTypes::CLIENTS_GROUP]);
|
||||
if(!$groupPcOrganizationalUnit){
|
||||
$groupPcOrganizationalUnit = new OrganizationalUnit();
|
||||
$groupPcOrganizationalUnit->setMigrationId($clientGroup['idgrupo']);
|
||||
|
|
|
@ -8,8 +8,7 @@ use Doctrine\ORM\Mapping as ORM;
|
|||
#[ORM\Entity(repositoryClass: ClientRepository::class)]
|
||||
class Client extends AbstractEntity
|
||||
{
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $name = null;
|
||||
use NameableTrait;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $serialNumber = null;
|
||||
|
@ -35,19 +34,6 @@ class Client extends AbstractEntity
|
|||
#[ORM\ManyToOne(inversedBy: 'clients')]
|
||||
private ?HardwareProfile $hardwareProfile = null;
|
||||
|
||||
|
||||
public function getName(): ?string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
public function setName(?string $name): static
|
||||
{
|
||||
$this->name = $name;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getSerialNumber(): ?string
|
||||
{
|
||||
return $this->serialNumber;
|
||||
|
|
|
@ -4,7 +4,6 @@ namespace Functional;
|
|||
|
||||
use ApiPlatform\Symfony\Bundle\Test\ApiTestCase;
|
||||
use ApiPlatform\Symfony\Bundle\Test\Client;
|
||||
use App\Factory\UserFactory;
|
||||
use Faker\Factory;
|
||||
use Faker\Generator;
|
||||
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
|
||||
|
|
Loading…
Reference in New Issue