Данный проект является заключительной частью тестового задания для Квазар. Суть задания является соединить воедино предыдущие модули:
А так-же добавление:
- Документации к API
- Документации к Проекту
API реализовано на:
- Python 3.11
- SQLite
С использованием следующих библиотек:
- Flask-SQLAlchemy 3.0.x
- python-dotenv
- flask-swagger-ui
TODO:
- Улучшить качество docstring
- Реализовать часть ML
- Добавить обработчики ошибок
- Исправить предупреждение в тестах: test_delete_user - LegacyAPIWarning
- Улучшить качество тестов, убрать повторения кода
Test coverage:
- Stmts: 436
- Miss: 46
- Cover: 89%
Документация к API выполнена на swagger по стандарту openapi 3.0.0
Чтобы запустить проект, необходимо:
- Скачать его:
git clone --branch=master https://github.com/Mariama4/kvazar-tt.git
- Перейти в папку проекта:
cd kvazar-tt
- Установить зависимости:
pip install -r requirements.txt
- Запустить проект:
python app.py
Если вы установили и запустили проект, то более подробную документацию можно увидеть тут http://127.0.0.1:5000/api/docs/
Version 1.0.0
API с модулем Users, который поддерживает CRUD и позволяет получить следующую информацию:
- Используя данные из таблицы User, подсчитывать количество пользователей, зарегистрированных за последние 7 дней;
- Получить топ 5 пользователей с самыми длинными именами;
- Получить процент пользователей, которые имеют адрес электронной почты, зарегистрированный в определенном домене (например, "example.com").
Method | Path | Description |
---|---|---|
GET | /api/users/ | Получение всех пользователей |
GET | /api/users | Получение пользователей с пагинацией |
POST | /api/users | Создание пользователя |
GET | /api/users/{id} | Получение польльзователя по id |
PATCH | /api/users/{id} | Обновление пользователя по id |
DELETE | /api/users/{id} | Удаление пользователя по id |
POST | /api/users/info | Получение информации о пользователях |
Name | Path | Description |
---|---|---|
User | #/components/schemas/User |
- Summary
Получение всех пользователей
- 200 Список пользователей
application/json
[
{
"email": string,
"id": integer,
"registration_date": datetime,
"username": string
},
{
"email": string,
"id": integer,
"registration_date": datetime,
"username": string
}
]
- 403 Ошибка на стороне сервера
- Summary
Получение пользователей с пагинацией
page: integer
per_page: integer
- 200 Список пользователей
application/json
[
{
"email": string,
"id": integer,
"registration_date": datetime,
"username": string
},
{
"email": string,
"id": integer,
"registration_date": datetime,
"username": string
}
]
- 403 Ошибка на стороне сервера
- Summary
Создание пользователя
- application/json
{
"email": string,
"id": integer,
"registration_date": datetime,
"username": string
}
- 200 Пользователь создан
application/json
{
"email": string,
"id": integer,
"registration_date": datetime,
"username": string
}
- 403 Ошибка на стороне сервера
- Summary
Получение пользователя по id
- 200 Пользователь получен
application/json
{
"email": string,
"id": integer,
"registration_date": datetime,
"username": string
}
- 403 Ошибка на стороне сервера
- Summary
Обновление пользователя по id
- application/json
{
"email": string,
"username": string
}
- 200 Пользователь получен
application/json
{
"email": string,
"id": integer,
"registration_date": datetime,
"username": string
}
- 403 Ошибка на стороне сервера
- Summary
Удаление пользователя по id
- 200 Пользователь удален
application/json
{
"deleted": boolean
}
- 403 Ошибка на стороне сервера
-
Summary
Получение информации о пользователях -
Description
-
Пользователи, которые зарегистрировались за последние 7 дней
-
Топ 5 пользователей, которые имеют самые длинные имена (по убыванию)
-
Процент пользователей, которые имеют адрес электронной почты, зарегистрированный в определенном домене (например, "example.com").
- application/json
{
"domain": string
}
- 200 Информация получена
application/json
{
"countUsersForWeek": integer,
"percentOfDomain": {
"domain": string,
"percent": number
},
"topUsersWithLongestUsernames": [
{
"email": string,
"id": integer,
"registration_date": datetime,
"username": string
},
{
"email": string,
"id": integer,
"registration_date": datetime,
"username": string
}
]
}
- 403 Ошибка на стороне сервера
"id": integer
"username": string
"email": string
"registration_date": datetime