Skip to content

Verper1/simple_social_media

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Простая социальная сеть

Проект представляет собой простую социальную сеть с бэкендом на FastAPI и фронтендом на Next.js.

Технологии

Backend

  • FastAPI - современный веб-фреймворк для Python
  • SQLAlchemy - ORM для работы с базой данных
  • Alembic - инструмент для миграций базы данных
  • PostgreSQL - база данных
  • JWT - аутентификация через JSON Web Tokens
  • Argon2 - хеширование паролей

Frontend

  • Next.js 15 - React фреймворк
  • TypeScript - типизированный JavaScript
  • React 19 - библиотека для создания пользовательских интерфейсов

Требования

  • Python 3.11 или выше
  • Node.js 18 или выше
  • PostgreSQL 12 или выше
  • uv (менеджер пакетов Python) - опционально, можно использовать pip

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

1. Клонирование репозитория

git clone https://github.com/Verper1/simple_social_media.git
cd simple_social_media

2. Настройка Backend

2.1. Установка зависимостей

Если используете uv:

cd backend
uv sync

Если используете pip:

cd backend
pip install -e .

2.2. Настройка переменных окружения

Создайте файл .env в директории backend/ со следующим содержимым:

# База данных
DB_URL=postgresql+asyncpg://username:password@localhost:5432/dbname

# JWT настройки
SECRET_KEY=your-secret-key-here-change-in-production
ALGORITHM=ALGORITHM
ACCESS_TOKEN_EXPIRE_MINUTES=some-num

Важно:

  • Замените username, password и dbname на ваши данные PostgreSQL
  • SECRET_KEY должен быть длинной случайной строкой (рекомендуется минимум 32 символа)
  • В production используйте безопасный SECRET_KEY

2.3. Создание базы данных

Создайте базу данных в PostgreSQL:

CREATE DATABASE dbname;

(Замените dbname на имя вашей базы данных)

2.4. Настройка Alembic

Скопируйте шаблон конфигурации Alembic:

cd backend
cp alembic.ini.example alembic.ini

Откройте alembic.ini и замените строку sqlalchemy.url на вашу реальную ссылку на БД:

sqlalchemy.url = postgresql+psycopg2://username:password@localhost:5432/dbname

Важно: alembic.ini содержит чувствительные данные и не должен быть в репозитории. Используйте alembic.ini.example как шаблон.

2.5. Применение миграций

Из директории backend/ выполните:

alembic upgrade head

Это создаст все необходимые таблицы в базе данных.

2.6. Запуск сервера

cd .\backend\src\
fastapi run

Сервер будет доступен по адресу: http://localhost:8000

API документация (Swagger): http://localhost:8000/docs

3. Настройка Frontend

3.1. Установка зависимостей

cd frontend
npm install

3.2. Настройка переменных окружения

Создайте файл .env.local в директории frontend/:

NEXT_PUBLIC_API_URL=http://localhost:8000

3.3. Запуск сервера разработки

npm run dev

Фронтенд будет доступен по адресу: http://localhost:3000

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

simple_social_media/
├── backend/                 # Backend приложение
│   ├── src/
│   │   ├── account/        # Модуль аккаунтов
│   │   ├── auth/          # Модуль аутентификации
│   │   ├── posts/         # Модуль постов
│   │   ├── config.py      # Конфигурация приложения
│   │   ├── db.py          # Настройка базы данных
│   │   └── main.py        # Точка входа FastAPI
│   ├── migration/         # Миграции Alembic
│   ├── alembic.ini        # Конфигурация Alembic
│   └── pyproject.toml     # Зависимости Python
│
└── frontend/               # Frontend приложение
    ├── app/               # Next.js App Router
    │   ├── login/         # Страница входа
    │   ├── register/      # Страница регистрации
    │   ├── profile/       # Страницы профиля
    │   └── page.tsx       # Главная страница
    ├── lib/               # Утилиты
    │   ├── api-client.ts  # API клиент
    │   ├── auth-api.ts    # API для аутентификации
    │   └── types.ts       # TypeScript типы
    └── package.json       # Зависимости Node.js

API Endpoints

Аутентификация

  • POST /auth/register - Регистрация нового пользователя
  • POST /auth/login - Вход через OAuth2 form
  • POST /auth/login-form - Вход через JSON
  • GET /auth/me - Получить данные текущего пользователя
  • POST /auth/logout - Выход (очистка cookie)

Аутентификация

Проект использует JWT токены, которые хранятся в HTTP-only cookies для безопасности.

При успешной регистрации или входе токен автоматически устанавливается в cookie access_token.

Все защищенные эндпоинты требуют наличия валидного токена в cookie или заголовке Authorization: Bearer <token>.

Разработка

Создание новой миграции

cd backend
alembic revision --autogenerate -m "описание изменений"
alembic upgrade head

Запуск линтеров

Backend:

cd backend
ruff check .
mypy src/

Frontend:

cd frontend
npm run lint

Troubleshooting

Ошибка подключения к базе данных

Убедитесь, что:

  • PostgreSQL запущен
  • Правильно указаны данные в DB_URL
  • База данных создана

Ошибка 401 Unauthorized

Проверьте:

  • Токен установлен в cookie (проверьте в DevTools → Application → Cookies)
  • SECRET_KEY одинаковый на бэкенде
  • Cookie отправляются с запросами (credentials: "include")

CORS ошибки

Убедитесь, что в backend/src/main.py указаны правильные allow_origins для вашего фронтенда.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors