@@ -180,13 +180,13 @@ use Dot\DependencyInjection\Attribute\Entity;
180180#[Entity(name: Book::class)]
181181class BookRepository extends AbstractRepository
182182{
183- public function getBooks(array $params = [], array $filters = [] ): QueryBuilder
183+ public function getBooks(array $params = []): QueryBuilder
184184 {
185185 return $this
186186 ->getQueryBuilder()
187187 ->select('book')
188188 ->from(Book::class, 'book')
189- ->orderBy($filters['order'] ?? 'book.created' , $filters ['dir'] ?? 'desc' )
189+ ->orderBy($params['sort'] , $params ['dir'])
190190 ->setFirstResult($params['offset'])
191191 ->setMaxResults($params['limit']);
192192 }
@@ -212,7 +212,7 @@ interface BookServiceInterface
212212
213213 public function saveBook(array $data): Book;
214214
215- public function getBooks(array $filters = [] ): QueryBuilder;
215+ public function getBooks(array $params ): QueryBuilder;
216216}
217217```
218218
@@ -233,6 +233,8 @@ use Doctrine\ORM\QueryBuilder;
233233use Dot\DependencyInjection\Attribute\Inject;
234234use Exception;
235235
236+ use function in_array;
237+
236238class BookService implements BookServiceInterface
237239{
238240 #[Inject(BookRepository::class)]
@@ -262,11 +264,23 @@ class BookService implements BookServiceInterface
262264 return $book;
263265 }
264266
265- public function getBooks(array $filters = []): QueryBuilder
267+ public function getBooks(array $params = []): QueryBuilder
266268 {
267- $params = Paginator::getParams($filters, 'book.created');
269+ $filters = $params['filters'] ?? [];
270+ $params = Paginator::getParams($filters, 'book.created');
271+
272+ $sortableColumns = [
273+ 'book.name',
274+ 'book.author',
275+ 'book.releaseDate',
276+ 'book.created',
277+ ];
278+
279+ if (! in_array($params['sort'], $sortableColumns, true)) {
280+ $params['sort'] = 'book.created';
281+ }
268282
269- return $this->bookRepository->getBooks($params, $filters );
283+ return $this->bookRepository->getBooks($params);
270284 }
271285}
272286```
@@ -605,13 +619,13 @@ class ConfigProvider
605619 return [
606620 'delegators' => [
607621 Application::class => [RoutesDelegator::class],
608- PostBookResourceHandler::class => [HandlerDelegatorFactory::class],
609- GetBookResourceHandler::class => [HandlerDelegatorFactory::class],
622+ PostBookResourceHandler::class => [HandlerDelegatorFactory::class],
623+ GetBookResourceHandler::class => [HandlerDelegatorFactory::class],
610624 GetBookCollectionHandler::class => [HandlerDelegatorFactory::class],
611625 ],
612626 'factories' => [
613- PostBookResourceHandler::class => AttributedServiceFactory::class,
614- GetBookResourceHandler::class => AttributedServiceFactory::class,
627+ PostBookResourceHandler::class => AttributedServiceFactory::class,
628+ GetBookResourceHandler::class => AttributedServiceFactory::class,
615629 GetBookCollectionHandler::class => AttributedServiceFactory::class,
616630 BookService::class => AttributedServiceFactory::class,
617631 ],
0 commit comments