Skip to content

alexsemenovv/twitter_clone

Repository files navigation

Логотип

Бэкенд для сервиса микроблогов

Описание проекта

Данный проект реализует бэкенд корпоративного сервиса микроблогов, похожего на Twitter. Сервис позволяет пользователям создавать и взаимодействовать с твитами, подписываться на других пользователей и просматривать персонализированные ленты. Разработка рассчитана на корпоративную среду, где аутентификация пользователей осуществляется внешней системой.

Возможности

Функциональные требования

  1. Управление твитами

    • Создание новых твитов (с возможностью добавления медиафайлов).
    • Удаление твитов (только собственных).
    • Просмотр ленты твитов пользователей, на которых подписан пользователь.
  2. Лайки

    • Установка отметки «Нравится» на твит.
    • Удаление отметки «Нравится».
  3. Подписки

    • Подписка на других пользователей.
    • Отписка от пользователей.
  4. Медиафайлы

    • Загрузка изображений для твитов.
  5. Информация о профиле

    • Получение информации о собственном профиле.
    • Получение информации о любом профиле по ID.
  6. Создание нового профиля

    • Создание пользователя

Нефункциональные требования

  • Docker Compose: Простое развертывание сервиса с помощью одной команды.
  • Сохранность данных: Данные пользователя сохраняются между запусками.
  • Swagger-документация: Все API-эндпоинты задокументированы и доступны сразу после запуска.
  • Тестирование: Приложение покрыто unit-тестами и проверено линтерами.
  • Типизация: Код удовлетворяет требованиям статического анализатора типов (mypy).

Стек технологий

  • Язык программирования: Python
  • Фреймворк: FastAPI
  • База данных: PostgreSQL
  • Контейнеризация: Docker, Docker Compose
  • Документация API: Swagger (через библиотеку flasgger)
  • Тестирование: pytest

Установка и запуск

  1. Клонируйте репозиторий:
    git clone https://gitlab.skillbox.ru/aleksandr_semionov_1/python_advanced_diploma.git
  2. Запустите приложение с помощью Docker Compose:
    docker-compose up -d
  3. Откройте Swagger-документацию в браузере: Swagger доступен по адресу http://localhost:8000/docs

Структура проекта

  • client/ - статические файлы для отображения страницы
  • server/ - бизнес логика приложения
    • databases/ - настройка подключения базы данных, и описание моделей
    • routers/ — реализация API-эндпоинтов
    • auth.py - файл с проверкой авторизации
    • Dockerfile - dockerfile для сборки endpoints для деплоя
    • Dockerfile.dev - dockerfile для сборки endpoints для теста
    • exceptions.py - файл с обработчиками исключений
    • functions.py - файл с функциями для работы с БД
    • main.py - файл запуска приложения
    • schemas.py - файл со схемами Pydantic
  • tests/ — unit-тесты
  • docker-compose.yml — конфигурация Docker Compose.
  • docker-compose.dev.yml — конфигурация Docker Compose для теста.
  • requirements.txt — зависимости проекта.
  • requirements_dev.txt — зависимости проекта для теста.
  • .flake8 — Настройки конфигурации линтера flake8
  • mypy.ini — Настройки конфигурации линтера mypy

API-эндпоинты

Управление твитами

  • Создание твита: POST /api/tweets
  • Удаление твита: DELETE /api/tweets/
  • Получение ленты: GET /api/tweets

Управление лайками

  • Поставить лайк: POST /api/tweets//likes
  • Убрать лайк: DELETE /api/tweets//likes

Управление подписками

  • Подписаться: POST /api/users//follow
  • Отписаться: DELETE /api/users//follow

Управление профилем

  • Информация о себе: GET /api/users/me
  • Информация о пользователе: GET /api/users/

Загрузка медиафайлов

  • Загрузка файла: POST /api/medias

Разработка

  1. Для локальной разработки установите зависимости:

    pip install -r requirements.txt
  2. Для запуска сервера:

    uvicorn server/main:app --reload
  3. Убедитесь, что код удовлетворяет требованиям линтеров:

    black --check --diff server
    isort --check-only --diff --profile black server
  4. Проверьте типизацию:

    mypy server

Тестирование

  1. Для тестирования установите локально зависимости:
    pip install -r requirements_dev.txt
  2. Соберите и запустите docker-compose для теста:
    docker-compose -f docker-compose.dev up --build
  3. Запустите тесты локально
    pytest tests

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published