Project

General

Profile

Overview

logo_512

Linkchecker

Оригинальный текст задания

Разработать REST-сервис, проверяющий работоспособность любой последовательности узлов.
Каждый узел имеет уникальное имя, вероятность, с которой откажет при обращении к нему, и счетчик успешно выполненных запросов.

Сервис должен реализовывать два POST-метода:

  1. setNodes устанавливает граф из узлов, описанных выше. Формат входных данных - JSON. Программа должна исключать циклические связи узлов.
  2. checkRoute принимает набор вершин (или их идентификаторов) в формате JSON и проходит по этим вершинам, проверяя на каждом пройденном узле, не отказал ли он. Если путь существует в графе и ни один из узлов пути не отказал, следует увеличить счетчик в каждом из узлов пути. В противном случае отображать ошибку в ответе POST-метода (произвольный формат).
  3. Узлы и связи должны храниться в базе данных.

Изменённый вариант задания

После введённых корректировок, итоговый вид тестового задания выглядит следующим образом:

Разработать REST-сервис, проверяющий работоспособность любой последовательности узлов.

  1. Каждый узел имеет уникальное имя и счетчик успешно выполненных запросов, так же для хранения в базе данных есть уникальный идентификатор, который присваивается автоматически при записи в БД. Был исключен элемент вероятность отказа узла. Этот параметр перестал быть нужным, так как вероятность отказа узла стала случайным фактором, возникающая автоматически, во время проверки последовательности узлов.
  2. Граф в программе неориентированный, т.е. вершины графа связаны друг с другом рёбрами, не имеющими направления. В базе данных, хранение графа осуществляется в двух таблицах. В одной таблице осуществляется хранение набора узлов графа, в другой набор рёбер графа. Более подробно смотрите запись в wiki План работы
  3. Программа позволяет делать следующее:
    1. Работать с графом обобщённо:
      1. Создавать новый граф (при этом информация о прежнем графе будет удалена с БД)
      2. Извлекать информацию о графе в заданном формате
      3. Удалять целиком весь граф
      4. Проверять работоспособность заданной последовательности узлов (по условию задачи) выполнив соответствующий запрос.
    2. Работать с узлами и ребрами по отдельности, т.е. добавлять, удалять, искать информацию по заданным параметрам. Ручное изменение какой-либо информации о узле и ребре не предусмотрена, т.е. возможно либо добавления узла или ребра в БД или удаление из БД)

Так как по условию задания, граф должен исключить все виды циклов (т.е. граф должен быть ациклическим), то при любом запросе информации о графе целиком или же при проверки набора заданных узлов, будет происходить автоматический поиск и удаление циклов из графа. Удаление циклов происходит при помощи удаления набора рёбер, создающие циклы, поэтому в случае обнаружения циклов в графе, набор рёбер графа будет изменён и данные изменения попадут в БД.

Автоматический поиск и удаление циклов не срабатывает, если происходит работа только с набором данных рёбер графа в отдельности, т.е. можно добавлять в базу рёбра, образующие циклы.

Используемый стек : Spring Boot, Spring Data, ORM (Hibernate), JGraphT (для работы с графом), GSON (используется вместо используемого по умолчанию Jackson для работы с json), Thymeleaf и Bootstrap (используется для формирования стартовой информационной страницы), Mockito (идёт вместе с Spring Boot), Powermock (подключается отдельной библиотекой, используется в дополнении к mockito для тестов)

Хранилище данных : PostgeSQL (для production), H2 (для тестов)

Spent time

242:10 hours

Details | Report

Members

Руководитель проекта: Александр Александров

Go to top