Service Station API:

Проект реализуется в рамках авторского курса по тестированию ПО Вадима Ксендзова: https://ksendzov.com/, telegram - @peplomot

ДИСКЛЕЙМЕР:

  • Так как в настоящее время проектом занимаюсь я один, то работа продвигается не настолько быстро, как хотелось бы, но я стараюсь, честно :) Я ни разу не разработчик, все учится, усваивается и практикуется по мере реализации.

Саммари: проект - сервис по предоставлению услуг шиномонтажа и хранению шин на складе.

Если Вы обнаружили в проекте баги, ошибки, неточности, либо у Вас возникнут пожелания или предложения, прошу Вас воспользоваться соответствующими ссылками:

Условности:

  • Сервис работает 7 дней в неделю, так же и все работники и менеджеры.
  • Рабочее время - 08:00 - 20:00
  • Перерыв между заказами - 10 минут
  • Все виды работ выполняются рабочими
  • Планируемое время окончания работ не может превышать 20:15
  • Ценообразование заказов и продолжительность работ взяты с потолка :)
  • Стоимость работ не учитывает затраты на расходные материалы

Что реализовано:

  • Пользователь:

    • Для использования сервиса пользователю необходимо зарегистрироваться
    • После регистрации пользователь может залогиниться, используя свой email и пароль, созданный при регистрации.
    • Пользователь может деактивировать себя
    • Пользователь может изменять личные данные
    • Деактивированный пользователь не может быть залогинен, следовательно - пользоваться сервисом
    • Пользователь может добавить свои транспортные средства указав тип ТС и размерность колес
    • Пользователь может создать заказ на хранение шин с указанием даты начала и окончания хранения, но не более чем +2 года от текущей даты
    • При создании заказа на хранение пользователь указывает размер шин, либо ид своего ТС
    • Таким образом, на хранение можно отдать любые шины, не оглядываясь на добавленные им ТС
    • Пользователь может запрашивать свою информацию - личные данные, добавленные ТС, заказы на хранение, заказы на сервис, добавленные услуги в заказ на сервис со стоимостью
    • Пользователь может создать заказ на сервис двух видов (заказ на замену шин и заказ на ремонт шин)
    • Пользователь может удалять заказы, даты которых не менее текущей
    • Пользователь может просматривать информацию о полках на складе в разрезе размера и свободна/занята на текущее время
  • Функционал:

Все действия пользователь может производить только над своими заказами, транспортными средствами, личными данными.

  • Учетная запись пользователя:

    • Существуют две группы пользователей - user и admin
    • При регистрации по умолчанию присваивается группа user и статус active
    • Email регистронезависимые и проверяются на уникальность
    • Email должен содержать 4-100 символов. Обязательные - @ и .
    • При изменении пользователей своего email он разлогинивается. Для дальнейших действий пользователю необходимо залогиниться под новым email
    • Пароль должен содержать 8-32 символа. Алфавит - латиница. Обязательные - как минимум одна буква в верхнем регистре, одна - в нижнем, одна цифра и один из спецсимволов ($@#!%')
    • Пароль не сохраняется в базе данных и восстановить или изменить его возможно только с помощью админа
    • После успешной аутентификации пользователю выдается токен
    • Время жизни токена - 10 минут и обновляется до 10 минут после каждого авторизованного действия пользователя
    • Активировать пользователя может только администратор
    • Удалить учетную запись может только администратор
    • При удалении учетной записи пользователя также удаляется вся связанная с ним информация
  • Заказ на хранение:

    • При передаче пользователем <size_name> и <user_vehicle_id> одновременно - <size_name> игнорируется
    • Производится поиск полки необходимого размера, которая не занята в требуемый промежуток времени
    • Если таковая не находится - выводится сообщение.
    • Невозможно удалить заказ с датой начала равной или менее текущей
    • ToDo:
      • реализация возможности редактирования заказа
      • для этого необходимо внедрение системы распределения шин по полкам в автоматическом режиме с учетом временных графиков
      • а также возможность временно размещать шины на полках большего размера
  • Заказ на сервис:

    • На заказ на сервис выбирается в первую очередь рандомный менеджер, у которого нет заказов.
    • Во вторую очередь - рандомный менеджер с наименьшим количеством заказов
    • После отправки запроса вычисляется время, необходимое для проведения выбранных работ и добавляется 10 минут на уборку и перерыв
    • Работяга выбирается рандомно из тех, которые незаняты в необходимое время
    • Услуги в заказе умножаются на количество колес, кроме услуги "сход-развал", которая считается всегда одна
    • Сумма заказа вычисялется из стоимости услуг и времени работы работяги с учетом его оклада
    • С удалением заказа на сервис удаляются связанные с ним работы
    • Если не находится свободный работяга в необходимое время - выводится сообщение
    • ToDo:
      • Возможность менеджеру переназначать работяг по услугам и работам
      • При ненахождении работяги для формирования заказа - перераспределять работяг по видам работ и услуг
      • Внедрение выделенных должностей для отдельных видов работ и услуг, что позволит более рационально распределять работяг и принимать большее количество заказов

Что в планах на ближайшее время:

  • Просмотр свободных полок на складе на определенную дату от текущей
  • При создании заказа на хранение не учитывается время - только дата (при пересечении времени подразумевается использование полки другого размера, или еще чего.. :)
  • Фикс возможности создания заказа на сервис на одно и то же транспортное средство на одно и то же время
  • Добавление и идентификация транспортного средства по гос.номеру
  • Возможности изменения заказов не реализованы (пока?)
  • Не реализована логика размещения шин на складе на полке большего размера при пересечении дат.
  • Спектр услуг будет пополняться
  • Возможность работяге добавлять в услугу расходные материалы
  • Учет и списание расходных материалов на услуги ремонта
  • Создание графика работы сотрудников
  • Реализация системы подписки
  • По подписке пользователь может в течении года хранить шины, два раза в год пользоваться услугой шиномонтажа и ремонта
  • Создание уголка менеджера: распределение работяг, коммуникация, отчеты по тем заказам и рабочим которые на него назначены
  • Создание уголка директора: распределение менеджеров, коммуникация, отчеты по предприятию в разрезе заказов, менеджеров, рабочих, услуг, финансов
  • Прочие разности, которые приходят на лету, от коллег, друзей, одногруппников и вообще всех неравнодушных и готовых помочь :)

Данный документ будет пополняться по мере и постоянно )