kenki0 / asyncapiservice Goto Github PK
View Code? Open in Web Editor NEW4 спринт курса и первая часть асинхронного API для кинотеатра
4 спринт курса и первая часть асинхронного API для кинотеатра
С развитием проекта в тестах фикстур будет все больше и больше, и их нужно систематизировать. Можно вынести в отдельный файл (затем добавлять другие файлы, логически разделяя их) и тем самым облегчим conftest.py. Для этого в conftest.py есть pytest_plugins
В скриптах ожидания ES и Redis в тестах (tests/functional/utils/wait_for_es.py
и tests/functional/utils/wait_for_redis.py
) вместо вечного цикла, в который можно попасть при возникновении сложностей, лучше использовать backoff из прошлых спринтов. Он более функционален в сравнении с вечным циклом, теоретически он может сигнализировать команде поддержки после определенного количества попыток.
А вот эти файлы с какой целью у вас дублируются в тестах? tests/functional/es_mapping.py
и tests/functional/index_fillings.py
, их копии лежат в tests/functional/testdata
Соберите все фикстуры в одном месте, так будет легче их поддерживать в дальнейшем (например, тут и тут). Тут, как раз, пригодится п.1
Не используйте прямое указание кодов ответов сервера в тестах (200, 400 и т.д.), применяйте http.HTTPStatus. Этим можно немного повысить читаемость кода https://docs.python.org/3/library/http.html#http.HTTPStatus
В src/api/v1
много раз встречается вот такая конструкция в параметрах методов:
page_num: int = Query(default=1, alias='page[number]', ge=1),
page_size: int = Query(default=50, alias='page[size]', ge=1),
Можно попробовать вынести эту пару в отдельный класс, какой-нибудь PaginatedParams, инжектить его в качестве зависимости в параметры методов и работать с ними как с объектом. Т.о. параметры пагинации будут в одном месте и при необходимости легко будет их изменить сразу и везде.
Проверить работу кеширования данных.
Оценка: 5
Ссылка на PR: pass
Покрыть функциональными тестами endpoint /search
Оценка: 8
Ссылка на PR: pass
Проверить класс по работе с хранилищем на SOLID. Изменить структуру программы, если это необходимо.
Оценка: 5
Ссылка на PR: pass
Добавить сервис, который обращается к Elasticsearch (используя драйвер) и возвращает информацию о фильмах – по одному или списком.
При запросе списком учитывать параметры фильтрации и сортировки.
Проверить класс по работе с бизнес-логикой на SOLID. Изменить структуру программы, если это необходимо.
Оценка: 8
Ссылка на PR: pass
Покрыть функциональными тестами endpoint /film
Оценка: 5
Ссылка на PR: pass
Проведите ревью задания своего коллеги по команде. Можно брать задания из спринта по ETL, и первого спринта из модуля "Сервис Async API".
Оценка: 2.5
Ссылка на PR: #43
Сделать ручку для инвалидации кеша. Логика работы следующая:
Так же реализовать авторизацию для ограничения доступа к этой ручке, самую простую через какой нибудь secret key который будет передаваться в headers запроса
Покрыть функциональными тестами endpoint /genre
Оценка: 5
Ссылка на PR: pass
Создать модели, прописав правильные типы данных для:
Необходимо разработать инфраструктуру для запуска функциональных тестов. Тесты изолированно запускаются в docker-compose
Оценка: 13
Ссылка на PR: pass
Реализовать работу с внешними сервисами через exponential backoff
Оценка: 8
Ссылка на PR: pass
Собрать все фикстуры в одном месте. Реализовать pytest_plugins.
Оценка: 5
Ссылка на PR: pass
Исправление замечаний после ревъю
Оценка: 1
Ссылка на PR: pass
Добавить сервис, который обращается к Elasticsearch и возвращает информацию о жанрах - по одному или списком.
При запросе списком учитывать параметры фильтрации и сортировки.
Оценка: 6.5
Хорошая работа 👍 Вы даже сделали часть следующего спринта.
redis: Optional[Redis]
можно представить как redis: Redis | None
page_num: int = Query(default=1, alias='page[number]')
и page_size: int = Query(default=50, alias='page[size]')
рекомендую добавить валидацию, для исключения ввода отрицательных значений. Например: page_size: int = Query(default=50, alias='page[size]', ge=0)
- это и в Swagger отразится.Написать dockerfile для билда и написать docker compose, чтобы поднимать все сервисы, написанные ранее
Проведите ревью задания своего коллеги по команде. Можно брать задания из спринта по ETL, и первого спринта из модуля "Сервис Async API".
Оценка: 2.5
Ссылка на PR: #35
Проверить класс по работе с кешом на SOLID. Изменить структуру программы, если это необходимо.
Оценка: 5
Ссылка на PR: pass
Кешировать ответы ручек, запрошенных с одинаковыми параметрами, чтобы не ходить лишний раз в Elasticsearch.
Покрыть функциональными тестами endpoint /person
Оценка: 5
Ссылка на PR: pass
Добавить сервис, который обращается к Elasticsearch и возвращает информацию о персоналиях - по одному или списком.
При запросе списком учитывать параметры фильтрации и сортировки.
Оценка: 6.5
Подготовить документацию для клиентов сервиса, используя OpenAPI
Оценка: 5
Ссылка на PR: pass
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.