-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
79 changed files
with
6,644 additions
and
145 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
BOT_TOKEN=<'BOT TOKEN'> | ||
TELEGRAM_CHAT_IDS=<'TELEGRAM CHAT IDS'> | ||
|
||
DATABASE_URL=<'DATABASE URL'> | ||
POSTGRES_USER=<'DB OWNER'> | ||
POSTGRES_PASSWORD=<'PASSWORD'> | ||
POSTGRES_DB=<'DB NAME'> | ||
DB_HOST=<'DB HOST'> | ||
DB_PORT=<'DB PORT'> | ||
|
||
EMAIL=<'MANAGER EMAIL'> | ||
EMAIL_PASSWORD=<'PASSWORD'> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
name: SCID 3 Bot Workflow | ||
on: | ||
push: | ||
branches: | ||
- master | ||
- dev | ||
# pull_request: | ||
# branches: | ||
# - dev | ||
jobs: | ||
linter: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Check out code | ||
uses: actions/checkout@v3 | ||
- name: Set up Python | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: '3.12' | ||
- name: Install dependencies | ||
run: | | ||
python -m pip install --upgrade pip | ||
pip install flake8 | ||
- name: Test with flake8 | ||
run: python -m flake8 app/ | ||
build_and_push_to_docker_hub: | ||
name: Push Docker image to DockerHub | ||
runs-on: ubuntu-latest | ||
needs: linter | ||
steps: | ||
- name: Check out the repo | ||
uses: actions/checkout@v3 | ||
- name: Set up Docker Build | ||
uses: docker/setup-buildx-action@v2 | ||
- name: Login to Docker | ||
uses: docker/login-action@v2 | ||
with: | ||
username: ${{ secrets.DOCKER_USERNAME }} | ||
password: ${{ secrets.DOCKER_PASSWORD }} | ||
- name: Push to DockerHub | ||
uses: docker/build-push-action@v4 | ||
with: | ||
context: . | ||
push: true | ||
tags: greenvibe/scid_bot_3:latest | ||
deploy: | ||
runs-on: ubuntu-latest | ||
needs: build_and_push_to_docker_hub | ||
steps: | ||
- name: Checkout repo | ||
uses: actions/checkout@v3 | ||
- name: Copy docker-compose.yml via ssh | ||
uses: appleboy/scp-action@master | ||
with: | ||
host: ${{ secrets.HOST }} | ||
username: ${{ secrets.USER }} | ||
key: ${{ secrets.SSH_KEY }} | ||
passphrase: ${{ secrets.SSH_PASSPHRASE }} | ||
source: "docker-compose.yml" | ||
target: "scid_bot" | ||
- name: Executing remote ssh commands to deploy | ||
uses: appleboy/ssh-action@master | ||
with: | ||
host: ${{ secrets.HOST }} | ||
username: ${{ secrets.USER }} | ||
key: ${{ secrets.SSH_KEY }} | ||
passphrase: ${{ secrets.SSH_PASSPHRASE }} | ||
script: | | ||
cd scid_bot | ||
sudo docker compose -f docker-compose.yml pull | ||
sudo docker compose -f docker-compose.yml down | ||
sudo docker compose -f docker-compose.yml up -d | ||
send_message: | ||
runs-on: ubuntu-latest | ||
needs: deploy | ||
steps: | ||
- name: Send message | ||
uses: appleboy/telegram-action@master | ||
with: | ||
to: ${{ secrets.TELEGRAM_TO }} | ||
token: ${{ secrets.TELEGRAM_TOKEN }} | ||
message: Деплой успешно выполнен! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
FROM python:3.12.0-slim | ||
WORKDIR /app | ||
|
||
# Установка необходимых системных зависимостей (если нужно) | ||
RUN apt-get update && apt-get install -y --no-install-recommends \ | ||
curl \ | ||
&& apt-get clean \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
|
||
# Установка Poetry | ||
RUN curl -sSL https://install.python-poetry.org | python3 - | ||
|
||
# Установка пути для Poetry | ||
ENV PATH="/root/.local/bin:$PATH" | ||
|
||
# Копирование только pyproject.toml и poetry.lock (если есть) для кэширования зависимостей | ||
COPY pyproject.toml poetry.lock* ./ | ||
|
||
# Установка зависимостей | ||
RUN poetry install --no-root | ||
|
||
# Копирование остальных файлов, включая alembic | ||
COPY . . | ||
|
||
# Создание миграций | ||
#WORKDIR /app/app | ||
#RUN poetry run alembic stamp head | ||
#RUN poetry run alembic revision --autogenerate -m "compose commit" | ||
#RUN poetry run alembic upgrade head | ||
|
||
# Команда для запуска приложения | ||
CMD ["poetry", "run", "python", "app/main.py"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,193 @@ | ||
### Установка: | ||
- клонируем директорию с гитхаба | ||
- устанавливаем poetry из любой директории: pip install poetry --user | ||
- переходим в папку проекта и устанавливаем зависимости: poetry install | ||
- создаём файл .env и добавляем строку BOT_TOKEN='<токен бота>' | ||
# Чат-бот для предоставления информации, помощи в обслуживании клиентов, проведения маркетинговых кампаний. | ||
|
||
**SCID** — это цифровое агентство полного цикла, основанное в 2008 году. Оно занимается созданием IT-решений, которые помогают компаниям оптимизировать бизнес-процессы и улучшить эффективность. Среди ключевых услуг агентства — разработка сайтов, мобильных приложений, CRM-систем и систем бизнес-аналитики (BI). | ||
|
||
### Директории: | ||
- app/bot - основная логика работы бота | ||
- app/admin - админка бота | ||
- app/exceptions - вызовы возможных ошибок | ||
- pyproject - файл виртуального окружения | ||
- poetry - файл с зависимостями | ||
**Основные направления деятельности SCID включают:** | ||
|
||
1. Разработку программного обеспечения, включая системы для управления бизнесом; | ||
2. Создание сайтов и мобильных приложений для различных отраслей, включая медицину, образование и ритейл; | ||
3. Интеграцию с корпоративными системами и разработку сложных CRM-систем; | ||
4. Внедрение бизнес-аналитики (BI) для компаний с помощью современных цифровых инструментов. | ||
5. SCID также работает с крупнейшими представителями бизнеса и государственных структур, успешно реализовав более 250 проектов для разных отраслей, что делает их экспертом в создании индивидуальных IT-решений для компаний всех размеров. | ||
|
||
### Как работаем: | ||
- работает каждый в своей ветке, лучше назвать по именам разработчиков, чтоб не путаться, ветки наследуем от dev | ||
- пушим через pull request в dev | ||
Благодаря многолетнему опыту и глубокому пониманию специфики цифровых технологий, агентство создает проекты, ориентированные на решение конкретных задач клиентов, будь то оптимизация логистики, внедрение систем управления ресурсами или улучшение пользовательского опыта. | ||
|
||
Для более детальной информации можно посетить официальный сайт компании: [SCID](https://scid.ru/). | ||
|
||
### Ссылка на бота: | ||
https://t.me/csid_inform_bot | ||
--- | ||
|
||
## Стек технологий | ||
|
||
В данном проекте используется современный стек технологий, который обеспечивает эффективную разработку, масштабируемость и удобство в использовании. Ниже представлены основные библиотеки и инструменты, использованные в проекте: | ||
|
||
- **Python**: Основной язык программирования проекта, известный своей простотой и читаемостью, что способствует быстрой разработке. | ||
|
||
- **Aiogram**: Асинхронная библиотека для создания Telegram-ботов, обеспечивающая простоту интеграции и работы с `API Telegram`. | ||
|
||
- **Pydantic**: Библиотека для валидации данных и работы с настройками на основе аннотаций типов Python, что улучшает надежность кода. | ||
|
||
- **Python-dotenv**: Позволяет загружать переменные окружения из файла `.env`, упрощая управление конфигурацией приложения. | ||
|
||
- **Alembic**: Инструмент для управления миграциями базы данных, совместимый с `SQLAlchemy`, что облегчает версионирование схемы базы данных. | ||
|
||
- **SQLAlchemy**: `ORM (Object Relational Mapping)` библиотека для работы с реляционными базами данных, предоставляющая высокоуровневый интерфейс для взаимодействия с базами данных. | ||
|
||
- **Pydantic-settings**: Расширение `Pydantic` для управления настройками приложений с поддержкой файлов конфигурации и переменных окружения. | ||
|
||
- **Asyncpg**: Асинхронный драйвер для `PostgreSQL`, который обеспечивает высокую производительность и эффективное взаимодействие с базой данных. | ||
|
||
- **Aiosmtplib**: Асинхронная библиотека для отправки электронной почты через `SMTP`, позволяющая интегрировать почтовые функции в приложение. | ||
|
||
- **Make**: Инструмент для автоматизации задач, упрощающий процессы установки зависимостей и запуска различных команд. | ||
|
||
- **Black**: Форматировщик кода, который помогает поддерживать код в чистом и читаемом состоянии, следуя единым стандартам оформления. | ||
|
||
Этот стек технологий был выбран для обеспечения надежности, производительности и удобства разработки, что позволяет сосредоточиться на реализации бизнес-логики приложения. | ||
|
||
--- | ||
|
||
## .env | ||
|
||
В проекте используются переменные окружения для конфигурации подключения к различным сервисам, таким как Telegram, база данных, и почтовый сервер. Вам необходимо создать файл `.env` на основе примера `.env.example` и заполнить его актуальными данными. | ||
|
||
### Шаги для настройки | ||
|
||
1. **Скопируйте файл `.env.example` в `.env`:** | ||
|
||
```bash | ||
cp .env.example .env | ||
``` | ||
|
||
### Заполните файл `.env` своими данными | ||
|
||
2. **Откройте файл `.env` в любом текстовом редакторе и замените значения в угловых скобках на актуальные данные.** | ||
|
||
### Описание переменных окружения | ||
|
||
- **`TELEGRAM_TOKEN`**: Токен вашего Telegram-бота. Получите его у [BotFather](https://t.me/BotFather). | ||
|
||
- **`TELEGRAM_CHAT_IDS`**: Список ID чатов Telegram, которые получат статус администратора. Эти ID можно получить после настройки бота. | ||
|
||
- **`DATABASE_URL`**: Полный URL для подключения к базе данных PostgreSQL. Пример: | ||
```bash | ||
postgresql://<DB_OWNER>:<PASSWORD>@<DB_HOST>:<DB_PORT>/<DB_NAME> | ||
|
||
POSTGRES_USER: Имя пользователя, который является владельцем базы данных. | ||
|
||
- **`POSTGRES_PASSWORD`**: Пароль для подключения к базе данных. | ||
|
||
- **`POSTGRES_DB`**: Название базы данных, к которой происходит подключение. | ||
|
||
- **`DB_HOST`**: Хост базы данных (например, localhost или IP-адрес сервера). | ||
|
||
- **`DB_PORT`**: Порт для подключения к базе данных (обычно 5432 для PostgreSQL). | ||
|
||
- **`EMAIL`**: Адрес электронной почты, который будет использоваться для отправки сообщений менеджеру. | ||
|
||
- **`EMAIL_PASSWORD`**: Пароль для доступа к электронной почте, с которой будут отправляться сообщения. | ||
|
||
3. **Пример заполненного файла `.env`:** | ||
```bash | ||
TELEGRAM_TOKEN=123456789:ABCdefGhijklMNOpqrstuvwxyz | ||
TELEGRAM_CHAT_IDS=123456789,987654321 | ||
DATABASE_URL=postgresql://dbuser:password@localhost:5432/mydatabase | ||
POSTGRES_USER=dbuser | ||
POSTGRES_PASSWORD=password | ||
POSTGRES_DB=mydatabase | ||
DB_HOST=localhost | ||
DB_PORT=5432 | ||
[email protected] | ||
EMAIL_PASSWORD=your-email-password | ||
``` | ||
--- | ||
|
||
## Как использовать Makefile | ||
|
||
[Makefile](https://victorz.ru/202402043262) предоставляет команды для упрощения управления зависимостями, миграциями базы данных и запуском приложения. Вот описание каждой команды: | ||
|
||
### 1. Установка зависимостей | ||
Команда устанавливает зависимости, указанные в `pyproject.toml`, с помощью `Poetry`. | ||
|
||
**Использование:** | ||
```bash | ||
make install | ||
``` | ||
|
||
### 2. Установка нового пакета | ||
Команда добавляет новый пакет в проект с помощью `Poetry`. Нужно передать переменную `PACKAGE`, указывающую имя пакета. | ||
|
||
**Использование:** | ||
```bash | ||
make install-package PACKAGE=<имя_пакета> | ||
``` | ||
|
||
### 3. Обновление зависимостей | ||
Команда обновляет все зависимости до последних версий с помощью `Poetry`. | ||
|
||
**Использование:** | ||
```bash | ||
make update | ||
``` | ||
|
||
### 4. Запуск приложения | ||
Команда запускает основное приложение, используя переменные `PYTHON` (интерпретатор) и `APP` (главный файл приложения). | ||
|
||
**Использование:** | ||
```bash | ||
make run | ||
``` | ||
|
||
### 5. Очистка .pyc файлов | ||
Команда удаляет все файлы .pyc, которые создаются при компиляции Python. Это помогает очистить проект от временных файлов. | ||
|
||
**Использование:** | ||
```bash | ||
make clean | ||
``` | ||
|
||
### 6. Форматирование кода | ||
Команда форматирует весь код проекта по стандарту black. | ||
|
||
**Использование:** | ||
```bash | ||
make format | ||
``` | ||
|
||
### 7. Применение миграций | ||
Команда применяет все доступные миграции к базе данных с помощью Alembic. | ||
|
||
**Использование:** | ||
```bash | ||
make migrate | ||
``` | ||
|
||
### 8. Откат миграций | ||
Команда откатывает последнюю примененную миграцию базы данных с помощью Alembic. | ||
|
||
**Использование:** | ||
```bash | ||
make downgrade | ||
``` | ||
|
||
### 9. Создание миграции | ||
Команда создает новую миграцию на основе изменений в моделях базы данных. Необходимо указать описание изменений в переменной msg. | ||
|
||
**Использование:** | ||
```bash | ||
make makemigration msg="описание изменений" | ||
``` | ||
|
||
### 10. Docker Compose команда | ||
Команда выполняет следующие действия для работы с Docker Compose: | ||
|
||
- Проставляет текущее состояние миграций: alembic stamp head. | ||
- Генерирует новую миграцию: alembic revision --autogenerate. | ||
- Применяет миграции: alembic upgrade head. | ||
- Запускает основное приложение. | ||
|
||
**Использование:** | ||
```bash | ||
make docker_compose_command | ||
``` |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
from .delete_manager import DeleteManager, DeleteState # noqa | ||
from .create_manager import CreateManager, CreateState # noqa | ||
from .update_manager import UpdateManager, UpdatePortfolio, UpdateState # noqa | ||
from .question_manager import ( # noqa | ||
QuestionCreateManager, | ||
QuestionUpdateManager, | ||
CreateQuestionStates, | ||
UpdateQuestionStates, | ||
DeleteQuestionStates, | ||
QuestionDeleteManager, | ||
) | ||
from .category_manager import ( # noqa | ||
CreateCategoryManager, | ||
UpdateCategoryManager, | ||
DeleteCategoryManager, | ||
CategoryCreateState, | ||
CategoryUpdateState, | ||
CategoryDeleteState, | ||
) |
Oops, something went wrong.