diff --git a/config/api_platform/filters/Attendance.yaml b/config/api_platform/filters/Attendance.yaml new file mode 100644 index 00000000..5689de5e --- /dev/null +++ b/config/api_platform/filters/Attendance.yaml @@ -0,0 +1,27 @@ +services: + _defaults: + autowire: false + autoconfigure: false + public: false + + attendance.search_filter: + parent: 'api_platform.doctrine.orm.search_filter' + tags: [ 'api_platform.filter' ] + arguments: + - id: 'exact' + missionId: 'exact' + playerId: 'exact' + + attendance.date_filter: + parent: 'api_platform.doctrine.orm.date_filter' + tags: [ 'api_platform.filter' ] + arguments: + - createdAt: ~ + + attendance.order_filter: + parent: 'api_platform.doctrine.orm.order_filter' + tags: [ 'api_platform.filter' ] + arguments: + - createdAt: ~ + missionId: ~ + playerId: ~ diff --git a/config/api_platform/filters/ModList.yaml b/config/api_platform/filters/ModList.yaml new file mode 100644 index 00000000..17c5cef3 --- /dev/null +++ b/config/api_platform/filters/ModList.yaml @@ -0,0 +1,30 @@ +services: + _defaults: + autowire: false + autoconfigure: false + public: false + + mod_list.search_filter: + parent: 'api_platform.doctrine.orm.search_filter' + tags: [ 'api_platform.filter' ] + arguments: + - id: 'exact' + createdBy.id: 'exact' + lastUpdatedBy.id: 'exact' + name: 'partial' + description: 'partial' + + mod_list.date_filter: + parent: 'api_platform.doctrine.orm.date_filter' + tags: [ 'api_platform.filter' ] + arguments: + - createdAt: ~ + lastUpdatedAt: ~ + + mod_list.order_filter: + parent: 'api_platform.doctrine.orm.order_filter' + tags: [ 'api_platform.filter' ] + arguments: + - createdAt: ~ + lastUpdatedAt: ~ + name: ~ diff --git a/config/api_platform/resources/Attendance.yaml b/config/api_platform/resources/Attendance.yaml new file mode 100644 index 00000000..99b0063d --- /dev/null +++ b/config/api_platform/resources/Attendance.yaml @@ -0,0 +1,17 @@ +App\Entity\Attendance\Attendance: + attributes: + input: 'App\Api\Input\Attendance\AttendanceInput' + output: 'App\Api\Output\Attendance\AttendanceOutput' + + itemOperations: + get: ~ + + collectionOperations: + get: + filters: + - 'attendance.search_filter' + - 'attendance.date_filter' + - 'attendance.order_filter' + + post: + input: 'App\Api\Input\Attendance\AttendanceInput' diff --git a/config/api_platform/resources.yaml b/config/api_platform/resources/ModList.yaml similarity index 58% rename from config/api_platform/resources.yaml rename to config/api_platform/resources/ModList.yaml index e69f40f3..bef532ea 100644 --- a/config/api_platform/resources.yaml +++ b/config/api_platform/resources/ModList.yaml @@ -1,17 +1,3 @@ -App\Entity\Attendance\Attendance: - attributes: - input: 'App\Api\Input\Attendance\AttendanceInput' - output: 'App\Api\Output\Attendance\AttendanceOutput' - - itemOperations: - get: ~ - - collectionOperations: - get: ~ - post: - input: 'App\Api\Input\Attendance\AttendanceInput' - - App\Entity\ModList\ModList: attributes: output: 'App\Api\Output\ModList\ModListOutput' @@ -19,6 +5,7 @@ App\Entity\ModList\ModList: itemOperations: get: output: 'App\Api\Output\ModList\ModListDetailsOutput' + get_by_name: method: 'GET' path: '/mod-lists/by-name/{name}' @@ -27,4 +14,8 @@ App\Entity\ModList\ModList: read: false collectionOperations: - get: ~ + get: + filters: + - 'mod_list.search_filter' + - 'mod_list.date_filter' + - 'mod_list.order_filter' diff --git a/config/packages/api_platform.yaml b/config/packages/api_platform.yaml index 39dfb4a7..69eb5300 100644 --- a/config/packages/api_platform.yaml +++ b/config/packages/api_platform.yaml @@ -1,3 +1,6 @@ +imports: + - { resource: ../api_platform/filters/ } + api_platform: title: "%app.api.name%" version: "%app.api.version%" @@ -11,9 +14,18 @@ api_platform: path_segment_name_generator: api_platform.path_segment_name_generator.dash mapping: - paths: ['%kernel.project_dir%/config/api_platform'] + paths: ['%kernel.project_dir%/config/api_platform/resources'] patch_formats: json: ['application/merge-patch+json'] formats: json: ['application/json'] html: ['text/html'] + + defaults: + pagination_enabled: true + pagination_maximum_items_per_page: 50 + pagination_client_items_per_page: true + collection: + pagination: + items_per_page_parameter_name: limit + page_parameter_name: page diff --git a/tests/functional/Api/Controller/ModList/GetModListsActionTest.php b/tests/functional/Api/Controller/ModList/GetModListsActionTest.php index 8011140e..d9a34859 100644 --- a/tests/functional/Api/Controller/ModList/GetModListsActionTest.php +++ b/tests/functional/Api/Controller/ModList/GetModListsActionTest.php @@ -47,7 +47,7 @@ public function getModListsAction_authorizedUser_returnsSuccessfulResponse(strin 'approved' => false, 'createdAt' => '2020-01-01T00:00:00+01:00', 'lastUpdatedAt' => null, - ] + ], ], ]); }