Корпоративный сервис микроблогов, созданный для общения сотрудников.
По своему функционалу сервис похож на широко известный сервис x.com, ранее известный как Твиттер. Сервис позволяет делиться своими постами (в том числе с прикрепленными изображениями), оценивать посты других пользователей, подписываться друг на друга и конечно читать посты всех пользователей данного сервиса.
Сервис микроблогов разворачивается с помощью запуска трех взаимосвязанных контейнеров:
app
: само приложение с логикой работы, эндпоинтами и методами взаимодействия с базой данных.postgres
: СУБД PostgreSQL, где хранится вся информация о пользователях, твитах, медиафайлах в этих твитах, лайках, подписках пользователей друг на друга.nginx
: Nginx используется в основном для обслуживания статических ресурсов фронтенда, таких как HTML, CSS и JavaScript файлы. Конфигурация Nginx обеспечивает быструю доставку этих файлов клиентам и обеспечивает корректную маршрутизацию запросов.
-
Клонирование репозитория:
Для установки необходимо клонировать репозиторий с помощью следующей команды:
git clone https://github.com/DmitriiViktorov/twitter.git
-
Установка зависимостей
python -m venv .venv source .venv/bin/activate # Для Windows используйте venv\Scripts\activate cd twitter/ pip install -r requirements.txt
-
Создание .env файла
После клонирования репозитория в корневой директории проекта необходимо создать .env файл и указать там следующие типы настроек:
- POSTGRES_USER=< ваше имя пользователя >
- POSTGRES_PASSWORD=< ваш пароль для этого пользователя >
- POSTGRES_DB=< название базы данных >
- POSTGRES_HOST=postgres
- POSTGRES_PORT=5432
- ECHO=<True или False> - включает/выключает логирование запросов к БД
-
Запуск сервиса
После перехода в корневую директорию проекта запустите сервис с помощью Docker Compose:
docker-compose up
-
Доступ к приложению
После успешного запуска сервис будет доступен по адресу http://localhost.
После запуска сервиса им сразу можно пользоваться по прямому назначению. Одним из требований для работы с сервисом - наличие у пользователя ключа аутентификации, который корпоративная система должна предоставлять в виде http-header с названием "api-key". В случае если пользователь с таким "api-key" существует в базе данных - он сможет пользоваться сервисом.
-
Просмотр твитов: На главной странице пользователь видит информацию о всех твитах других пользователей, начиная с самых свежих твитов.
-
Публикация твитов: Основной функцией сервиса является возможность публиковать свои твиты, в том числе прикреплять к ним желаемые изображения.
-
Удаление твитов: Пользователь может удалить свой пост, если возникла такая необходимость.
-
Лайки: Пользователь может ставить лайки под твитами других пользователей или убирать их при необходимости.
-
Подписка и отписка: Пользователь может заходить на страницы других пользователей, нажимая на их аватары у постов. Пользователь может подписываться на других пользователей, нажимая на кнопку "Читать" на странице этого пользователя. Если пользователь хочет отписаться от кого-то - необходимо нажать на кнопку "Перестать читать" на странице этого пользователя.
Эти функции обеспечивают базовую функциональность сервиса микроблогов и позволяют пользователям взаимодействовать друг с другом.
Для визуализации работы сервиса и наполнения стартовой страницы с реалистичными данными, предусмотрена функция, которая добавляет 10 случайных пользователей, генерирует случайные посты, расставляет случайные лайки и добавляет случайные подписки между пользователями. Если вам не нужно создавать начальные данные для демонстрации функциональности приложения, вы можете закомментировать строку, которая вызывает функцию create_db(SessionLocal()).
# В файле twitter/app.py
# При необходимости отключения создания начальных данных для демонстрации функциональности,
# закомментируйте следующую строку:
# await create_db(SessionLocal())
API данного приложения документировано с использованием OpenAPI. Для ознакомления с документацией API, перейдя по следующей ссылке:
Приложение имеет полное покрытие тестами для всех функций и эндпоинтов. Вы можете запустить тесты, используя Docker Compose в директории tests/ с тестовой базой данных. Тесты также можно запустить из корневого каталога, так как там находится конфигурационный файл для тестов pytest.ini.
-
Перейдите в директорию 'tests/':
cd tests/
-
Запустите Docker Compose для запуска тестовой среды с тестовой базой данных:
docker-compose up -d
-
Перейдите обратно в корневой каталог и запустите тесты:
cd .. pytest
Это обеспечит проверку корректной работы всех функций и эндпоинтов приложения перед развертыванием в производственной среде.
В случае возникновения вопросов, комментариев, замечаний по работе приложения вы можете связаться со мной:
- Email: viktorovokrl@gmail.com
- Github: https://github.com/DmitriiViktorov/twitter
- Telegram: https://t.me/ViktorovDV