Этот проект предоставляет простой REST API мессенджер, включая авторизацию, регистрацию, создание и просмотр чатов, а также отправку сообщений. Веб-приложение работает на Python, PostgreSQL и библиотеками Flask
- Python 3.10 или выше
- Установленные зависимости из
requirements.txt
- Клонируйте репозиторий:
git clone https://github.com/DxrkFuture/flask-messager-rest-api.git cd flask-messager-rest-api
- Установите виртуальное окружение:
python -m venv venv source venv/bin/activate # Для Linux/MacOS venv\Scripts\activate # Для Windows
- Установите зависимости:
pip install -r requirements.txt
-
Инициализируйте базу данных postgres добавив/изменив строчки в файле .env:
SECRET_KEY=your-secret-key DATABASE_URL=postgresql://username@adress/database MAIL_SERVER=smtp.googlemail.com # к примеру от google MAIL_PORT=587 MAIL_USE_TLS=1 MAIL_USERNAME=your-email@gmail.com MAIL_PASSWORD=your-email-password AWS_ACCESS_KEY_ID=your-aws-access-key AWS_SECRET_ACCESS_KEY=your-aws-secret-key S3_BUCKET=your-s3-bucket-name
Обязательно для безопасности поменяйте
SECRET_KEY
иDATABASE_URL
-
Запустить инициализацию базы данных upgrade.tables.py
python upgrade_tables.py
-
Запустить REST API:
python run.py
-
POST /register
Регистрация нового пользователя.
Запрос:
{ "username": "имя_пользователя", "email": "email_пользователя", "password": "пароль" }
Ответы:
HTTP 201
{ "message": "User created successfully" }
HTTP 400
{ "error": "Username already exists" }
ИЛИ
{ "error": "Email already registered" }
HTTP 500
{ "error": "Exception..." }
-
POST /login
Авторизация пользователя.
Запрос:
{ "username": "имя_пользователя", "password": "пароль" }
Ответы:
HTTP 200
{ "access_token": "токен" }
HTTP 401
{ "error": "Invalid username or password" }
HTTP 500
{ "error": "Exception..." }
Заголовок:
Authorization: Bearer <токен>
-
GET /profile
Получение информации об своих данных профиля
Ответы:
HTTP 200
{ "bio": "Я человек. Дальше не придумал", "birth_date": null, "email": "username1@localhost", "is_private": false, "location": "страна и город", "username": "username1" }
HTTP 404
{ "error": "User not found" }
ИЛИ
{ "error": "Profile not found" }
HTTP 500
{ "error": "Exception..." }
-
PUT /profile
Обновление информации об своих данных профиля
Запрос:
{ "bio": "Я человек. Дальше не придумал", "birth_date": 2024-12-4, // или без "birth_date" "email": "username1@localhost", "is_private": false, "location": "страна Россия г. Мариуполь", "username": "username1" }
Ответы:
HTTP 200
{ "message": "Profile updated successfully" }
HTTP 500
{ "error": "Exeption..." }
-
GET /profile/search/ + username пользователя
Поиск пользователей по никнейму и получение user_id для создания чатов
К примеру GET /profile/search/user
Ответы:
HTTP 200
[ { "bio": null, "is_private": false, "user_id": 1, "username": "username2" }, { "bio": "Я человек. Дальше не придумал", "is_private": false, "user_id": 2, "username": "username1" } ]
HTTP 500
{ "error": "Exeption..." }
-
GET /profile/<user_id>
Получение информации о любом пользователе и статус приватности у каждого пользователя для скрытия конфидициальной информации
К примеру GET /profile/2
Ответы:
HTTP 200
{ "bio": "Я человек. Дальше не придумал", "birth_date": null, "email": "username1@localhost", "is_private": false, "location": "страна и город", "username": "username1" }
При
is_private: true
ответ:{ "bio": "Я человек. Дальше не придумал", "is_private": true, "username": "username1" }
HTTP 404
{ "error": "User not found" }
ИЛИ
{ "error": "Profile not found" }
HTTP 500
{ "error": "Exeption..." }
-
GET /chats
Получение списка чатов, в которых состоит пользователь.
Ответы: HTTP 200
[ { "created_at": "2024-11-13T19:43:47.312036", // дата создания "id": 1, "name": "Название чата", "participants": [1, 2] }, { "created_at": "2024-11-13T19:45:48.908727", "id": 2, "name": "Название 2 чата", "participants": [ 1, 3 ] }, ]
HTTP 500
{ "error": "Exeption..." }
-
POST /chats
Создание нового чата.
Запрос:
{ "name": "Название чата", "participant_ids": [2, 3] }
Ответы:
HTTP 201
{ "created_at": "2024-12-04T21:02:07.218768", "id": 5, "name": "Название чата", "participants": [ 1, 2 ] }
HTTP 500
{ "error": "Exeption..." }
-
GET /chats/<chat_id>
Вывод выбраного чата
Ответы:
HTTP 200
{ "created_at": "2024-11-13T19:43:47.312036", "id": 1, "name": "Название чата номер 1", "participants": [ 1, 2 ] }
HTTP 404
{ "error": "Chat not found or access denied" }
HTTP 500
{ "error": "Exeption..." }
-
PUT /chats/<chat_id>
Обновление названия чата
Запрос:
{ "name": "Новое название чата 1" }
Ответы: HTTP 200
{ "created_at": "2024-11-13T19:43:47.312036", "id": 1, "name": "Новое название чата 1", "participants": [ 1, 2 ] }
HTTP 404
{ "error": "Chat not found or access denied" }
HTTP 500
{ "error": "Exception..." }
-
GET /chats/<chat_id>/messages
Получение всех сообщений в чате.
Ответ:
HTTP 200
[ { "chat_id": 1, //номер чата "content": "Сообщение от пользователя с ID 1", "id": 7, //номер сообщения "timestamp": "2024-11-16T17:37:01.041250", "user_id": 1 //user_id пользователя }, { "chat_id": 1, //номер чата "content": "Сообщение от пользователя с ID 2", "id": 16, //номер сообщения "timestamp": "2024-12-01T16:32:39.284799", "user_id": 2 //user_id пользователя } ]
-
POST /chats/<chat_id>/messages
Отправка нового сообщения в чат.
Запрос:
{ "content": "Текст сообщения" }
Ответы:
HTTP 201
{ "chat_id": 1, "content": "Текст сообщения", "id": 19, "timestamp": "2024-12-04T21:15:45.784162", "user_id": 2 }
HTTP 400
{ "error": "Content is required" }
HTTP 404
{ "error": "Chat not found or access denied" }
HTTP 500
{ "error": "Exception..." }
-
PUT /messages/<message_id>
Изменение структуры сообщения
Запрос:
{ "content": "Текст сообщения изменённый" }
Ответы:
HTTP 200
{ "chat_id": 1, "content": "Текст сообщения изменённый", "id": 19, "timestamp": "2024-12-04T21:15:45.784162", "user_id": 2 }
HTTP 404
{ "error": "Message not found or access denied" }
HTTP 500
{ "error": "Exception..." }
-
DELETE /messages/<message_id>
Удаление сообщения
Ответы:
HTTP 200
{ "message": "Message deleted successfully" }
HTTP 404
{ "error": "Message not found or access denied" }
HTTP 500
{ "error": "Exception..." }
run.py
- Основной файл запуска Flask API.
upgrade_tables.py
- Обновление структуры базы данных
config.py
- Скрипт инициализации переменных с .env
requirements.txt
- Зависимости проекта.
README.md
- Описание проекта.
GNU GENERAL PUBLIC LICENSE Version 3