refs #955. Updated Partition API
testing/ogcore-api/pipeline/head This commit looks good Details

develop-jenkins
Manuel Aranda Rosales 2024-10-17 13:36:33 +02:00
parent 5173dc81f0
commit 7e6a0a2a1b
7 changed files with 46 additions and 37 deletions

View File

@ -11,8 +11,8 @@ resources:
ApiPlatform\Metadata\GetCollection: ApiPlatform\Metadata\GetCollection:
provider: App\State\Provider\SoftwareProfileProvider provider: App\State\Provider\SoftwareProfileProvider
filters: filters:
- 'api_platform.filter.software.order' - 'api_platform.filter.software_profile.order'
- 'api_platform.filter.software.search' - 'api_platform.filter.software_profile.search'
ApiPlatform\Metadata\Get: ApiPlatform\Metadata\Get:
provider: App\State\Provider\SoftwareProfileProvider provider: App\State\Provider\SoftwareProfileProvider

View File

@ -173,6 +173,18 @@ services:
arguments: [ { 'id': 'exact', 'name': 'partial', type: 'exact'} ] arguments: [ { 'id': 'exact', 'name': 'partial', type: 'exact'} ]
tags: [ 'api_platform.filter' ] tags: [ 'api_platform.filter' ]
api_platform.filter.software_profile.order:
parent: 'api_platform.doctrine.orm.order_filter'
arguments:
$properties: { 'id': ~, 'description': ~ }
$orderParameterName: 'order'
tags: [ 'api_platform.filter' ]
api_platform.filter.software_profile.search:
parent: 'api_platform.doctrine.orm.search_filter'
arguments: [ { 'id': 'exact', 'description': 'partial' } ]
tags: [ 'api_platform.filter' ]
api_platform.filter.subnet.order: api_platform.filter.subnet.order:
parent: 'api_platform.doctrine.orm.order_filter' parent: 'api_platform.doctrine.orm.order_filter'
arguments: arguments:

View File

@ -38,15 +38,13 @@ class InstallOgLiveResponseAction extends AbstractController
{ {
$data = json_decode($request->getContent(), true); $data = json_decode($request->getContent(), true);
if ($data === null || !isset($data['message'], $data['ogCoreId'], $data['details'])) { if ($data === null || !isset($data['message'], $data['ogCoreId'], $data['status'])) {
return new JsonResponse(['error' => 'Invalid or incomplete JSON data'], Response::HTTP_BAD_REQUEST); return new JsonResponse(['error' => 'Invalid or incomplete JSON data'], Response::HTTP_BAD_REQUEST);
} }
$message = $data['message']; $message = $data['message'];
$ogCoreId = $data['ogCoreId']; $ogCoreId = $data['ogCoreId'];
$details = $data['details'];
$status = $data['status']; $status = $data['status'];
$result = $status === self::OG_LIVE_INSTALL_SUCCESS ? $details['result'] : [];
$ogLive = $this->entityManager->getRepository(OgLive::class)->findOneBy(['uuid' => $ogCoreId]); $ogLive = $this->entityManager->getRepository(OgLive::class)->findOneBy(['uuid' => $ogCoreId]);
@ -58,22 +56,22 @@ class InstallOgLiveResponseAction extends AbstractController
return new JsonResponse(['error' => 'OgLive is already active'], Response::HTTP_BAD_REQUEST); return new JsonResponse(['error' => 'OgLive is already active'], Response::HTTP_BAD_REQUEST);
} }
$this->updateOgLive($ogLive, $details, $result, $status); $this->updateOgLive($ogLive, $message, $status);
return new JsonResponse(data: sprintf('OgLive %s updated successfully', $ogLive->getChecksum()), status: Response::HTTP_OK); return new JsonResponse(data: sprintf('OgLive %s updated successfully', $ogLive->getChecksum()), status: Response::HTTP_OK);
} }
private function updateOgLive (OgLive $ogLive, array $details, array $result, string $status): void private function updateOgLive (OgLive $ogLive, array $details, string $status): void
{ {
if ($status === self::OG_LIVE_INSTALL_SUCCESS) { if ($status === self::OG_LIVE_INSTALL_SUCCESS) {
$ogLive->setInstalled(true); $ogLive->setInstalled(true);
$ogLive->setSynchronized(true); $ogLive->setSynchronized(true);
$ogLive->setChecksum($result['id']); $ogLive->setChecksum($details['id']);
$ogLive->setDistribution($result['distribution']); $ogLive->setDistribution($details['distribution']);
$ogLive->setKernel($result['kernel']); $ogLive->setKernel($details['kernel']);
$ogLive->setArchitecture($result['architecture']); $ogLive->setArchitecture($details['architecture']);
$ogLive->setRevision($result['revision']); $ogLive->setRevision($details['revision']);
$ogLive->setDirectory($result['directory']); $ogLive->setDirectory($details['directory']);
} }
$ogLive->setStatus($status === self::OG_LIVE_INSTALL_SUCCESS ? OgLiveStatus::ACTIVE : OgLiveStatus::FAILED); $ogLive->setStatus($status === self::OG_LIVE_INSTALL_SUCCESS ? OgLiveStatus::ACTIVE : OgLiveStatus::FAILED);

View File

@ -1,20 +0,0 @@
<?php
namespace App\Dto\Input;
use ApiPlatform\Metadata\ApiProperty;
use App\Dto\Output\ClientOutput;
use App\Dto\Output\ImageOutput;
use App\Dto\Output\OperativeSystemOutput;
use App\Entity\Partition;
use Symfony\Component\Serializer\Annotation\Groups;
class PartitionArrayInput
{
/**
* @var PartitionInput[]
*/
#[Groups(['partition:write'])]
#[ApiProperty(description: 'The partitions of the client', example: "[{diskNumber: 1, partitionNumber: 1, partitionCode: 'code', size: 100, cacheContent: 'cache content', filesystem: 'filesystem', operativeSystem: {name: 'Ubuntu'}, client: {name: 'client'}, memoryUsage: 100, image: {name: 'image'}}]")]
public ?array $partitions = [];
}

View File

@ -49,7 +49,6 @@ final class PartitionInput
#[ApiProperty(description: 'The client of the partition')] #[ApiProperty(description: 'The client of the partition')]
public ?ClientOutput $client = null; public ?ClientOutput $client = null;
#[Assert\NotNull()]
#[Groups(['partition:write'])] #[Groups(['partition:write'])]
#[ApiProperty(description: 'The memory usage of the partition', example: 100)] #[ApiProperty(description: 'The memory usage of the partition', example: 100)]
public ?int $memoryUsage = null; public ?int $memoryUsage = null;
@ -97,10 +96,16 @@ final class PartitionInput
$partition->setSize($this->size * 100); $partition->setSize($this->size * 100);
$partition->setCacheContent($this->cacheContent); $partition->setCacheContent($this->cacheContent);
$partition->setFilesystem($this->filesystem); $partition->setFilesystem($this->filesystem);
$partition->setOperativeSystem($this->operativeSystem->getEntity());
if ($this->operativeSystem) {
$partition->setOperativeSystem($this->operativeSystem->getEntity());
}
$partition->setClient($this->client->getEntity()); $partition->setClient($this->client->getEntity());
$partition->setMemoryUsage($this->memoryUsage * 100); $partition->setMemoryUsage($this->memoryUsage * 100);
$partition->setImage($this->image->getEntity());
if ($this->image) {
$partition->setImage($this->image->getEntity());
}
return $partition; return $partition;
} }

View File

@ -3,6 +3,7 @@
namespace App\Dto\Input; namespace App\Dto\Input;
use ApiPlatform\Metadata\ApiProperty; use ApiPlatform\Metadata\ApiProperty;
use App\Dto\Output\OperativeSystemOutput;
use App\Dto\Output\OrganizationalUnitOutput; use App\Dto\Output\OrganizationalUnitOutput;
use App\Entity\SoftwareProfile; use App\Entity\SoftwareProfile;
use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Serializer\Annotation\Groups;
@ -21,6 +22,11 @@ final class SoftwareProfileInput
#[ApiProperty(description: 'The organizational unit of the software profile')] #[ApiProperty(description: 'The organizational unit of the software profile')]
public ?OrganizationalUnitOutput $organizationalUnit = null; public ?OrganizationalUnitOutput $organizationalUnit = null;
#[Groups(['software-profile:write'])]
#[ApiProperty(description: 'The operative system of the software profile')]
public ?OperativeSystemOutput $operativeSystem = null;
public function __construct(?SoftwareProfile $softwareProfile = null) public function __construct(?SoftwareProfile $softwareProfile = null)
{ {
if (!$softwareProfile) { if (!$softwareProfile) {
@ -32,6 +38,10 @@ final class SoftwareProfileInput
if($softwareProfile->getOrganizationalUnit()) { if($softwareProfile->getOrganizationalUnit()) {
$this->organizationalUnit = new OrganizationalUnitOutput($softwareProfile->getOrganizationalUnit()); $this->organizationalUnit = new OrganizationalUnitOutput($softwareProfile->getOrganizationalUnit());
} }
if($softwareProfile->getOperativeSystem()) {
$this->operativeSystem = new OperativeSystemOutput($softwareProfile->getOperativeSystem());
}
} }
public function createOrUpdateEntity(?SoftwareProfile $softwareProfile = null): SoftwareProfile public function createOrUpdateEntity(?SoftwareProfile $softwareProfile = null): SoftwareProfile
@ -46,6 +56,10 @@ final class SoftwareProfileInput
$softwareProfile->setOrganizationalUnit($this->organizationalUnit->getEntity()); $softwareProfile->setOrganizationalUnit($this->organizationalUnit->getEntity());
} }
if ($this->operativeSystem) {
$softwareProfile->setOperativeSystem($this->operativeSystem->getEntity());
}
return $softwareProfile; return $softwareProfile;
} }
} }

View File

@ -52,7 +52,7 @@ readonly class ImageProvider implements ProviderInterface
$item = $this->itemProvider->provide($operation, $uriVariables, $context); $item = $this->itemProvider->provide($operation, $uriVariables, $context);
if (!$item) { if (!$item) {
throw new NotFoundHttpException('Menu not found'); throw new NotFoundHttpException('Image not found');
} }
return new ImageOutput($item); return new ImageOutput($item);