Skip to content

Commit

Permalink
dev merge
Browse files Browse the repository at this point in the history
  • Loading branch information
GreenVibesOnly committed Oct 16, 2024
2 parents b6fe445 + 71d6c08 commit 7b84a59
Show file tree
Hide file tree
Showing 79 changed files with 6,644 additions and 145 deletions.
12 changes: 12 additions & 0 deletions .env.example
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'>
82 changes: 82 additions & 0 deletions .github/workflows/main.yml
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: Деплой успешно выполнен!
7 changes: 2 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ cover/
local_settings.py
db.sqlite3
db.sqlite3-journal
*.db

# Flask stuff:
instance/
Expand Down Expand Up @@ -155,8 +156,4 @@ dmypy.json
cython_debug/

# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
.idea/
32 changes: 32 additions & 0 deletions Dockerfile
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"]
203 changes: 187 additions & 16 deletions README.md
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 added app/admin/__init__.py
Empty file.
19 changes: 19 additions & 0 deletions app/admin/admin_managers/__init__.py
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,
)
Loading

0 comments on commit 7b84a59

Please sign in to comment.