Skip to content

Тестовое задание для "Квазар"

Notifications You must be signed in to change notification settings

Mariama4/kvazar-tt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kvazar-tt

Описание

Данный проект является заключительной частью тестового задания для Квазар. Суть задания является соединить воедино предыдущие модули:

А так-же добавление:

  • Документации к 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

Запуск проекта

Чтобы запустить проект, необходимо:

  1. Скачать его:
git clone --branch=master https://github.com/Mariama4/kvazar-tt.git
  1. Перейти в папку проекта:
cd kvazar-tt
  1. Установить зависимости:
pip install -r requirements.txt
  1. Запустить проект:
python app.py

Использование API:

Если вы установили и запустили проект, то более подробную документацию можно увидеть тут http://127.0.0.1:5000/api/docs/

API App

Version 1.0.0

API с модулем Users, который поддерживает CRUD и позволяет получить следующую информацию:

  • Используя данные из таблицы User, подсчитывать количество пользователей, зарегистрированных за последние 7 дней;
  • Получить топ 5 пользователей с самыми длинными именами;
  • Получить процент пользователей, которые имеют адрес электронной почты, зарегистрированный в определенном домене (например, "example.com").

Path Table

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 Получение информации о пользователях

Reference Table

Name Path Description
User #/components/schemas/User

Path Details


[GET] /api/users/

  • Summary
    Получение всех пользователей

Responses

  • 200 Список пользователей

application/json

[
  {
    "email": string,
    "id": integer,
    "registration_date": datetime,
    "username": string
  },
  {
    "email": string,
    "id": integer,
    "registration_date": datetime,
    "username": string
  }
]
  • 403 Ошибка на стороне сервера

[GET] /api/users

  • Summary
    Получение пользователей с пагинацией

Parameters(Query)

page: integer
per_page: integer

Responses

  • 200 Список пользователей

application/json

[
  {
    "email": string,
    "id": integer,
    "registration_date": datetime,
    "username": string
  },
  {
    "email": string,
    "id": integer,
    "registration_date": datetime,
    "username": string
  }
]
  • 403 Ошибка на стороне сервера

[POST] /api/users

  • Summary
    Создание пользователя

RequestBody

  • application/json
{
    "email": string,
    "id": integer,
    "registration_date": datetime,
    "username": string
}

Responses

  • 200 Пользователь создан

application/json

{
    "email": string,
    "id": integer,
    "registration_date": datetime,
    "username": string
}
  • 403 Ошибка на стороне сервера

[GET] /api/users/{id}

  • Summary
    Получение пользователя по id

Responses

  • 200 Пользователь получен

application/json

{
    "email": string,
    "id": integer,
    "registration_date": datetime,
    "username": string
}
  • 403 Ошибка на стороне сервера

[PATCH] /api/users/{id}

  • Summary
    Обновление пользователя по id

RequestBody

  • application/json
{
    "email": string,
    "username": string
}

Responses

  • 200 Пользователь получен

application/json

{
    "email": string,
    "id": integer,
    "registration_date": datetime,
    "username": string
}
  • 403 Ошибка на стороне сервера

[DELETE] /api/users/{id}

  • Summary
    Удаление пользователя по id

Responses

  • 200 Пользователь удален

application/json

{
  "deleted": boolean
}
  • 403 Ошибка на стороне сервера

[POST] /api/users/info

  • Summary
    Получение информации о пользователях

  • Description

  • Пользователи, которые зарегистрировались за последние 7 дней

  • Топ 5 пользователей, которые имеют самые длинные имена (по убыванию)

  • Процент пользователей, которые имеют адрес электронной почты, зарегистрированный в определенном домене (например, "example.com").

RequestBody

  • application/json
{
  "domain": string
}

Responses

  • 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 Ошибка на стороне сервера

References

#/components/schemas/User

"id": integer
"username": string
"email": string
"registration_date": datetime

About

Тестовое задание для "Квазар"

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published