Комментарии 10
Было бы интересно посмотреть на многоуровневую сортировку и группировку.
На всякий случай объясняю:
1. Возможность передать список полей/свойств по которым нужно отсортировать.
2. Возможность передать список полей/свойств по которым нужно сгруппировать. Группировка многоуровневая, т.е. условно, у продукта есть свойства категория, тип, остальные свойства, мы ходим сначала сгруппировать по типу, а дальше - по категории.
Я правильно понимаю, что если будет использоваться фильтр, из-за которого нужно приджоинить таблицу к запросу, то все равно все сведется к if-ам?
Если я правильно понял ваш вопрос, то нет, if-ами не придётся пользоваться.
Вот ссылка на пример с outerjoin
-ом.
Ссылка откроется нормально только в Chrome, так как она сформирована его возможностями ссылки на любой выделенный текст на странице.
Пагинация выглядит так, что мы сначала фильтруем и извлекаем из базы все данные, а потом уже выделяем нужную страницу. При этом мы загружаем в память все подходящие под фильтр данные, а затем уже эти данные нарезаем на страницы. Это нормально работает когда у нас всего строк в таблице и десятка не наберется. Когда окажется, что в таблице пара миллионов строк, 100 000 подходит под фильтр, а нам нужны только первые 15, загружать все 100к в память будет грустно. А если пользователь решит идти по страницам, то все вышеуказанное мы будем делать для каждой страницы.
И еще. Идея добавлять в конец списка результатов информацию о странице выглядит сомнительно. Обращаясь к этому API, я должен помнить, что у меня в одной коллекции могут быть сущности разных типов, что сильно усложняет обработку результата.
Да, результат запроса надо просто положить на уровень вложенности глубже, в какой нибудь список /results: [...].
И чем это поможет? У вас следующий запрос может быть с другими фильтрами, и то что вы так изящно закешировали станет бесполезным.
Я не очень понял что я и где кешировал в своём ответе, я лишь прокомментировал последний абзац вашего комментария, в целом я полностью согласен с вами
Я воспринял как желание кешировать ваш ответ про
результат запроса надо просто положить на уровень вложенности глубже, в какой нибудь список /results: [...]
Либо я не понял что и куда вы предлагаете положить.
Фильтрация и пагинация в FastAPI