Skip to content

darchukoleksandr/Devchallenge_semifinal

Repository files navigation

Основні відомості

Цільовий сайт: http://brovary-rada.gov.ua/documents/
При запуску проекту планувальник автоматично починає сканувати кожну сторінку цільового сайту предмет оновлення. Для цього попередньо з бази даних будуть вибрані останні зміні для кожної сторінки. Якщо в базі немає даних про сторінку з певним sourceId, вона додається в список для оновлення. Якщо ж сторінка вже була присутня в базі даних то порівнюється текст і в разі наявності відмінностей заноситься до списку, який в рамках однієї транзакції заноситься в базу. Парсинг відбувається POST запитом та за планувальником.
Back-end сервіс лише віддає запарсені версії документів. Розраховується, що саме відображення відмінностей між версіями буде виконуватися на клієнтській стороні з використанням JavaScript бібліотек.

База даних

Вибір SQLite зумовлений відсутністю окремого процесу бази даних, що зменшує накладні витрати і час відгуку.

Таблиця [documents]:
[sourceId] integer - первинний ключ, посилання типу http://brovary-rada.gov.ua/documents/{sourceId}.html
[name] text - назва рішення міської ради
[deleted] datetime - дата виявлення видалення

Таблиця [versions]:
[id] integer - первинний ключ
[sourceId] integer - зовнішній ключ до таблиці [documents]
[text] text - текст рішення міської ради
[updated] datetime - дата виявлення останньої зміни

Парсинг

Налаштування планувальника

Налаштування автоматичного оновлення відбувається шляхом POST запиту до контролера SheluderController. В тілі запиту необхідно помістити значення, яке буде конвертовано в TimeSpan ([дні].[години]:[хвилини]:[секунди]):

POST /api/sheluder/update HTTP/1.1
Content-Type: application/json
"1.10:00:21"
За замовчуванням парсинг буде відбуватися кожні 3 години.

Ручний запуск парсера

Запуск відбувається шляхом POST запиту до контролерра UpdateController.
POST /api/update/all HTTP/1.1
В ідеалі бажано дозволити дану функцію лише для авторизованих користувачів (OAuth, тощо).

Доступ до збережених документів

Доступ до збережених документів відбувається шляхом GET запиту до контролера DocumentController.
Доступ до списку з конкретних документів здійснюється GET запитом до api/documents. Список можливих параметрів для масштабування:
amount (int) - кількість документів
page (int) - сторінка (кількість пропущених елементів = amount * page)
deleted (boolean) - документи, що помічені, як видалені
inclVers (boolean) - чи необхідно повернути версії документу
Доступ до конкретного документу, враховуючи повну історію змін здійснюється GET запитом до api/documents/{sourceId}

Клієнтська частина

Клієнтська частина побудована з використанням Angular2. При вибірці документу будуть підвантажені його версії. Для відображення явних розрізнень у версіях використовується бібліотека google-diff-match-patch.

Docker

Запуск був успішно виконаний на Linux-контейнері. За основу Dockerfile було взято 1.1.2-jessie. Порядок команд для відновлення проекту:
1. dotnet restore Devchallenge_semifinal.sln - відновлення NuGet-пакетів.
2. dotnet publish Devchallenge_semifinal.sln - компіляція проекту (вихідні файли використвуватимуться в контейнері)
3. docker-compose build - створення та налаштування контейнера (node.js, npm install)
3. docker-compose up

Використані сторонні бібліотеки

AngleSharp, google-diff-match-patch, Quartz.NET

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors