Code Monkey home page Code Monkey logo

netflix-movies-api's People

Contributors

reznikovroman avatar wearestarsdust avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

netflix-movies-api's Issues

[FEATURE] Test films [functional tests]

Description
Написать функциональные тесты для Фильмов

Possible solution

  1. Протестировать эндпоинты GET /api/v1/films/, GET /api/v1/films/search?query=XXX, GET /api/v1/films/{uuid}
  2. Протестировать работу пагинации и сортировки
  3. Протестировать получение данных из кеша

Additional context

[FEATURE] NP-05_ETL genre

Description
Добавить в существующий ETL пайплайн, в котором создается и заполняется индекс genre. Плоский индекс без денормализованных данных.

Possible solution

  1. Отрефакторить существующий ETL сервис
  2. По аналогии с Filmwork сделать пайплайн для обновления Genre

Additional context

[FEATURE] Test repositories layer [unit tests]

Description
Написать юнит тесты для слоя репозиториев

Possible solution

  1. Протестировать базовые репозитории для работы с БД и кешом
  2. Протестировать репозитории FilmRepository, GenreRepository, PersonRepository - получение данных напрямую из БД и из кеша

Additional context

[FEATURE] NP-07_2_Persons logic

Description
Добавить сервис, который обращается к Elasticsearch и возвращает информацию о персоналиях - по одному или списком.

При запросе списком учитывать параметры фильтрации.

Possible solution

  1. Сделать репозиторий по аналогии с FilmworkRepository и GenreRepository
  2. Репозиторий для персоналий:
    • получение объекта по ID
    • поиск объекта с переданными параметрами
    • пагинация (пример: page[number]=1&page[size]=50)
  3. Добавить эндпоинты:
    • вывод списка персон (с возможной фильтрацией, пагинацией);
    • детальная страницы персоны (с простым списком фильмов);
    • страница персоны (с разбивкой фильмов по ролям);
    • поиск по персонам;
    • фильмы по персоне

Additional context

[FEATURE] Test persons [unit tests]

Description
Написать юнит тесты для Персон

Possible solution

  1. Протестировать эндпоинты GET /api/v1/persons/, GET /api/v1/persons/search?query=XXX, GET /api/v1/persons/{uuid}, GET /api/v1/persons/full/{uuid}, GET /api/v1/persons/{uuid}/films
  2. Протестировать работу пагинации и сортировки
  3. Протестировать обработку ошибок

Additional context

[FEATURE] Exponential backoff

Description
Реализовать работу с внешними сервисами (Redis, Elasticsearch) через exponential backoff

Possible solution

  1. Использовать декоратор backoff при запросах к внешним сервисам

Additional context

[FEATURE] NP-02_Docker

Description
Нужен Dockerfile для билда бекенда для API. Также нужно создать (или адаптировать созданные ранее) docker-compose, чтобы поднимались все сервисы разом.

Possible solution

  1. Поднять сервис ETL на сервере:
    • Развернуть сервис ETL в Яндекс Облаке (можно использовать Container Optimized Image)
    • Подключаться к Elasticsearch по заданному адресу
  2. Использование докер образов:
    • Запушить образы контейнеров из сервиса ETL в Cloud Registry
    • Создать новый docker-compose.yml файл для всего проекта
    • Добавить сервисы из ETL в новый docker-compose

Additional context

Code review

Отличная работа, все задания выполнены на крайне высоком уровне. Очевидно, что подобная работа не первая подобного рода :)

  1. В сервисах src/services методы get_....._by_id практически идентичны. Можно вынести в базовый класс.
  2. Раз вы знакомы с паттерном проектирования с использованием репозиториев и сервисов, то может быть интересным https://python-dependency-injector.ets-labs.org/examples/fastapi.html

[FEATURE] CacheTestMixin with params

Description
по аналогии с CacheTestMixin сделать миксин для проверки кэша с параметрами

Possible solution
Вынести в миксин следующие методы:

test_film_list_from_cache_with_params
test_film_search_from_cache_with_params

Additional context

  • Вопросы поднимались в 38 пул реквесте

[FEATURE] NP-06_ETL person

Description
Добавить в существующие ETL пайплайн, в котором создается и заполняется индекс person с авторами, сценаристами и режиссерами. Плоский индекс без денормализованных данных.

Possible solution

  1. По аналогии с пайплайном для Filmwork и Genre добавить Person

Additional context

[FEATURE] NP-00_Create repo

Description
Создать репозитарий для проекта на основе шаблона, расшарить доступы для тиммейтов и кодревьюеров

Каждый микросервис реализуется и работает как полностью независимая система, предоставляющая доступ к своей внутренней логике и данным с помощью определенного интерфейса. Это способствует повышению гибкости ПО, поскольку каждый микросервис является независимой единицей в плане разработки и масштабирования.

Будучи независимыми сервисами с четкими границами, не копируйте admin и etl в новый репозиторий

Possible solution
.

Additional context
.

[FEATURE] Refactor Person repository

Description
Отрефакторить метод PersonRepository. get_person_films - делать запрос к индексу movies и искать фильмы для данной персоны (можно искать по actors, writers, directors)

Possible solution

  1. Делать запрос к индексу movies и фильтровать фильмы по uuid персоны
  2. Пример запроса к индексу (GET movies/_search):
{
  "query": {
    "bool": {
      "should": [
        {
          "nested": {
          "path": "actors",
          "query": {
            "term": {
              "actors.uuid": {
                "value": "065dcb6d-a32d-4f16-89cf-dcaa36561253"
                }
              }
            }
          }
        },
        {
          "nested": {
          "path": "writers",
          "query": {
            "term": {
              "writers.uuid": {
                "value": "065dcb6d-a32d-4f16-89cf-dcaa36561253"
                }
              }
            }
          }
        },
        {
          "nested": {
          "path": "directors",
          "query": {
            "term": {
              "directors.uuid": {
                "value": "065dcb6d-a32d-4f16-89cf-dcaa36561253"
                }
              }
            }
          }
        }
      ]
    }
  }
}

Additional context

[FEATURE] NP-03_Schemas

Description
Создать модели, прописав правильные типы данных для:

  • фильмов
  • жанров,
  • актеров, сценаристов, режиссеров

Possible solution
.

Additional context

[FEATURE] Refactor repositories layer

Description
Отрефакторить слой репозиториев в проекте (следуя принципам SOLID).

Possible solution

  1. Сделать отдельный класс для кеша + реализацию кеша с использованием Redis
  2. Сделать отдельный класс для работы с данными напрямую из БД + реализацию с использованием Elasticsearch
  3. Отрефакторить существующие миксины для работы с Redis и Elasticsearch

Additional context

[FEATURE] NP-08_Cache

Description
Кешировать ответы ручек, запрошенных с одинаковыми параметрами, чтобы не ходить лишний раз в Elasticsearch.

Possible solution

  1. Изменить репозитории/добавить базовый, который будет возвращать данные либо из кэша, либо непосредственно из Elasticsearch
  2. Если данных в кэше не было - записываем их после запроса в кэш и выставляем ttl. В качестве ключа можно использовать хэш самого запроса с параметрами

Additional context

[FEATURE] Tests infrastructure

Description
Разработать инфраструктуру для функциональных и юнит тестов.

Possible solution

  1. Создать тестового клиента АПИ
  2. Создать основные фикстуры/фабрики

Additional context

[FEATURE] NP-04_Movie logic

Description
Добавить сервис, который обращается к Elasticsearch (используя драйвер) и возвращает информацию о фильмах – по одному или списком.

При запросе списком учитывать параметры фильтрации и сортировки.

Possible solution

  1. Репозиторий фильмов:
    • получения фильма по ID
    • поиск фильма с переданными параметрами
    • пагинация (пример: page[number]=1&page[size]=50)

Additional context

[FEATURE] Netflix Auth Integration

Description
Сделать интеграцию с сервисом авторизации Netflix Auth API. Ссылка на задачу в Netflix Auth.

Possible solution

  1. Написать клиенты для работы с auth0 и сервисом Netflix Auth (integrations: http, client)
  2. Проверять роли пользователя по JWT токену
  3. Сделать отдельный эндпоинт для получения фильмов, доступных только по подписке
    • "Защитить" этот эндпоинт jwt авторизацией - будем ходить в Netflix Auth для получения информации по пользователю
    • Написать функциональные тесты

Additional context

[FEATURE] NP-07_Genres logic

Description
Добавить сервис, который обращается к Elasticsearch и возвращает информацию о жанрах - по одному или списком.

Possible solution

  1. Сделать репозиторий по аналогии с FilmworkRepository
  2. Репозиторий для жанров:
    • получение объекта по ID
    • поиск объекта с переданными параметрами
  3. Добавить эндпоинты:
    • вывод списка жанров
    • детальная страница жанра

Additional context

[FEATURE] * Refactor services

Description
Отрефакторить слой сервисов в проекте.

Possible solution

  1. Использовать Dependency Injector вместо стандартного Depends из FastAPI ?
  2. Изменить базовые сервисы и миксины ?
    • Передавать в конструктор класса функцию для генерации ключа в кэше ?

Additional context

Code review

Привет! Отличная работа! Отдельно отмечу то, как вы подробно оформляете и ведете issue - это очень круто! Ниже пара рекомендаций:

  1. Совет: в ETL вы сделали классные пайплайны, но тут есть нюанс, вы в атрибуты класса кладете инстанциированные объекты. У этого подхода есть две проблемы: у вас не синглтоны и вы рискуете, что в будущем ваш класс могут инстанциировать более одного раза и получить проблемы с объектами в атрибутах. Второе: момент инициализации, сейчас у вас инициализация произойдет в момент импорта модуля, а это не всегда хорошо и удобно. Более правильные пути:
    • использовать property
    • написать примерно так (ведь инициализация у них одинаковая и можно сделать ее внутри init):
      class FilmworkPipeline(ETLPipeline):
          loader = FilmworkLoader
          transformer = FilmworkTransformer
          extractor = FilmworkExtractor```
      
  2. Укажите конкретную версию redis
  3. Задайте здесь workdir='/app/src', тогда не придется в commands делать cd
  4. Здесь лишняя новая строка, и то и другое - установленные зависимости, их не надо разделять
  5. Тут просто интересная логика разделения: почему ES - это остальное, а redis указали в настройках проекта?

[FEATURE] Test persons [functional tests]

Description
Написать функциональные тесты для Персон

Possible solution

  1. Протестировать эндпоинты GET /api/v1/persons/, GET /api/v1/persons/search?query=XXX, GET /api/v1/persons/{uuid}, GET /api/v1/persons/full/{uuid}, GET /api/v1/persons/{uuid}/films
  2. Протестировать работу пагинации и сортировки
  3. Протестировать получение данных из кеша

Additional context

[FEATURE] Test films [unit tests]

Description
Написать юнит тесты для Фильмов

Possible solution

  1. Протестировать эндпоинты GET /api/v1/films/, GET /api/v1/films/search?query=XXX, GET /api/v1/films/{uuid}
  2. Протестировать работу пагинации и сортировки
  3. Протестировать обработку ошибок

Additional context

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.