Это приложение предназначено для управления рассылками через различные каналы связи, такие как электронная почта, сервисы Notisend и Sendsay (доступ ограничен), а также Telegram.
Система управления рассылками позволяет пользователям создавать, редактировать и удалять рассылки, а также отправлять их через различные каналы связи. Пользователи могут загружать списки рассылок из различных источников, таких как Excel, CSV файлы (в папке filesToUpload приведены примеры файлов для загрузки), а также через REST API в формате JSON. Рассылки могут быть запущены как в ручном режиме, так и по API.
- API Gateway (FastAPI) — обрабатывает запросы от клиентов и маршрутизирует их к соответствующим микросервисам.
- Mailing Service — отвечает за создание, редактирование и управление рассылками.
- Delivery Service — обрабатывает и отправляет сообщения через различные каналы связи.
- History Service — хранит историю отправленных сообщений и их статусы.
- Auth Service — аутентификация и управление пользователями.
- Message Broker (RabbitMQ) — обеспечивает асинхронное взаимодействие между сервисами.
- PostgreSQL — основная база данных для хранения информации о рассылках и пользователях. (реализовано на CleverCloud, удалённо)
- Frontend (Vue.js) — пользовательский интерфейс системы.
- Возможность создавать, редактировать, удалять и запускать рассылки.
- Поддержка различных каналов связи (email, Telegram, сторонние API).
- Управление списками получателей, возможность загружать их из внешних источников.
- Запланированные и повторяющиеся рассылки.
- Отслеживание статуса отправленных сообщений (доставлено, ошибка, отказ).
- Аутентификация и разграничение прав пользователей (администраторы, менеджеры).
- Интеграция с внешними сервисами (SMTP, Telegram API, Sendsay и др.).
- Backend: Python (FastAPI)
- Frontend: Vue.js (с использованием Vuetify и Pinia)
Visual Studio Code (VS Code)
PostgreSQL
- Docker (для контейнеризации и развертывания приложения)
- Git (для управления версиями кода)
- RabbitMQ (для обмена сообщениями между микросервисами)
В проекте используются следующие ключевые библиотеки:
- FastAPI — асинхронный веб-фреймворк для разработки API
- SQLAlchemy — ORM для работы с базой данных
- psycopg2 — драйвер для работы с PostgreSQL
- Pydantic — валидация данных
- Uvicorn — ASGI-сервер для запуска FastAPI
- aiofiles, aiosignal, aiohttp — асинхронные инструменты для работы с файлами и HTTP-запросами
- python-dotenv — работа с переменными окружения
- bcrypt, passlib — хеширование паролей
- requests — выполнение HTTP-запросов
- Vue.js — фреймворк для разработки пользовательского интерфейса
- Vuetify — UI-библиотека на основе Material Design
- Pinia — управление состоянием приложения
- Backend: pip + requirements.txt
- Frontend: npm
Исходный код загружен в репозиторий (GitHub) и упакован в контейнер Docker для удобного развертывания.
Проект построен на принципах чистой архитектуры с явным разделением на слои:
- API слой (app/api)
- Application слой (app/application)
- Domain слой (app/domain)
- Infrastructure слой (app/infrastructure)
Каждый внутренний слой не зависит от внешних слоев, что обеспечивает гибкость и тестируемость.
Используется для безопасной передачи данных между слоями. DTO объекты:
- Скрывают внутреннюю структуру доменных объектов
- Оптимизируют передачу данных
- Предоставляют контракт для API
Содержит бизнес-логику приложения:
- Оркестрирует работу с репозиториями
- Преобразует данные между DTO и доменными моделями
- Реализует конкретные сценарии использования
Описывают бизнес-сущности и правила:
- Независимы от инфраструктуры
- Содержат только бизнес-логику
- Являются ядром приложения
Определяют контракты для работы с данными:
- Абстрагируют способ хранения
- Позволяют менять реализацию хранилища
- Упрощают тестирование
Реализует доступ к данным:
- Изолирует работу с базой данных
- Предоставляет единый интерфейс для доступа к данным
- Поддерживает разные типы хранилищ
Описывают структуру хранения в БД:
- Отражают схему базы данных
- Содержат ORM-маппинги
- Независимы от бизнес-логики
- Управление транзакциями
- Атомарные операции
- Адаптация внешних интерфейсов
- Конвертация данных
- Создание объектов
- Изоляция логики создания
- Dependency Injection
- Async Programming
- Type Hints
- SOLID принципы
-
Убедитесь, что у вас установлен Docker и Docker Compose.
-
Склонируйте репозиторий:
git clone https://github.com/KosmixGT/mailforge.git
-
Перейдите в каталог проекта:
cd mailforge -
Отредактируйте файл
docker-compose.ymlдля настройки подключения к удаленной базе данных и других параметров. Для этого отредактируйте соответствующие параметры в файлеdocker-compose.yml. Например:services: backend: environment: - DATABASE_URL=url
-
Запустите контейнеры с помощью Docker Compose:
docker-compose up -d
Это запустит все сервисы, описанные в файле
docker-compose.yml, в фоновом режиме. -
После запуска контейнеров вы можете открыть ваше приложение в браузере по адресу http://localhost:your_port, где
your_port- порт, указанный в вашем файлеdocker-compose.yml. -
При необходимости вы можете настроить другие параметры окружения, такие как время действия токена авторизации, алгоритм шифрования и URL для
VUE_APP_BACKEND_URL, также в файлеdocker-compose.ymlв секцииenvironment. -
По умолчанию, файл
docker-compose.ymlуже содержит все необходимые параметры для работы. База данных реализована на хостинге CleverCloud, строка подключения к ней уже прописана.
- Клонируйте репозиторий:
git clone https://github.com/yourusername/yourproject.git - Перейдите в папку проекта:
cd mailforge - Установите зависимости для бэкенда для каждого сервиса:
pip install -r requirements.txt - Установите зависимости для фронтенда:
npm install - Создайте базу данных PostgreSQL и настройте подключение в файле
.env, создав его в корне проекта. Или воспользуйтесь url удалённой базы данных, которая уже прописана в файлеdocker-compose.yml - Запустите сервер:
uvicorn main:app --reload --port 800{0-9}для каждого сервиса свой порт - Запустите фронтенд:
npm run serve - Откройте приложение в браузере:
http://localhost:8080
- Зарегистрируйтесь в системе или войдите под своим аккаунтом.
- Создайте новую рассылку, выбрав нужные параметры и каналы связи или загрузите их из файла.
- Добавьте получателей из уже существующих (ранее уже получавшие рассылки) или добавьте новых.
- Отправьте рассылку.
- Просматривайте и управляйте списком рассылок.