basicdo
Введение
Проект "Basicdo" - это система для управления задачами и расчетом затрат, интегрированная с Telegram и Redmine. Система автоматизирует рутинные операции, упрощает учет рабочего времени и предоставляет удобный интерфейс для взаимодействия с пользователями через популярный мессенджер.
Сценарий работы:
- Авторизация пользователя: Пользователь, скажем Анна, запускает бота в Telegram и авторизуется через свой Telegram ID.
- Главное меню: Анна получает доступ к главному меню, где она может выбрать между "Список задач", "Ввод расходов", или "Помощь".
- Просмотр задач: Анна выбирает "Список задач". Бот показывает ей список задач, назначенных на нее в Redmine, например, "Разработка интерфейса пользователя" и "Тестирование модуля".
- Ввод расходов: Анна выбирает "Ввод расходов" и вводит информацию о расходах, связанных с проектом, например, "Покупка лицензии для графического редактора: 5000 рублей".
- Получение уведомлений: Каждые 30 минут бот автоматически проверяет наличие новых задач для Анны и уведомляет ее, если таковые появляются.
- Обработка входящих сообщений: Если Анна получает входящее сообщение через бота, она может непосредственно отреагировать на него.
Модель данных
BasicdoTelegramBotSetting
Эта модель содержит настройки бота и связанные с ним данные для работы с Redmine.
- name: Название настроек бота.
- user: Связь с пользователем Django, владельцем настроек.
- tracker_user: Связь с объектом
TrackerUserдля интеграции с Redmine. - project_identifier: Идентификатор проекта в Redmine.
- bot_token: Токен Telegram бота.
- default_categories: Список категорий для учета расходов.
- help_message: Стандартное сообщение помощи бота.
- payment_date, currency, tracker_cost, contractor_id, sum_to_pay, invoicing_date: Поля, связанные с финансовыми аспектами учета расходов и их отправки в Redmine.
BasicdoUser
Модель пользователя, связанная с настройками бота и Telegram.
- name: Имя пользователя.
- user: Связь с пользователем Django.
- telegram_id: ID пользователя в Telegram.
- bot: Связь с настройками бота
BasicdoTelegramBotSetting. - last_update: Время последнего обновления пользователя.
- state: Текущее состояние пользователя в боте, используется для определения действий пользователя.
- chosen_category, chosen_issue: Выбранная категория и задача пользователя для взаимодействия с ботом.
Эти модели используются для хранения информации о настройках бота и состоянии пользователя, а также для интеграции с Redmine. Они обеспечивают основу для функциональности бота, включая обработку команд, учет расходов и управление задачами.
Логика работы:
- Старт и Главное Меню: При команде '/start' бот предлагает основные функции: просмотр задач, учет расходов, помощь.
- Учет Расходов: Пользователь может вводить данные о расходах, которые регистрируются в системе.
- Просмотр и Управление Задачами: Бот показывает список задач из Redmine, предоставляет возможность отметить выполненные задачи.
- Обработка Входящих Сообщений: Бот может отправлять сообщения пользователям в соответствии с полученными инструкциями через API.
- Настройка Webhook: Для работы бота необходимо настроить webhook.
- Периодическая обработка Задач: Бот автоматически обрабатывает новые задачи из Redmine каждые 30 минут и уведомляет пользователей.
Диаграмма Состояний
Анализ кода проекта
Предложения по улучшению:
- Рефакторинг кода: Код содержит большие функции и классы, что усложняет его понимание и поддержку. Рекомендуется разбить их на более мелкие, узкоспециализированные функции.
- Оптимизация запросов к базе данных: В коде есть места, где последовательно выполняются несколько запросов к базе данных. Использование оптимизированных запросов и кэширование результатов может повысить производительность.
- Использование паттернов проектирования: В проекте можно был о бы применить паттерны, такие как Factory для создания объектов с разными настройками, что улучшило бы читаемость и масштабируемость кода.
- Улучшение обработки исключений: В некоторых частях кода обработка исключений может быть улучшена для предоставления более точной информации об ошибках.
- Оптимизация работы с API внешних сервисов: Код местами напрямую обращается к API внешних сервисов без предварительной обработки или проверки данных, что может привести к ошибкам.
Оценка времени на разработку такого проекта сильно зависит от опыта команды и требований к качеству. Для опытной команды это может занять от 2 до 4 недель.
Оценка проекта по 10-балльной шкале: 7/10. Это хорошо структурированный проект с потенциалом для дальнейшего развития и оптимизации.