https://github.com/dmitriiviktorov/twitter
This project is a microblogging service for corporate use. Functionally, it allows users to write posts (you can use pictures), view other users' posts, subscribe to each other and put/remove likes on posts - as if your corporate network has its own Twitter.
https://github.com/dmitriiviktorov/twitter
asyncio docker docker-compose fastapi nginx postgresql python3 uvicorn
Last synced: 3 months ago
JSON representation
This project is a microblogging service for corporate use. Functionally, it allows users to write posts (you can use pictures), view other users' posts, subscribe to each other and put/remove likes on posts - as if your corporate network has its own Twitter.
- Host: GitHub
- URL: https://github.com/dmitriiviktorov/twitter
- Owner: DmitriiViktorov
- Created: 2024-05-13T13:32:00.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-04T12:08:52.000Z (almost 2 years ago)
- Last Synced: 2025-02-02T02:11:19.154Z (over 1 year ago)
- Topics: asyncio, docker, docker-compose, fastapi, nginx, postgresql, python3, uvicorn
- Language: Python
- Homepage:
- Size: 15.3 MB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Сервис микроблогов Twitter-clone

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