{"id":22508114,"url":"https://github.com/dmitriiviktorov/twitter","last_synced_at":"2026-04-09T23:03:33.858Z","repository":{"id":251746805,"uuid":"799982925","full_name":"DmitriiViktorov/twitter","owner":"DmitriiViktorov","description":"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.","archived":false,"fork":false,"pushed_at":"2024-09-04T12:08:52.000Z","size":16001,"stargazers_count":0,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-02T02:11:19.154Z","etag":null,"topics":["asyncio","docker","docker-compose","fastapi","nginx","postgresql","python3","uvicorn"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DmitriiViktorov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-13T13:32:00.000Z","updated_at":"2024-09-04T12:18:57.000Z","dependencies_parsed_at":"2024-08-05T14:09:52.522Z","dependency_job_id":null,"html_url":"https://github.com/DmitriiViktorov/twitter","commit_stats":null,"previous_names":["dmitriiviktorov/twitter"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DmitriiViktorov%2Ftwitter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DmitriiViktorov%2Ftwitter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DmitriiViktorov%2Ftwitter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DmitriiViktorov%2Ftwitter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DmitriiViktorov","download_url":"https://codeload.github.com/DmitriiViktorov/twitter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245944062,"owners_count":20697948,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asyncio","docker","docker-compose","fastapi","nginx","postgresql","python3","uvicorn"],"created_at":"2024-12-07T01:18:21.074Z","updated_at":"2026-04-09T23:03:33.800Z","avatar_url":"https://github.com/DmitriiViktorov.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Сервис микроблогов Twitter-clone\n![twitter-logo](/static/twitter.jpg)\n\nКорпоративный сервис микроблогов, созданный для общения сотрудников. \n\n## Возможности сервиса\n\nПо своему функционалу сервис похож на широко известный сервис x.com, \nранее известный как Твиттер.\nСервис позволяет делиться своими постами (в том числе с прикрепленными изображениями),\nоценивать посты других пользователей, подписываться друг на друга и конечно читать посты\nвсех пользователей данного сервиса.\n\n## Установка\n\nСервис микроблогов разворачивается с помощью запуска трех взаимосвязанных контейнеров:\n\n- `app`: само приложение с логикой работы, эндпоинтами и методами \nвзаимодействия с базой данных.\n- `postgres`: СУБД PostgreSQL, где хранится вся информация о пользователях,\nтвитах, медиафайлах в этих твитах, лайках, подписках пользователей друг на друга.\n- `nginx`: Nginx используется в основном для обслуживания статических ресурсов фронтенда,\nтаких как HTML, CSS и JavaScript файлы. Конфигурация Nginx обеспечивает быструю \nдоставку этих файлов клиентам и обеспечивает корректную маршрутизацию запросов.\n\n### Шаги установки:\n\n1. **Клонирование репозитория:**\n   \n   Для установки необходимо клонировать репозиторий с помощью следующей команды:\n   ```bash\n   git clone https://github.com/DmitriiViktorov/twitter.git\n    ```\n\n2. **Установка зависимостей**\n   \n   ```bash\n   python -m venv .venv\n   source .venv/bin/activate  # Для Windows используйте venv\\Scripts\\activate\n   cd twitter/\n   pip install -r requirements.txt\n   ```\n\n3. **Создание .env файла**\n\n   После клонирования репозитория в корневой директории проекта необходимо создать \n   .env файл и указать там следующие типы настроек:\n\n   - POSTGRES_USER=\u003c ваше имя пользователя \u003e\n   - POSTGRES_PASSWORD=\u003c ваш пароль для этого пользователя \u003e\n   - POSTGRES_DB=\u003c название базы данных \u003e\n   - POSTGRES_HOST=postgres\n   - POSTGRES_PORT=5432\n   - ECHO=\u003cTrue или False\u003e - включает/выключает логирование запросов к БД\n   \n4. **Запуск сервиса**\n   \n    После перехода в корневую директорию проекта запустите сервис с помощью Docker Compose:\n    ```bash\n    docker-compose up\n    ```\n\n5. **Доступ к приложению**\n\n    После успешного запуска сервис будет доступен по адресу http://localhost.\n\n\n## Использование\n\nПосле запуска сервиса им сразу можно пользоваться по прямому назначению. Одним из требований\nдля работы с сервисом - наличие у пользователя ключа аутентификации, который корпоративная система\nдолжна предоставлять в виде http-header с названием \"api-key\". В случае если пользователь\nс таким \"api-key\" существует в базе данных - он сможет пользоваться сервисом.\n\n### Основные функции\n\n- **Просмотр твитов:** На главной странице пользователь видит информацию о всех твитах \nдругих пользователей, начиная с самых свежих твитов.\n\n- **Публикация твитов:** Основной функцией сервиса является возможность \nпубликовать свои твиты, в том числе прикреплять к ним желаемые изображения.\n\n- **Удаление твитов:** Пользователь может удалить свой пост, если возникла такая необходимость.\n\n- **Лайки:** Пользователь может ставить лайки под твитами других пользователей \nили убирать их при необходимости.\n\n- **Подписка и отписка:** Пользователь может заходить на страницы других пользователей, \nнажимая на их аватары у постов. Пользователь может подписываться на других пользователей, \nнажимая на кнопку \"Читать\" на странице этого пользователя. Если пользователь хочет отписаться от кого-то - \nнеобходимо нажать на кнопку \"Перестать читать\" на странице этого пользователя.\n\nЭти функции обеспечивают базовую функциональность сервиса микроблогов \nи позволяют пользователям взаимодействовать друг с другом.\n\n### Демонстрация функциональности\n\nДля визуализации работы сервиса и наполнения стартовой страницы с реалистичными данными, предусмотрена функция,\nкоторая добавляет 10 случайных пользователей, генерирует случайные посты, расставляет \nслучайные лайки и добавляет случайные подписки между пользователями. \nЕсли вам не нужно создавать начальные данные для демонстрации функциональности приложения, вы можете \nзакомментировать строку, которая вызывает функцию create_db(SessionLocal()).\n```python\n# В файле twitter/app.py\n# При необходимости отключения создания начальных данных для демонстрации функциональности,\n# закомментируйте следующую строку:\n# await create_db(SessionLocal())\n\n```\n\n## Описание API\n\nAPI данного приложения документировано с использованием OpenAPI. \nДля ознакомления с документацией API, перейдя по следующей ссылке:\n\n- [Документация API](http://localhost:5050/docs)\n\n\n## Тестирование\n\nПриложение имеет полное покрытие тестами для всех функций и эндпоинтов. Вы можете запустить тесты, \nиспользуя Docker Compose в директории tests/ с тестовой базой данных. \nТесты также можно запустить из корневого каталога, так как там находится конфигурационный файл для тестов pytest.ini.\n\n### Запуск тестов\n\n1. Перейдите в директорию 'tests/':\n\n    ```bash\n    cd tests/\n    ```\n\n2. Запустите Docker Compose для запуска тестовой среды с тестовой базой данных:\n\n    ```bash\n   docker-compose up -d\n   ```\n\n3. Перейдите обратно в корневой каталог и запустите тесты:\n\n    ```bash\n   cd ..\n   pytest \n   ```\n   \nЭто обеспечит проверку корректной работы всех функций и эндпоинтов \nприложения перед развертыванием в производственной среде.\n\n\n## Контактная информация\n\nВ случае возникновения вопросов, комментариев, замечаний по работе приложения вы можете связаться со мной:\n- Email: viktorovokrl@gmail.com\n- Github: https://github.com/DmitriiViktorov/twitter\n- Telegram: https://t.me/ViktorovDV\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmitriiviktorov%2Ftwitter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdmitriiviktorov%2Ftwitter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmitriiviktorov%2Ftwitter/lists"}