Files
Linkchecker/README.md
2023-06-11 00:14:30 +03:00

62 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Linkchecker
## Оригинальный текст задания
Разработать REST-сервис, проверяющий работоспособность любой последовательности узлов.
Каждый узел имеет уникальное имя, вероятность, с которой откажет при обращении к нему, и счетчик успешно выполненных запросов.
Сервис должен реализовывать два POST-метода:
1. setNodes устанавливает граф из узлов, описанных выше. Формат входных данных - JSON.
Программа должна исключать циклические связи узлов.
2. checkRoute принимает набор вершин (или их идентификаторов) в формате JSON
и проходит по этим вершинам, проверяя на каждом пройденном узле, не отказал ли он.
Если путь существует в графе и ни один из узлов пути не отказал, следует увеличить счетчик
в каждом из узлов пути. В противном случае отображать ошибку в ответе POST-метода (произвольный формат).
3. Узлы и связи должны храниться в базе данных.
## Изменённый вариант задания
После введённых корректировок, итоговый вид тестового задания выглядит следующим образом:
Разработать REST-сервис, проверяющий работоспособность любой последовательности узлов.
1. Каждый узел имеет уникальное имя и счетчик успешно выполненных запросов,
так же для хранения в базе данных есть уникальный идентификатор, который
присваивается автоматически при записи в БД. Был исключен элемент вероятность отказа узла.
Этот параметр перестал быть нужным, так как вероятность отказа узла стала случайным фактором,
возникающая автоматически, во время проверки последовательности узлов.
1. Граф в программе неориентированный, т.е. вершины графа связаны друг с другом рёбрами,
не имеющими направления. В базе данных, хранение графа осуществляется в двух таблицах.
В одной таблице осуществляется хранение набора узлов графа, в другой набор рёбер графа.
Более подробно смотрите запись в wiki [Описание данных](./../wikis/Описание%20данных)
1. Программа позволяет делать следующее:
1. Работать с графом обобщённо:
1. Создавать новый граф (при этом информация о прежнем графе будет удалена с БД)
1. Извлекать информацию о графе в заданном формате
1. Удалять целиком весь граф
1. Проверять работоспособность заданной последовательности узлов
(по условию задачи) выполнив соответствующий запрос.
1. Работать с узлами и ребрами по отдельности, т.е. добавлять, удалять,
искать информацию по заданным параметрам. Ручное изменение какой-либо информации о узле и ребре не предусмотрена,
т.е. возможно либо добавления узла или ребра в БД или удаление из БД)
Так как по условию задания, граф должен исключить все виды циклов
(т.е. граф должен быть ациклическим), то при любом запросе информации о графе целиком
или при проверки набора заданных узлов будет, происходить автоматический поиск
и удаление циклов из графа. Удаление циклов происходит при помощи удаления набора рёбер,
создающие циклы, поэтому в случае обнаружения циклов в графе, набор рёбер графа будет
изменён и данные изменения попадут в БД.
Автоматический поиск и удаление циклов не срабатывает, если происходит работа только
с набором данных рёбер графа в отдельности, т.е. можно добавлять в базу рёбра,
образующие циклы.
**Используемый стек** : **Spring Boot**, **Spring Data**, **ORM (Hibernate)**,
[**JGraphT**](https://jgrapht.org/) (для работы с графом),
**GSON** (используется вместо используемого по умолчанию Jackson для работы с json),
**Thymeleaf** и **Bootstrap** (используется для формирования стартовой информационной страницы),
**Mockito** (идёт вместе с Spring Boot),
**Powermock** (подключается отдельной библиотекой, используется в дополнении к mockito для тестов)
**Хранилище данных** : PostgeSQL (для production), H2 (для тестов)