refs #425. Client and ORganizationalUnit classroom validation
parent
1da36b96ac
commit
6be6e67797
|
@ -109,6 +109,7 @@ docker exec ogcore-php php bin/console doctrine:database:create
|
|||
## Migraciones de datos
|
||||
|
||||
Para poder migrar los datos desde la base de datos "antigua", previamente necesitamos poder tener un esquema de base de datos con un dump de OpenGnsys. Es decir:
|
||||
|
||||
- Creamos una base de datos temporal simulando una insancia de OpenGnsys 1.1. La solicitaremos al equipo de desarrollo de las universidades
|
||||
- Necesitaremos un dump de la base de datos de OpenGnsys 1.1.
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ final class ClientInput
|
|||
public ?string $mac = null;
|
||||
|
||||
#[Groups(['client:write'])]
|
||||
#[Assert\Ip]
|
||||
#[ApiProperty(description: 'The IP address of the client', example: "127.0.0.1")]
|
||||
public ?string $ip = null;
|
||||
|
||||
|
|
|
@ -6,6 +6,9 @@ use App\Dto\Output\OrganizationalUnitOutput;
|
|||
use App\Entity\NetworkSettings;
|
||||
use App\Entity\OrganizationalUnit;
|
||||
use App\Model\OrganizationalUnitTypes;
|
||||
use App\Validator\Constraints\OrganizationalUnitClassroomMulticastMode;
|
||||
use App\Validator\Constraints\OrganizationalUnitClassroomMulticastPort;
|
||||
use App\Validator\Constraints\OrganizationalUnitClassroomP2pMode;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Component\Serializer\Annotation\Groups;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
|
@ -40,6 +43,7 @@ final class OrganizationalUnitClassroomInput extends OrganizationalUnitInput
|
|||
public ?string $ntp = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
#[OrganizationalUnitClassroomP2pMode]
|
||||
public ?string $p2pMode = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
|
@ -53,9 +57,11 @@ final class OrganizationalUnitClassroomInput extends OrganizationalUnitInput
|
|||
public ?int $mcastSpeed = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
#[OrganizationalUnitClassroomMulticastPort]
|
||||
public ?int $mcastPort = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
#[OrganizationalUnitClassroomMulticastMode]
|
||||
public ?string $mcastMode = null;
|
||||
|
||||
public function __construct(?OrganizationalUnit $organizationalUnit = null)
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace App\Model;
|
||||
|
||||
final class OrganizationalUnitClassroomMulticastModes
|
||||
{
|
||||
public const string HALF_DUPLEX = 'half_duplex';
|
||||
public const string FULL_DUPLEX = 'full_duplex';
|
||||
|
||||
private const array MCAST_MODES = [
|
||||
self::HALF_DUPLEX => 'Half Duplex',
|
||||
self::FULL_DUPLEX => 'Full Duplex',
|
||||
];
|
||||
|
||||
public static function getMcastModeNames(): array
|
||||
{
|
||||
return self::MCAST_MODES;
|
||||
}
|
||||
|
||||
public static function getMcastType(string $mcastMode): ?string
|
||||
{
|
||||
return self::MCAST_MODES[$mcastMode] ?? null;
|
||||
}
|
||||
|
||||
public static function getMcastModes(): array
|
||||
{
|
||||
return array_keys(self::MCAST_MODES);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
namespace App\Model;
|
||||
|
||||
final class OrganizationalUnitClassroomP2pModes
|
||||
{
|
||||
public const string P2P_MODE_LEECHER = 'p2p_mode_leecher';
|
||||
public const string P2P_MODE_PEER = 'p2p_mode_peer';
|
||||
public const string P2P_MODE_SEEDER = 'p2p_mode_seeder';
|
||||
|
||||
private const array P2P_MODE_NAMES = [
|
||||
self::P2P_MODE_LEECHER => 'El cliente no comparte mientras descarga la imagen',
|
||||
self::P2P_MODE_PEER => 'El cliente, mientras descarga la imagen, comparte los datos que ya tenga descargados',
|
||||
self::P2P_MODE_SEEDER => 'Modo de trabajo en modo distribuido',
|
||||
];
|
||||
|
||||
public static function getP2pModeNames(): array
|
||||
{
|
||||
return self::P2P_MODE_NAMES;
|
||||
}
|
||||
|
||||
public static function getP2pModeName(string $p2pMode): ?string
|
||||
{
|
||||
return self::P2P_MODE_NAMES[$p2pMode] ?? null;
|
||||
}
|
||||
|
||||
public static function getP2pModes(): array
|
||||
{
|
||||
return array_keys(self::P2P_MODE_NAMES);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace App\Validator\Constraints;
|
||||
|
||||
use App\Model\OrganizationalUnitClassroomMulticastModes;
|
||||
use App\Model\UserGroupPermissions;
|
||||
use Symfony\Component\Validator\Constraint;
|
||||
|
||||
#[\Attribute]
|
||||
class OrganizationalUnitClassroomMulticastMode extends Constraint
|
||||
{
|
||||
private array $modes;
|
||||
public string $message;
|
||||
|
||||
public function __construct(mixed $options = null, ?array $groups = null, mixed $payload = null)
|
||||
{
|
||||
parent::__construct($options, $groups, $payload);
|
||||
|
||||
$this->modes = OrganizationalUnitClassroomMulticastModes::getMcastModes();
|
||||
$this->message = sprintf(
|
||||
'The multicast mode is not valid. Please use one of the following: %s',
|
||||
implode(', ', $this->modes)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace App\Validator\Constraints;
|
||||
|
||||
use App\Model\OrganizationalUnitClassroomMulticastModes;
|
||||
use App\Model\OrganizationalUnitClassroomP2pModes;
|
||||
use App\Model\UserGroupPermissions;
|
||||
use Symfony\Component\Validator\Constraint;
|
||||
use Symfony\Component\Validator\ConstraintValidator;
|
||||
|
||||
class OrganizationalUnitClassroomMulticastModeValidator extends ConstraintValidator
|
||||
{
|
||||
public function validate($value, Constraint $constraint): void
|
||||
{
|
||||
if (null === $value) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!in_array($value, OrganizationalUnitClassroomMulticastModes::getMcastModes())) {
|
||||
$this->context->buildViolation($constraint->message)->addViolation();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace App\Validator\Constraints;
|
||||
|
||||
use App\Model\UserGroupPermissions;
|
||||
use Symfony\Component\Validator\Constraint;
|
||||
|
||||
#[\Attribute]
|
||||
class OrganizationalUnitClassroomMulticastPort extends Constraint
|
||||
{
|
||||
public string $message;
|
||||
|
||||
public function __construct(mixed $options = null, ?array $groups = null, mixed $payload = null)
|
||||
{
|
||||
parent::__construct($options, $groups, $payload);
|
||||
|
||||
$this->message = 'The multicast port is not valid. Please use a number between 9000 and 9050';
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
namespace App\Validator\Constraints;
|
||||
|
||||
use App\Model\OrganizationalUnitClassroomP2pModes;
|
||||
use App\Model\UserGroupPermissions;
|
||||
use Symfony\Component\Validator\Constraint;
|
||||
use Symfony\Component\Validator\ConstraintValidator;
|
||||
|
||||
class OrganizationalUnitClassroomMulticastPortValidator extends ConstraintValidator
|
||||
{
|
||||
CONST int minPort = 9000;
|
||||
CONST int maxPort = 9050;
|
||||
|
||||
public function validate($value, Constraint $constraint): void
|
||||
{
|
||||
if (null === $value) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(self::minPort <= $value) && ($value <= self::maxPort)) {
|
||||
$this->context->buildViolation($constraint->message)->addViolation();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace App\Validator\Constraints;
|
||||
|
||||
use App\Model\OrganizationalUnitClassroomP2pModes;
|
||||
use App\Model\UserGroupPermissions;
|
||||
use Symfony\Component\Validator\Constraint;
|
||||
|
||||
#[\Attribute]
|
||||
class OrganizationalUnitClassroomP2pMode extends Constraint
|
||||
{
|
||||
private array $modes;
|
||||
public string $message;
|
||||
|
||||
public function __construct(mixed $options = null, ?array $groups = null, mixed $payload = null)
|
||||
{
|
||||
parent::__construct($options, $groups, $payload);
|
||||
|
||||
$this->modes = OrganizationalUnitClassroomP2pModes::getP2pModes();
|
||||
$this->message = sprintf(
|
||||
'The p2p mode is not valid. Please use one of the following: %s',
|
||||
implode(', ', $this->modes)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
namespace App\Validator\Constraints;
|
||||
|
||||
use App\Model\OrganizationalUnitClassroomP2pModes;
|
||||
use App\Model\UserGroupPermissions;
|
||||
use Symfony\Component\Validator\Constraint;
|
||||
use Symfony\Component\Validator\ConstraintValidator;
|
||||
|
||||
class OrganizationalUnitClassroomP2pModeValidator extends ConstraintValidator
|
||||
{
|
||||
public function validate($value, Constraint $constraint): void
|
||||
{
|
||||
if (null === $value) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!in_array($value, OrganizationalUnitClassroomP2pModes::getP2pModes())) {
|
||||
$this->context->buildViolation($constraint->message)->addViolation();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue