Code Monkey home page Code Monkey logo

notifications_sprint_1's Introduction

Проектная работа 10 спринта - Сервис notifications

Проектные работы в этом модуле в команде. Задания на спринт вы найдёте внутри тем.
Командный репозиторий 10го спринта - https://github.com/ilya-spy/notifications_sprint_1.git

Команда №9 (2 чел)

@bairachny.daniil @ilyaspy
тимлид - @ilyaspy

Aнализ ТЗ

Программная Архитектура сервиса нотификаций в данной реализации предполагает наличие следующих программных компонентов и микросервисов:

  1. Кофнигурационная база данных с типами уведомлений и метаданными трекинга последнего события
  2. Сервис (воркер) немедленных емейлов для важных событий через АПИ сервиса рассылки (300+ сообщ/день)
  3. Сервис (воркер) отложенных емейлов - порционный асинхронный сервис рассылок по массоввым группам
  4. Балансировщик RabbitMQ отправителей и воркеров для контроля масссовых рассылок
  5. Сервис-шаблонизатор для персонализации сообщений
  6. Адаптер доступа к шаблонизатору и планировщику по АПИ
  7. Адаптер доступа к шаблонизатору и планировщику по веб-сокет (админ-панель-приложение)
  8. Сервис хранения истории отправленных уведомлений в Кафка

Архитектура Решений сервиса нотификаций в данной реализации предполагает наличие следующиъ целевых сценариев использования.

  1. Связка UGС -> API Notifications для сводных отчетов о лайках
  2. Связка Admin Panel <- websocket -> Notifications для ручной/тестовой отправки
  3. Связка Admin Panel -> API Notifications для ручной настройки расписания отправки уведомлений
  4. Связка Admin Panel -> Шаблонизатор для управления персонализацией тела ручных рассылок
  5. Связка Планировщик -> Исполнители (воркеры) для создания периодических (недельных) событий

Запуск тестовых стендов приложения в Docker Composer

Полный стенд решения -
make notifications\dev\setup
make notifications\dev\teardown

Настройка стенда api notifications:

  1. make frontend\dev\setup -> start
  2. make frontend\dev\teardown -> finish

Настройка стенда worker:

  1. make worker\dev\setup -> start
  2. make worker\mailer -> login
  3. make worker\dev\teardown -> finish

Настройка стенда admin:

  1. make admin\dev\setup -> start
  2. make admin\dev\teardown -> finish

Установка локального окружения хоста

Базовая настройка окружения - make pipenv\base

Настройка dev окружения:

  1. make pipenv\dev\setup
  2. make pipenv\dev\teardown

Настройка prod окружения:

  1. make pipenv\prod\setup
  2. make pipenv\prod\teardown

notifications_sprint_1's People

Contributors

bdannyv avatar bdv69 avatar ilya-spy avatar

Watchers

 avatar

Forkers

bdannyv

notifications_sprint_1's Issues

Code review

Интересная работа 👍
Много пустых файлов, вероятно, это на будущее или просто заглушки, которые требуют доработки.
И обратите внимание на п.11 он требует пояснений или доработки.

  1. Пустой файл lib/api/v1/sender/message.py. Если не используете, то лучше уберите из проекта.
  2. Неиспользуемый импорт и тут. И еще десяток подобных импортов в проекте.
  3. В этой строке закомментирован импорт классов, которые далее в коде используются.
  4. Было бы хорошо здесь и дальше использовать аннотацию типов. Код с аннотацией типов будет более читаемым и легким к восприятию, а так же поддерживаемым.
  5. Вы же используете env_prefix и имена переменных окружения совпадают с именами полей. Так что не обязательно было указывать имена переменных окружения.
    class RabbitRealtimeConfig(RabbitConfig):
        exchange: str = 'send_email' # присвоится значение переменной 'RABBIT_SEND_EMAIL_QUEUE_EXCHANGE'
        exchange_type: str = 'direct'
        queue: str = Field('send_email', env='RABBIT_SEND_EMAIL_QUEUE')
        durable: bool = True
    
        class Config:
            env_prefix = "rabbit_send_email_queue_"
    
  6. Пустой файл src/archiver/archiver.py и src/generator/urlshortener.py
  7. Вот тут с типизацией не очень хорошо получилось. notifications: INotification, а делее мы по этой переменной итерируемся, значит, там должно быть что-нибудь итерируемое
  8. В папке src/sender/events также не получилось с реализацией. Внутри файлы пустые.
  9. Тип уведомления в модели правильнее сделать в виде enum, а не в виде простого текстового поля
  10. [можно лучше] Вот это была хорошая идея, которая не дошла до реализации. Вероятно, вы планировали получать данные пользователя из сервиса авторизации, где они у нас и лежат, что было бы самым верным решением для персонифицированных рассылок.
  11. Допускаю, что я пропустил. Но не смог найти какой-либо реализации (API эндпоинт или gRPC) следующего момента. Другие сервисы кинотеатра будут обращаться к сервису нотификации для того или иного уведомления пользователя. Сейчас же у вас только админка, где менеджеры управляют рассылками и собственно уведомляют пользователей.
    Вот ситуация: пользователь изменил пароль в сервисе авторизации, сервис авторизации просит сервис уведомлений отправить пользователю сообщение, что-то вроде "Пароль изменен....". Или в сервисе выдачи контента, что-то произошло и нужно уведомить пользователя.
    Другие сервисы кинотеатра, которые будут взаимодействовать с этим сервисом уведомлений, не будут иметь полной и актуальной информации о пользователе. У них точно будет id пользователя, а сервис нотификации, должен сходить в сервис авторизации (где у нас лежать актуальные данные пользователя). И в такой реализации очень пригодиться gRPC.
    Дайте комментарий, где у вас реализовано вот это межсервисное взаимодействия. Без него, это не сервис нотификации, а сервис рассылки, что немного не то.

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.