Skip to content

Перенос в Main#25

Open
intervisionlord wants to merge 43 commits intomainfrom
dev
Open

Перенос в Main#25
intervisionlord wants to merge 43 commits intomainfrom
dev

Conversation

@intervisionlord
Copy link
Owner

No description provided.

intervisionlord and others added 30 commits October 27, 2025 15:22
build(requirements): Понижение версии pydantic для совместимости с workflow
Создан pylint.yml для workflow github
- Хендлер получения данных по доскам
- Модель деки
- Роут для командыд получения деки
- Обновлены настройки (подключение к NextCloud)
- Обновлен .env.example

#10 #12
feat(NC): Интеграция с nextcloud
- Докстринги в хендлере
- Докстринги в логировании

#15
- Запросы через handler_requests
- Улучшено ответное сообщение со списком
- Добавлены докстринги

#12 #15
- Разделение логики обработки команд
- Подключение роутов в единый основной роут
- Добавление модели стека
- Отключен Isort на стороне pre-commit

#12
- Выборка осуществляется только по указанной доске и стеку
- Отображение деталей карточки
- Добавление покупок в карточку
- Удаление покупок из карточки
- Отметка о выполненной покупке
- Разбиение логики на отдельные суброуты
- Упрощение моделей и отказ от лишних моделей
- Отказ от лишних хендлеров

#12 #13 #9
- Оптимизация кода, чистка, упрощение
- Убран flake
- Добавление элементов в текущую открытую карточку
- Отслеживание нахождения в конкретной карточке
- Оптимизация обработки условий
- Изменение строки с версией для sonar gate
style(Bot): Полировка кода
@intervisionlord intervisionlord self-assigned this Nov 23, 2025
@github-project-automation github-project-automation bot moved this to В очереди in ShoppingBotNC Nov 23, 2025
@sonarqubecloud
Copy link

sonarqubecloud bot commented Nov 23, 2025

Quality Gate Passed Quality Gate passed

Issues
3 New issues
3 Accepted issues

Measures
0 Security Hotspots
No data about Coverage
0.0% Duplication on New Code

See analysis details on SonarQube Cloud

:param prefix: Префикс для отступов
:return: Генератор строк с древовидной структурой
"""
ignore_dirs = [] if ignore_dirs is None else ignore_dirs
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

лучше используй
ignore_dirs = ignore_dirs or []

LOG_LEVEL: str = Field("INFO", description="Уровень логирования")
LOG_LEVEL: str = "INFO"

class Config:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pydantic рекомендует использовать ConfigDict

VERSION: str = "v.:0.0.3.0"

# Токен бота Telegram
BOT_TOKEN: Optional[str] = Field(None, description="Токен бота от @BotFather")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Токен бота обязательный аргумент, так что он не должен быть None

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

С python 3.10 рекомендуется использовать str | None вместо Optional



# Создаем глобальный экземпляр настроек
settings = Settings()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

У обязательных полей не должно быть значение None.
У тебя приложение не должно запускаться без правильных настрое

for line in lines:
line = line.strip()
if not line:
continue
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Старайся избегать оператора continue
Вместо этого лучше используй filter на итерируемом объекте

for line in filter(lambda r: r, lines):
логика цикла

ELLIPSIS_LENGTH = 3

# Простой кэш карточек на время сессии
_card_cache = {}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Посмотри в строну базы данных

так твои данные будут структурированные.

А кэш используй потом, когда будет необходим быстрый доступ к данных


view_router = Router()

MAX_ITEM_PREVIEW_LENGTH = 50
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вынеси в settings


list_router = Router()

MAX_TITLE_LENGTH = 30
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вынести в settings

:type callback_data: CardCallback
"""
try:
del callback_data
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Зачем ты удаляешь callback_data?
Если она тебе не нужна, то просто не передавай ее в функцию.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

чтобы линтер не ругался

@@ -1,3 +1,5 @@
"""Точка входа приложения"""

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут опишу общие рекомендации по структуре проекта

  1. весь исполняемы код, который относится к проекту помести в одну директорию (я предпочитаю называть ее "internal")
  2. раздели внутри все в логические модули. Если это router то в них только точки входа в приложение. Какая то бизнес логика в отдельном пакете, dto тоже в отдельном

Структура которую использую я:

├── internal -- храним весь используемый код
│ ├── app
│ ├── bot -- все что связно с ботом в проекте
│ │ ├── keyboard
│ │ ├── message
│ │ ├── middleware
│ │ └── scenes
│ ├── config
│ │ └── settings -- настройки api
│ ├── controller -- точки входа в приложение (роутеры)
│ │ ├── bot  -- точки входа для бота
│ │ │ └── v1
│ │ └── http -- точки входа для fastapi
│ │     └── v1
│ ├── dto -- объекты с данными
│ ├── models -- модели базы данных
│ ├── service -- бизнес логика приложения
│ └── utils -- прочие универсальные инструменты
└── main -- точка запуска приложения

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не дублируй название файлов и директории. Ты для этого и создаешь папочную структура, чтобы логически разделить проект

у тебя routers -> routers_webhook
называй routers -> webhooks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: В очереди

Development

Successfully merging this pull request may close these issues.

2 participants