|
7 | 7 | use Doctrine\ORM\EntityManagerInterface; |
8 | 8 | use OpenApi\Attributes as OA; |
9 | 9 | use PhpList\Core\Domain\Identity\Model\PrivilegeFlag; |
10 | | -use PhpList\Core\Domain\Subscription\Model\Filter\SubscriberFilter; |
11 | 10 | use PhpList\Core\Domain\Subscription\Model\Subscriber; |
12 | 11 | use PhpList\Core\Domain\Subscription\Service\Manager\SubscriberManager; |
13 | 12 | use PhpList\Core\Security\Authentication; |
14 | 13 | use PhpList\RestBundle\Common\Controller\BaseController; |
15 | 14 | use PhpList\RestBundle\Common\Validator\RequestValidator; |
16 | 15 | use PhpList\RestBundle\Common\Service\Provider\PaginatedDataProvider; |
17 | 16 | use PhpList\RestBundle\Subscription\Request\CreateSubscriberRequest; |
| 17 | +use PhpList\RestBundle\Subscription\Request\SubscribersFilterRequest; |
18 | 18 | use PhpList\RestBundle\Subscription\Request\UpdateSubscriberRequest; |
19 | 19 | use PhpList\RestBundle\Subscription\Serializer\SubscriberNormalizer; |
20 | 20 | use PhpList\RestBundle\Subscription\Service\SubscriberHistoryService; |
@@ -75,7 +75,65 @@ public function __construct( |
75 | 75 | in: 'query', |
76 | 76 | required: false, |
77 | 77 | schema: new OA\Schema(type: 'integer', default: 25, maximum: 100, minimum: 1) |
78 | | - ) |
| 78 | + ), |
| 79 | + new OA\Parameter( |
| 80 | + name: 'is_confirmed', |
| 81 | + description: 'Filter by confirmed status', |
| 82 | + in: 'query', |
| 83 | + required: false, |
| 84 | + schema: new OA\Schema( |
| 85 | + type: 'string', |
| 86 | + enum: ['true', 'false', '0', '1'], |
| 87 | + example: '1' |
| 88 | + ) |
| 89 | + ), |
| 90 | + new OA\Parameter( |
| 91 | + name: 'is_blacklisted', |
| 92 | + description: 'Filter by blacklisted status', |
| 93 | + in: 'query', |
| 94 | + required: false, |
| 95 | + schema: new OA\Schema( |
| 96 | + type: 'string', |
| 97 | + enum: ['true', 'false', '0', '1'], |
| 98 | + example: '1' |
| 99 | + ) |
| 100 | + ), |
| 101 | + new OA\Parameter( |
| 102 | + name: 'sort_by', |
| 103 | + description: 'Column to sort by', |
| 104 | + in: 'query', |
| 105 | + required: false, |
| 106 | + schema: new OA\Schema(type: 'string', example: 'id') |
| 107 | + ), |
| 108 | + new OA\Parameter( |
| 109 | + name: 'sort_direction', |
| 110 | + description: 'Sort direction', |
| 111 | + in: 'query', |
| 112 | + required: false, |
| 113 | + schema: new OA\Schema( |
| 114 | + type: 'string', |
| 115 | + enum: ['asc', 'desc'], |
| 116 | + example: 'desc' |
| 117 | + ) |
| 118 | + ), |
| 119 | + new OA\Parameter( |
| 120 | + name: 'find_column', |
| 121 | + description: 'Column to search in (requires find_value)', |
| 122 | + in: 'query', |
| 123 | + required: false, |
| 124 | + schema: new OA\Schema( |
| 125 | + type: 'string', |
| 126 | + enum: ['email', 'foreignKey', 'uniqueId'], |
| 127 | + example: 'email' |
| 128 | + ) |
| 129 | + ), |
| 130 | + new OA\Parameter( |
| 131 | + name: 'find_value', |
| 132 | + description: 'Value to search for (requires find_column)', |
| 133 | + in: 'query', |
| 134 | + required: false, |
| 135 | + schema: new OA\Schema(type: 'string', example: 'email@example.com') |
| 136 | + ), |
79 | 137 | ], |
80 | 138 | responses: [ |
81 | 139 | new OA\Response( |
@@ -104,14 +162,17 @@ public function getSubscribers(Request $request): JsonResponse |
104 | 162 | { |
105 | 163 | $this->requireAuthentication($request); |
106 | 164 |
|
| 165 | + /** @var SubscribersFilterRequest $subscriberRequest */ |
| 166 | + $subscriberRequest = $this->validator->validate($request, SubscribersFilterRequest::class); |
| 167 | + |
107 | 168 | return $this->json( |
108 | | - $this->paginatedDataProvider->getPaginatedList( |
109 | | - $request, |
110 | | - $this->subscriberNormalizer, |
111 | | - Subscriber::class, |
112 | | - new SubscriberFilter(), |
| 169 | + data: $this->paginatedDataProvider->getPaginatedList( |
| 170 | + request: $request, |
| 171 | + normalizer: $this->subscriberNormalizer, |
| 172 | + className: Subscriber::class, |
| 173 | + filter: $subscriberRequest->getDto(), |
113 | 174 | ), |
114 | | - Response::HTTP_OK |
| 175 | + status: Response::HTTP_OK |
115 | 176 | ); |
116 | 177 | } |
117 | 178 |
|
|
0 commit comments