Минимально рабочий бекенд для мессенджера на основе FastAPI с поддержкой групповых чатов, real-time сообщений через WebSocket, аутентификации и работы с базой данных PostgreSQL через SQLAlchemy.
| Компонент | Технология |
|---|---|
| Фреймворк | FastAPI |
| База данных | PostgreSQL + AsyncPG |
| ORM | SQLAlchemy (Async) |
| Валидация | Pydantic |
| Хеширование паролей | Werkzeug |
| Контейнеризация | Docker + Docker Compose |
| Real-time | WebSocket |
- Регистрация и аутентификация пользователей (токены)
- Групповые чаты с возможностью добавления участников
- Отправка, редактирование и удаление сообщений
- Real-time обмен сообщениями через WebSocket
- Загрузка и удаление аватарок пользователей и групп
- Прикрепление файлов к сообщениям
- Поиск пользователей
- Просмотр профилей пользователей и групп
Messenger/
├── main.py
├── database.py
├── models.py
├── schemas.py
├── ws_manager.py
├── constants.py
├── requirements.txt
├── Dockerfile
└── docker-compose.yml
Самый быстрый способ запустить проект — вместе с базой данных PostgreSQL.
git clone https://github.com/Levletsplay0/Messenger.git
cd Messenger
docker compose up -d --buildПриложение будет доступно по адресу: http://localhost:8000
Документация API: http://localhost:8000/docs
git clone https://github.com/Levletsplay0/Messenger.git
cd Messengerpython -m venv venv
source venv/bin/activate # Linux/macOS
# venv\Scripts\activate # Windows
pip install -r requirements.txtУбедитесь, что PostgreSQL запущена и доступна. По умолчанию приложение подключается к:
postgresql+asyncpg://myuser:mypass@localhost:5432/mydb
Для изменения подключения задайте переменную окружения DATABASE_URL.
uvicorn main:app --reload --host 0.0.0.0 --port 8000Документация будет доступна по адресу: http://127.0.0.1:8000/docs
| Переменная | Описание | По умолчанию |
|---|---|---|
DATABASE_URL |
Строка подключения к PostgreSQL | postgresql+asyncpg://myuser:mypass@localhost:5432/mydb |
| Метод | Эндпоинт | Описание |
|---|---|---|
POST |
/register |
Регистрация нового пользователя |
POST |
/login |
Вход в систему, получение токена |
POST |
/logout |
Выход из системы (инвалидация токена) |
GET |
/users/me |
Информация о текущем пользователе |
GET |
/users/{user_id} |
Информация о пользователе по ID |
GET |
/users/search |
Поиск пользователей по имени |
POST |
/users/me/avatar |
Загрузка аватарки пользователя |
DELETE |
/users/me/avatar |
Удаление аватарки пользователя |
PATCH |
/users/me/description |
Обновление описания профиля |
| Метод | Эндпоинт | Описание |
|---|---|---|
POST |
/groups |
Создание новой группы |
GET |
/groups |
Список групп текущего пользователя |
GET |
/groups/{group_id} |
Детали группы |
POST |
/groups/{group_id}/members |
Добавление участников в группу |
POST |
/groups/{group_id}/avatar |
Загрузка аватарки группы |
DELETE |
/groups/{group_id}/avatar |
Удаление аватарки группы |
PATCH |
/groups/{group_id}/name |
Изменение названия группы |
PATCH |
/groups/{group_id}/description |
Изменение описания группы |
| Метод | Эндпоинт | Описание |
|---|---|---|
POST |
/groups/{group_id}/messages |
Отправка сообщения (с файлом) |
GET |
/groups/{group_id}/messages |
Получение истории сообщений |
PATCH |
/groups/{group_id}/messages/{message_id} |
Редактирование сообщения |
DELETE |
/groups/{group_id}/messages/{message_id} |
Удаление сообщения |
| Протокол | Эндпоинт | Описание |
|---|---|---|
WS |
/ws/{group_id}?token=<auth_token> |
Real-time обмен сообщениями в группе |
WebSocket-соединение позволяет получать и отправлять сообщения в реальном времени.
ws://localhost:8000/ws/{group_id}?token=<your_auth_token>
Отправка сообщения:
{
"action": "send_message",
"content": "Привет!"
}Редактирование сообщения:
{
"action": "edit_message",
"message_id": 1,
"content": "Привет, мир!"
}Удаление сообщения:
{
"action": "delete_message",
"message_id": 1
}curl -X POST http://localhost:8000/register \
-H "Content-Type: application/json" \
-d '{"username": "alice", "password": "secure123", "email": "alice@example.com"}'Ответ:
{
"success": true,
"message": "Пользователь успешно создан",
"data": {
"id": 1,
"username": "alice"
}
}curl -X POST http://localhost:8000/login \
-H "Content-Type: application/json" \
-d '{"username": "alice", "password": "secure123"}'Ответ:
{
"success": true,
"message": "Успешный вход",
"data": {
"access_token": "a1b2c3d4e5f6..."
}
}curl -X GET http://localhost:8000/users/me \
-H "auth-token: a1b2c3d4e5f6..."Ответ:
{
"success": true,
"data": {
"id": 1,
"username": "alice",
"email": "alice@example.com"
}
}curl -X POST http://localhost:8000/groups \
-H "auth-token: a1b2c3d4e5f6..." \
-H "Content-Type: application/json" \
-d '{"name": "Моя группа"}'curl -X POST http://localhost:8000/groups/1/messages \
-H "auth-token: a1b2c3d4e5f6..." \
-F "content=Привет, группа!"- Аутентификация и регистрация
- Групповые чаты
- WebSocket и real-time сообщения
- Управление сообщениями (редактирование, удаление)
- Загрузка аватарок пользователей и групп
- Прикрепление файлов к сообщениям
- Docker для деплоя
- WebSocket для статуса «В сети»
- Деплой
- Написание фронтенда
Автор: @Levletsplay0
Поставьте ⭐, если проект был полезен!