Skip to content

Latest commit

 

History

History

project

Bookmarks Manager 📎

Условие

Създайте приложение за удобно съхранение и организиране на линкове (bookmarks).

Сървър

Предоставя следните функционалности на клиента:

  • регистриране и вход с потребителско име и парола
  • добавяне на нови bookmarks
  • премахване на bookmarks
  • групиране на bookmarks
  • търсене на bookmarks по заглавие или ключова дума

💡 Bookmark-ите на потребителите трябва да се съхраняват във файлове на сървъра.

💡 Всеки добавен bookmark трябва да има заглавие. То трябва да отговаря на съдържанието на <title> таг-а от html-а на страницата.

💡 При добавяне на нов bookmark, сървърът трябва да extract-не ключовите думи от страницата, за да могат потребителите да търсят по тях.

  • Ключовите думи са най-използваните думи в страницата. Погрижете се предварително да премахнете пунктуационни знаци, специални символи, stopwords и т.н.
  • Опитайте се да сведете думите до техните корени, използвайки някой stemming алгоритъм. Най-простият от тях, който можете да използвате, е Suffix-stripping algorithm:
  • if the word ends in 'ed', remove the 'ed'
  • if the word ends in 'ing', remove the 'ing'
  • if the word ends in 'ly', remove the 'ly'
  • За лесно parse-ване на html, може да използвате библиотеката JSoup.

Клиент

Клиентът трябва да има command line interface със следните команди:

Регистриране

register <username> <password>

Регистрира нов потребител в приложението с име и парола

Вход

login <username> <password>

Създаване на нова група за съхранение на bookmarks

new-group <group-name>

Добавяне на нов bookmark в група

add-to <group-name> <bookmark> {--shorten}

Добавя bookmark в конкретна група. Aко опцията --shorten е налична, сървърът трябва да съкрати оригиналния bookmark, използвайки API-то на Bitly, документирано тук.

Премахване на bookmark от група

remove-from <group-name> <bookmark>

List-ване на всички bookmarks

list - извежда списък с всички линкове на потребителя

List-ване на всички bookmarks от група

list --group-name <group-name> - извежда списък с всички линкове от дадената група

Търсене на bookmarks по тагове

search --tags <tag> [<tag> ...]

Търсене на bookmarks по заглавие

search --title <title> - връща всички линкове, в чиито заглавия се среща <title>

Изчистване на невалидни линкове

cleanup - премахва всички bookmarks, чиито линкове вече не са валидни (т.е при /GET на bookmark-a се връща статус код 404 Not Found)

Добавяне на bookmarks от Chrome

import-from-chrome - добавя всички bookmarks от Google Chrome

Google Chrome съхранява вашите bookmarks на файловата система в json формат. Файлът с bookmarks се намира в различни директории в зависимост от операционната система:

  • Windows - AppData\Local\Google\Chrome\User Data\Default
  • Linux - ~/.config/google-chrome/Default/
  • MacOS - /Users/<Your UserName>/Library/Application\ Support/Google/Chrome

Съобщения за грешки

При неправилно използване на програмата, на потребителя да се извеждат подходящи съобщения за грешка.

При възникване програмна грешка, на потребителя да се извежда само уместна за него информация. Техническа информация за самата грешка и stackтraces да се записват във файл на файловата система - няма определен формат за записване на грешката.

Например, нерелевантно е при команда на потребител и възникнал проблем с мрежовата комуникация, да се изписва грешка от вида на "IO exception occurred: connection reset", по-подходящо би било "Unable to connect to the server. Try again later or contact administrator by providing the logs in <path_to_logs_file>".

При възникване на програмна грешка от страна на сървъра, подходящо съобщение се изписва на конзолата и във файл, като освен това, във файла се записва допълнителна информация (например, при заявка на кой потребител е възникнала грешката, ако въобще е обвързана с потребителско взаимодействие) и stacktraces.

Submission

Качете в грейдъра .zip архив на познатите директории src и test. Ако пакетирате допълнителни файлове (които не са .java), те трябва да са в корена на архива, на нивото на src и test. В грейдъра няма да има автоматизирани референтни тестове. Проектът ви трябва да е качен в грейдъра не по-късно от 18:00 в деня преди датата на защитата.

Успех!