PET проект: служба друзей Django. Сервис предоставляет возможность:
- зарегистрировать нового пользователя
- отправить одному пользователю запрос на добавление в друзья другому
- принять/отклонить запрос на добавление в друзья от другого пользователя
- видеть у пользователя список его исходящих и входящих запросов на добавление в друзья
- просматривать список друзей пользователя
- получить пользователю статус дружбы с каким-либо другим пользователем (нет ничего/есть исходящий запрос/есть входящий запрос/уже друзья)
- удалить пользователя другого пользователя из своих друзей
- если пользователь1 отправляет запрос на добавление в друзья пользователю2, а пользователь2 отправляет запрос на добавление в друзья пользователю1, то они автоматически становятся друзьями, их запросы автоматически принимаются
OpenAPI спецификация в /project/schema.yaml
- Клонировать репозиторий:
git clone https://github.com/MikhailBogachev/TEST_DRF_friend_service.git
- Gерейти в него в командной строке:
cd TEST_DRF_friend_service
- Выполнить последовательно две команды:
docker build -t django_drf .
docker run -d -p 8080:8000 --name django_drf_app django_drf
- Cоздать и активировать виртуальное окружение:
python3 -m venv env
source env/bin/activate
- Установить зависимости из файла requirements.txt:
python3 -m pip install --upgrade pip
pip install -r requirements.txt
- Выполнить миграции:
python3 manage.py migrate
Запустить проект:
python3 manage.py runserver
POST Регистрация пользователя
URL: http://127.0.0.1:8080/api/auth/users/
Body:
{
"username": "user2"
"password": "user2pass1234"
}
Response (JSON):
{
"email": "",
"username": "user2",
"id": 2
}
POST Получение токена
URL: http://127.0.0.1:8080/api/auth/users/
Body:
{
"username": "user2",
"password": "user2pass1234"
}
Response (JSON):
{
"auth_token": "f40fda302c9d0b170b3771122a9e8461..."
}
При запросах на следующие эндпоинты передаем токен в Headers (Token f40fda302c9d0b170b3771122a9e8461...)
GET Получить список входящих/исходящих запросов в друзья
URL: http://127.0.0.1:8080/api/friend-requests/
Response (JSON):
{
"outgoing_requests": [
{
"id": 58,
"from_user": "user2",
"to_user": "user3",
"accepted": false
}
],
"incoming_requests": [
{
"id": 56,
"from_user": "user1",
"to_user": "user2",
"accepted": true
}
]
}
POST Отправить заявку в друзья другому пользователю
URL: http://127.0.0.1:8080/api/friend-requests/
Body:
{
"to_user": "user1",
}
Response (JSON):
{
"outgoing_requests": [
{
"id": 1,
"from_user": "user2",
"to_user": "user3",
"accepted": false
}
],
"incoming_requests": [
{
"id": 2,
"from_user": "user1",
"to_user": "user2",
"accepted": false
}
]
}
GET Принять входящую заявку в друзья. id - id входящей заявки
URL: http://127.0.0.1:8080/api/friend-requests/{id}/accept/
Response (JSON):
{
"status": "Заявка принята"
}
GET Отклонить входящую заявку в друзья. id - id входящей заявки
URL: http://127.0.0.1:8080/api/friend-requests/{id}/reject/
Response (JSON):
{
"status": "Заявка отклонена"
}
GET Получить список друзей
URL: http://127.0.0.1:8080/api/friends/
Response (JSON):
{
"friends": [
{
"id_friendship": 12,
"friend": "user1"
}
]
}
GET Получить статус дружбы с пользователем
URL: http://127.0.0.1:8080/api/friends/{username}/
Response (JSON):
{
"answer": "Уже друзья"
}
DELETE Удалить пользователя из друзей
URL: http://127.0.0.1:8080/api/friends/{username}/
Response (JSON):
{
"status": "Пользователь удален из друзей"
}