Skip to content

Commit

Permalink
Adjust config and existing code
Browse files Browse the repository at this point in the history
  • Loading branch information
jskowronski39 committed Jan 19, 2024
1 parent f6e3815 commit fad85ee
Show file tree
Hide file tree
Showing 28 changed files with 395 additions and 536 deletions.
32 changes: 17 additions & 15 deletions config/api_platform/resources/Attendance.yaml
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
App\Entity\Attendance\Attendance:
attributes:
input: 'App\Api\Input\Attendance\AttendanceInput'
output: 'App\Api\Output\Attendance\AttendanceOutput'
resources:
App\Entity\Attendance\Attendance:
operations:
ApiPlatform\Metadata\GetCollection:
provider: 'App\Api\Provider\Attendance\AttendanceDataProvider'
output: 'App\Api\Output\Attendance\AttendanceOutput'
filters:
- 'attendance.search_filter'
- 'attendance.date_filter'
- 'attendance.order_filter'

itemOperations:
get: ~
ApiPlatform\Metadata\Get:
provider: 'App\Api\Provider\Attendance\AttendanceDataProvider'
output: 'App\Api\Output\Attendance\AttendanceOutput'

collectionOperations:
get:
filters:
- 'attendance.search_filter'
- 'attendance.date_filter'
- 'attendance.order_filter'

post:
input: 'App\Api\Input\Attendance\AttendanceInput'
ApiPlatform\Metadata\Post:
input: 'App\Api\Input\Attendance\AttendanceInput'
processor: 'App\Api\Processor\Attendance\AttendanceProcessor'
output: 'App\Api\Output\Attendance\AttendanceOutput'
39 changes: 20 additions & 19 deletions config/api_platform/resources/ModList.yaml
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
App\Entity\ModList\ModList:
attributes:
output: 'App\Api\Output\ModList\ModListOutput'
resources:
App\Entity\ModList\ModList:
operations:
ApiPlatform\Metadata\GetCollection:
provider: 'App\Api\Provider\ModList\ModListDataProvider'
output: 'App\Api\Output\ModList\ModListOutput'
filters:
- 'mod_list.search_filter'
- 'mod_list.date_filter'
- 'mod_list.order_filter'

itemOperations:
get:
output: 'App\Api\Output\ModList\ModListDetailsOutput'
ApiPlatform\Metadata\Get:
provider: 'App\Api\Provider\ModList\ModListDetailsDataProvider'
output: 'App\Api\Output\ModList\ModListDetailsOutput'

get_by_name:
method: 'GET'
path: '/mod-lists/by-name/{name}'
controller: 'App\Api\Controller\GetModListByNameAction'
output: 'App\Api\Output\ModList\ModListDetailsOutput'
read: false

collectionOperations:
get:
filters:
- 'mod_list.search_filter'
- 'mod_list.date_filter'
- 'mod_list.order_filter'
get_by_name:
provider: 'App\Api\Provider\ModList\ModListDetailsDataProvider'
output: 'App\Api\Output\ModList\ModListDetailsOutput'
class: 'ApiPlatform\Metadata\Get'
method: 'GET'
uriTemplate: '/mod-lists/by-name/{name}'
controller: 'ApiPlatform\Action\PlaceholderAction'
33 changes: 26 additions & 7 deletions config/packages/api_platform.yaml
Original file line number Diff line number Diff line change
@@ -1,18 +1,37 @@
imports:
- { resource: ../api_platform/filters/ }

api_platform:
title: Hello API Platform
version: 1.0.0
title: "%app.api.name%"
version: "%app.api.version%"
show_webby: false

swagger:
versions: [ 3 ]
api_keys:
apiKey:
name: '%env(APP_SECURITY_API_KEY_HEADER_NAME)%'
type: header

path_segment_name_generator: api_platform.path_segment_name_generator.dash

mapping:
paths: [ '%kernel.project_dir%/config/api_platform/resources' ]

formats:
jsonld: ['application/ld+json']
json: [ 'application/json' ]

docs_formats:
jsonld: ['application/ld+json']
jsonopenapi: ['application/vnd.openapi+json']
html: ['text/html']
html: [ 'text/html' ]

defaults:
stateless: true
cache_headers:
vary: ['Content-Type', 'Authorization', 'Origin']
vary: [ 'Content-Type', 'Authorization', 'Origin' ]
extra_properties:
standard_put: true
rfc_7807_compliant_errors: true
normalization_context:
skip_null_values: false
event_listeners_backward_compatibility_layer: false
keep_legacy_inflector: false
2 changes: 1 addition & 1 deletion config/packages/security.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ security:
lazy: true
stateless: true
pattern: ^/api/attendances
methods: ['POST']
methods: [ 'POST' ]
custom_authenticators:
- App\Security\Authenticator\ApiKeyAuthenticator

Expand Down
4 changes: 0 additions & 4 deletions config/services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,6 @@ services:
resource: '../src/Controller/'
tags: [ 'controller.service_arguments' ]

App\Api\Controller\:
resource: '../src/Api/Controller/'
tags: [ 'controller.service_arguments' ]

# add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones
App\Security\Authenticator\DiscordAuthenticator:
Expand Down
28 changes: 0 additions & 28 deletions src/Api/Controller/GetModListByNameAction.php

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,26 @@

namespace App\Api\DataTransformer\Attendance;

use ApiPlatform\Core\DataTransformer\DataTransformerInterface;
use ApiPlatform\Validator\ValidatorInterface;
use App\Api\Input\Attendance\AttendanceInput;
use App\Entity\Attendance\Attendance;
use Ramsey\Uuid\Uuid;

class AttendanceInputDataTransformer implements DataTransformerInterface
class AttendanceInputDataTransformer
{
public function __construct(
private ValidatorInterface $validator
) {
}

public function transform($object, string $to, array $context = []): Attendance
public function transform(AttendanceInput $attendanceInput): Attendance
{
/** @var AttendanceInput $object */
$this->validator->validate($object);
$this->validator->validate($attendanceInput);

return new Attendance(Uuid::uuid4(), $object->getMissionId(), $object->getPlayerId());
}

public function supportsTransformation($data, string $to, array $context = []): bool
{
if ($data instanceof Attendance) {
return false;
}

return Attendance::class === $to && null !== ($context['input']['class'] ?? null);
return new Attendance(
Uuid::uuid4(),
$attendanceInput->missionId,
$attendanceInput->playerId
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,18 @@

namespace App\Api\DataTransformer\Attendance;

use ApiPlatform\Core\DataTransformer\DataTransformerInterface;
use App\Api\Output\Attendance\AttendanceOutput;
use App\Entity\Attendance\Attendance;

class AttendanceOutputDataTransformer implements DataTransformerInterface
class AttendanceOutputDataTransformer
{
public function transform($object, string $to, array $context = []): AttendanceOutput
public function transform(Attendance $attendance): AttendanceOutput
{
/** @var Attendance $object */
$output = new AttendanceOutput();

$output->setId($object->getId()->toString());
$output->setCreatedAt($object->getCreatedAt());
$output->setMissionId($object->getMissionId());
$output->setPlayerId($object->getPlayerId());

return $output;
}

public function supportsTransformation($data, string $to, array $context = []): bool
{
return AttendanceOutput::class === $to && $data instanceof Attendance;
return new AttendanceOutput(
$attendance->getId()->toString(),
$attendance->getMissionId(),
$attendance->getPlayerId(),
$attendance->getCreatedAt(),
);
}
}
29 changes: 10 additions & 19 deletions src/Api/DataTransformer/Dlc/DlcOutputDataTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,20 @@

namespace App\Api\DataTransformer\Dlc;

use ApiPlatform\Core\DataTransformer\DataTransformerInterface;
use App\Api\Output\Dlc\DlcOutput;
use App\Entity\Dlc\Dlc;

class DlcOutputDataTransformer implements DataTransformerInterface
class DlcOutputDataTransformer
{
public function transform($object, string $to, array $context = []): DlcOutput
public function transform(Dlc $dlc): DlcOutput
{
/** @var Dlc $object */
$output = new DlcOutput();

$output->setId($object->getId()->toString());
$output->setName($object->getName());
$output->setCreatedAt($object->getCreatedAt());
$output->setLastUpdatedAt($object->getLastUpdatedAt());
$output->setAppId($object->getAppId());
$output->setDirectory($object->getDirectory());

return $output;
}

public function supportsTransformation($data, string $to, array $context = []): bool
{
return DlcOutput::class === $to && $data instanceof Dlc;
return new DlcOutput(
$dlc->getId()->toString(),
$dlc->getName(),
$dlc->getAppId(),
$dlc->getDirectory(),
$dlc->getCreatedAt(),
$dlc->getLastUpdatedAt()
);
}
}
41 changes: 13 additions & 28 deletions src/Api/DataTransformer/Mod/ModOutputDataTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,42 +4,27 @@

namespace App\Api\DataTransformer\Mod;

use ApiPlatform\Core\DataTransformer\DataTransformerInterface;
use App\Api\Output\Mod\ModOutput;
use App\Entity\Mod\AbstractMod;
use App\Entity\Mod\DirectoryMod;
use App\Entity\Mod\Enum\ModSourceEnum;
use App\Entity\Mod\Enum\ModTypeEnum;
use App\Entity\Mod\SteamWorkshopMod;

class ModOutputDataTransformer implements DataTransformerInterface
class ModOutputDataTransformer
{
public function transform($object, string $to, array $context = []): ModOutput
public function transform(AbstractMod $mod): ModOutput
{
/** @var AbstractMod $object */
$output = new ModOutput();

$output->setId($object->getId()->toString());
$output->setName($object->getName());
$output->setStatus($object->getStatus()?->value);
$output->setCreatedAt($object->getCreatedAt());
$output->setLastUpdatedAt($object->getLastUpdatedAt());

if ($object instanceof SteamWorkshopMod) {
$output->setType($object->getType()->value);
$output->setSource(ModSourceEnum::STEAM_WORKSHOP->value);
$output->setItemId($object->getItemId());
} elseif ($object instanceof DirectoryMod) {
$output->setType(ModTypeEnum::SERVER_SIDE->value);
$output->setSource(ModSourceEnum::DIRECTORY->value);
$output->setDirectory($object->getDirectory());
}

return $output;
}

public function supportsTransformation($data, string $to, array $context = []): bool
{
return ModOutput::class === $to && $data instanceof AbstractMod;
return new ModOutput(
$mod->getId()->toString(),
$mod->getName(),
$mod instanceof SteamWorkshopMod ? ModSourceEnum::STEAM_WORKSHOP->value : ModSourceEnum::DIRECTORY->value,
$mod instanceof SteamWorkshopMod ? $mod->getType()->value : ModTypeEnum::SERVER_SIDE->value,
$mod->getStatus()?->value,
$mod instanceof SteamWorkshopMod ? $mod->getItemId() : null,
$mod instanceof DirectoryMod ? $mod->getDirectory() : null,
$mod->getCreatedAt(),
$mod->getLastUpdatedAt(),
);
}
}
Loading

0 comments on commit fad85ee

Please sign in to comment.