Перейти к основному содержимому

basicdo

Введение

Проект "Basicdo" - это система для управления задачами и расчетом затрат, интегрированная с Telegram и Redmine. Система автоматизирует рутинные операции, упрощает учет рабочего времени и предоставляет удобный интерфейс для взаимодействия с пользователями через популярный мессенджер.

Сценарий работы:

  1. Авторизация пользователя: Пользователь, скажем Анна, запускает бота в Telegram и авторизуется через свой Telegram ID.
  2. Главное меню: Анна получает доступ к главному меню, где она может выбрать между "Список задач", "Ввод расходов", или "Помощь".
  3. Просмотр задач: Анна выбирает "Список задач". Бот показывает ей список задач, назначенных на нее в Redmine, например, "Разработка интерфейса пользователя" и "Тестирование модуля".
  4. Ввод расходов: Анна выбирает "Ввод расходов" и вводит информацию о расходах, связанных с проектом, например, "Покупка лицензии для графического редактора: 5000 рублей".
  5. Получение уведомлений: Каждые 30 минут бот автоматически проверяет наличие новых задач для Анны и уведомляет ее, если таковые появляются.
  6. Обработка входящих сообщений: Если Анна получает входящее сообщение через бота, она может непосредственно отреагировать на него.

Модель данных

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. Они обеспечивают основу для функциональности бота, включая обработку команд, учет расходов и управление задачами.

Логика работы:

  1. Старт и Главное Меню: При команде '/start' бот предлагает основные функции: просмотр задач, учет расходов, помощь.
  2. Учет Расходов: Пользователь может вводить данные о расходах, которые регистрируются в системе.
  3. Просмотр и Управление Задачами: Бот показывает список задач из Redmine, предоставляет возможность отметить выполненные задачи.
  4. Обработка Входящих Сообщений: Бот может отправлять сообщения пользователям в соответствии с полученными инструкциями через API.
  5. Настройка Webhook: Для работы бота необходимо настроить webhook.
  6. Периодическая обработка Задач: Бот автоматически обрабатывает новые задачи из Redmine каждые 30 минут и уведомляет пользователей.

Диаграмма Состояний

Анализ кода проекта

Предложения по улучшению:

  • Рефакторинг кода: Код содержит большие функции и классы, что усложняет его понимание и поддержку. Рекомендуется разбить их на более мелкие, узкоспециализированные функции.
  • Оптимизация запросов к базе данных: В коде есть места, где последовательно выполняются несколько запросов к базе данных. Использование оптимизированных запросов и кэширование результатов может повысить производительность.
  • Использование паттернов проектирования: В проекте можно было бы применить паттерны, такие как Factory для создания объектов с разными настройками, что улучшило бы читаемость и масштабируемость кода.
  • Улучшение обработки исключений: В некоторых частях кода обработка исключений может быть улучшена для предоставления более точной информации об ошибках.
  • Оптимизация работы с API внешних сервисов: Код местами напрямую обращается к API внешних сервисов без предварительной обработки или проверки данных, что может привести к ошибкам.

Оценка времени на разработку такого проекта сильно зависит от опыта команды и требований к качеству. Для опытной команды это может занять от 2 до 4 недель.

Оценка проекта по 10-балльной шкале: 7/10. Это хорошо структурированный проект с потенциалом для дальнейшего развития и оптимизации.