An open API service indexing awesome lists of open source software.

https://github.com/meetinger/test_task_middle


https://github.com/meetinger/test_task_middle

Last synced: 3 months ago
JSON representation

Awesome Lists containing this project

README

          

# test_task_middle

## Тестовое задание

### Установка и настройка
1. Склонируйте репозиторий командой `git clone`
2. Установите Python 3.11, Poetry, Docker, Docker-Compose
3. Запустите команду `poetry install` для установки зависимостей(в случае проблем, попробуйте удалить poetry.lock)
4. (Необязательно) Настройте переменные окружения в `.env` `.env.docker` и отредактируйте Dockerfile, docker-compose.yml на свой вкус
5. Запустите приложение командой `sudo docker compose up -d`
6. Используйте API, документация находится по адресу `http://localhost:8888/redoc`

### Особенности проекта
1. Вместо Flask я решил использовать FastAPI, он более современный и производительный
2. Вместо SQLite я использовал PostgreSQL
3. Всё было обёрнуто в Docker
4. Был использован Poetry вместо pip для более удобного управления зависимостями
5. Юнит-тесты присутствуют, в докере запустите только тестовую БД и запустите `poetry run pytest` из корня репозитория

### Задания
1. Задача 1: Создание API с использованием Flask и SQLAlchemy – 30 баллов ✅
1. Создание таблицы User – 5 баллов ✅
2. Реализация CRUD-операций – 15 баллов ✅
3. Поддержка пагинации – 10 баллов ✅
2. Задача 2: Работа с данными и структурирование – 25 баллов ✅
1. Подсчет пользователей за последние 7 дней – 8 баллов ✅
2. Топ-5 пользователей с самыми длинными именами – 8 баллов ✅
3. Доля пользователей с определенным доменом электронной почты – 9 баллов ✅
3. Задача 3: Модели анализа данных – 25 баллов ❌ (есть наработки)
1. Создание модели предсказания активности пользователя – 15 баллов ❌
2. Функция для расчета вероятности активности – 10 баллов ❌
4. Задача 4: Объединение проекта – 10 баллов ✅
1. Интеграция задач в одном проекте – 10 баллов ✅
5. Задача 5: Тестирование и документация – 10 баллов ❓ (не всё идеально)