Skip to content

Commit

Permalink
Add course projects assignments
Browse files Browse the repository at this point in the history
  • Loading branch information
100yo committed Jan 20, 2025
1 parent 8de40d3 commit fcbb2a8
Show file tree
Hide file tree
Showing 14 changed files with 1,546 additions and 0 deletions.
35 changes: 35 additions & 0 deletions course-projects/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Указания за разработка на курсов проект

1. Проектите са индивидуални

2. Mоже да изберете един от предложените проекти или да измислите и предложите свой (приема се след наше одобрение - изпратете предложението си на екипа на курса)

3. Всички проекти трябва да покриват следните общи условия:
- Демонстрират знания за
- вход-изход с файлове
- многонишково програмиране
- мрежова комуникация
- Имат unit тестове с поне 50% line code coverage
- Имат валидация на входните данни
- Имат добър обектно-ориентиран дизайн
- Използват подходящи изключения за докладване на грешки
- Използват подходящи структури от данни и ефективни алгоритми
- Имат четлив и добре структуриран код
- Ползват в имплементацията си само Java SE и външни библиотеки и API-та, изучавани в курса или изрично указани в условието. При нужда или желание да ползвате нещо допълнително, обсъдете с екипа на курса

# Варианти за теми

| # | Тема |
|:---|:--------------------------------------------------------- |
| 1 | [Authentication Server](auth-server.md) |
| 2 | [Bookmarks Manager](bookmarks.md) |
| 3 | [Dungeons Online](dungeons.md) |
| 4 | [Uno](uno.md) |
| 5 | [Food Analyzer](food-analyzer.md) |
| 6 | [Split(NotSo)Wise](splitwise.md) |
| 7 | [Spotify](spotify.md) |
| 8 | [Torrent Server](torrent.md) |
| 9 | [Password Vault](password-vault.md) |
| 10 | [Todoist](todoist.md) |
| 11 | [Cryptocurrency Wallet Manager](cryptocurrency-wallet.md) |
| 12 | По ваш избор |
193 changes: 193 additions & 0 deletions course-projects/auth-server.md

Large diffs are not rendered by default.

113 changes: 113 additions & 0 deletions course-projects/bookmarks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Bookmarks Manager :paperclip:

## Условие

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

### Сървър

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

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

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

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

- Ключовите думи са най-използваните думи в страницата. Погрижете се предварително да премахнете пунктуационни знаци, специални символи, `stopwords` и т.н.
- Опитайте се да сведете думите до техните корени, използвайки някой [`stemming`](https://en.wikipedia.org/wiki/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](https://jsoup.org/).

### Клиент

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


#### Регистриране
```bash
register <username> <password>
```
Регистрира нов потребител в приложението с име и парола

#### Вход
```bash
login <username> <password>
```

#### Създаване на нова група за съхранение на bookmarks
```bash
new-group <group-name>
```

#### Добавяне на нов bookmark в група
```bash
add-to <group-name> <bookmark> {--shorten}
```
Добавя bookmark в конкретна група. Aко опцията `--shorten` е налична, сървърът трябва да съкрати оригиналния bookmark, използвайки API-то на [Bitly](https://dev.bitly.com/api-reference), документирано [тук](https://dev.bitly.com).

#### Премахване на bookmark от група
```bash
remove-from <group-name> <bookmark>
```

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

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

#### Търсене на bookmarks по тагове
```bash
search --tags <tag> [<tag> ...]
```
#### Търсене на bookmarks по заглавие
```bash
search --title <title> - връща всички линкове, в чиито заглавия се среща <title>
```

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

#### Добавяне на bookmarks от Chrome
```bash
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 в деня преди датата на защитата.

Успех!
Loading

0 comments on commit fcbb2a8

Please sign in to comment.