только на Go
Бекенд на fastapi/drf для новостных статей:
- Автор (обьект некий) будет создавать статьи
- В таблице авторов будет хранится только уникальный username и пароль, авторизация в сервис реализуется по jwt токенам
- Статья
- В таблице статей будет хранится title (заголовок), content (сам основной контент) и сам автор
Эндпоинт /all
где должна выводится вся информация об авторах и их статьях в такой структуре сериализатора:
[
{
"username": "michael",
"articles": [
{
"Title": "hello",
"Content": "i love rust"
}
]
},
{
"username": "kamran",
"articles": [
{
"Title": "Uzbekistan",
"Content": "tashkent is the capital of uzbekistan"
},
{
"Title": "London",
"Content": "london is the capital of Great Britain"
}
]
}
]
Ограничения: Заголовок должен быть больше 3 символов и меньше 100, и при этом в заголовке и в контенте должны быть только БУКВЫ, без цифр и без др спец символов
В имени пользователя должны быть только латинские буквы. Если нарушено ограничение сервер пусть выдает ошибку с причиной этой ошибки с правильным статус кодом для этих ошибок, ты должен сам понять каким для таких случаев
- Закрыть все это дело тестами, ассерт статус кода и работы json ответа
Данное тестовое задание нацеленно на правильный подход, хорошему коду и хорошей структуре
- Docker
- Docker Compose
- Postman или любой другой аналог
git clone https://github.com/Seven11Eleven/jwt_auth_gybernaty.git
cd jwt_auth_gybernaty
docker compose up --build
проект сам поднимется, поднимется база данных с уже готовыми таблицами для работы, http сервис поднимется на 8080 порту
Эндпоинт: POST /signup
Тело запроса:
{
"Username": "kamran",
"Password": "seven1337"
}
Команда cURL:
curl -X POST http://localhost:8080/signup \
-H "Content-Type: application/json" \
-d '{"Username": "kamran", "Password": "seven1337"}'
Эндпоинт: POST /login
Тело запроса:
{
"Username": "kamran",
"Password": "seven1337"
}
Команда cURL:
curl -X POST http://localhost:8080/login \
-H "Content-Type: application/json" \
-d '{"Username": "kamran", "Password": "seven1337"}'
Ответ:
{
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImthbXJhbiIsImlkIjoiNzNkMDk3MTMtMjZlZS00ZGNmLWExZTctY2YxMjcwYzNmZDIwIiwiZXhwIjoxNzIzNjUzMjc4fQ.aXYCv-3eREqH_2rAqxMJbTXBEe1gVEhc4O5xhVYbKs0",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjczZDA5NzEzLTI2ZWUtNGRjZi1hMWU3LWNmMTI3MGMzZmQyMCIsImV4cCI6MTcyNDM2NjA3OH0.FIgIRUdITIGsHgmgkGiOEaUfD60iLR9hNvJ07Jj_nNo"
}
Эндпоинт: GET /all
Заголовок:
Authorization: Bearer <accessToken>
Команда cURL:
curl -X GET http://localhost:8080/all \
-H "Authorization: Bearer <accessToken>"
Эндпоинт: POST /article
Заголовок:
Authorization: Bearer <accessToken>
Тело запроса:
{
"title": "how to write python way",
"content": "idk i am go dev"
}
Команда cURL:
curl -X POST http://localhost:8080/article \
-H "Authorization: Bearer <accessToken>" \
-H "Content-Type: application/json" \
-d '{"title": "how to write python way", "content": "idk i am go dev"}'