medium Примечание: Я не несу ответственности за качество этого кода и архитектуры, однако он выполняет необходимые функции в проекте.