Giter Club home page Giter Club logo

like_test's Introduction

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 было неясно, поэтому она была убрана

like_test's People

Contributors

olenenkeli avatar

Watchers

 avatar  avatar

Forkers

dimanvorosh

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.