An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          

# Сервис микроблогов Twitter-clone
![twitter-logo](/static/twitter.jpg)

Корпоративный сервис микроблогов, созданный для общения сотрудников.

## Возможности сервиса

По своему функционалу сервис похож на широко известный сервис 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