Skip to content

Реализация тестового задания для приложения автоматизированного учета сбора урожая

Notifications You must be signed in to change notification settings

OlenEnkeli/like_test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 

Repository files navigation

Like Test

Реализация тестового задания для приложения автоматизированного учета сбора урожая

Развертывание приложения

Для развертывания приложения необходимы запушенные nginx, postgresql, redis

Сборка backend

psql postgres
postgres=# create database liketest;
postgres=# \q

cd backend
python3 -m venv env
./env/bin/pip3 install - r requirements.txt
./env/bin/alembic upgrade head # запуск миграций
./init_data.py # запуск генерации тестовых значений

./dev.sh # запуск dev сервера (gunicorn)

Сборка frontend

cd frontend
npm install install
npm run server

Используемая конфигурация nginx

map $http_upgrade $connection_upgrade {
    default upgrade;
    ‘’ close;
}

upstream frontend {
    server 127.0.0.1:8080;
}

upstream backend {
    server 127.0.0.1:8000;
}

server {
    listen 80;
    server_name moon.local;
    client_max_body_size 100M;

    location /api {
        proxy_pass http://backend/;
        proxy_set_header Host 127.0.0.1;
    }

    location / {
        proxy_pass http://frontend/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection “upgrade”;
        proxy_set_header Host 127.0.0.1;
    }
}

Описание API

[GET] /api/ - API Healthcheck

[POST] /login/manager - Вход менеджера

{
    "login": "ivan666",
    "password: "qwerty"
}

[GET] /users/current - Получение текущего пользователя

[GET] /logout - Выход

[GET] /productivity?date=2018-01-01 - Получение выборки продуктивности за определенную дату (основной ресурс)

[GET] /workdate - Получение первого и последнего дня проведения работ

Описание генерации данных

Скрипт init_data.py представляет собой простой генератор данных

Он проивзодит генерацию пользователей (коллекторов, ревьювера и менеджера) и имитирует проведение работ.

Содержит следующие параметры

ACITIVITY_START_DATE = dt.date(year=2018, month=1, day=1) # Дата начала работ
ACITIVITY_END_DATE = dt.date(year=2018, month=1, day=10) # Дата конца работ
WORKDAY_START_TIME = dt.time(hour=8) # Дата начала рабочего дня
WORKDAY_END_TIME = dt.time(hour=20, minute=00) # Дата конца рабочего дня
BOX_COLLECT_TIME_MIN = dt.timedelta(minutes=10) # Минимальное время сборки ящика
BOX_COLLECT_TIME_MAX = dt.timedelta(minutes=50) # Максимальное время сборки ящика
BOX_REVIEW_TIME_MIN = dt.timedelta(minutes=5) # Минимальное время проверки ящика
BOX_REVIEW_TIME_MAX = dt.timedelta(minutes=7) # Максимальное время проверки ящика
BOX_PAYLOAD_MIN = 10000 # Минимальный вес коробки
BOX_PAYLOAD_MAX = 14000 # Максимальный вес коробки

Логи работы в выходные не генерируются.

Для генерации используются случайные значения (между минимальными и максимальными)

Основные допущения

Тестовый архив не содержал модели user.py и основной логики, в связи с этим:

  • Было сделано предположение, что пользователи делятся на менеджеров и два типа рабочих (коллекторов и ревьювера). Был реализована абстрактная модель пользователя и модель менеджера, реализован вход для менеджеров. Вход для рабочих реализован не был в виду отсутствия необходимости

  • Было сделано предположение, что имеется некая админ-панель для менеджеров, был реализован ее прототип

  • Было сделано предположение, что бизнес-логика является следующей: коллектор собирает урожая в ящик с опредленном номером и передает его ревьюверу, тот взвешивает ящики и вносит данные в систему. Связ ревьюверов и коллекторов предполагается через box_code

  • Назначение таблицы ContentType было неясно, поэтому она была убрана

About

Реализация тестового задания для приложения автоматизированного учета сбора урожая

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published