# Индивидуальные проекты
В течение второй половины курса вы будете работать над своими собственными проектами.
## Ограничения
1. Проект может быть чем угодно, главное ограничение -- это присутствие работы с сетью в любом виде (подключение к БД, работа с внешним API и т.д.)
2. Весь код должен следовать практикам, изученным в течение курса, а так же быть написан в функциональной парадигме.
3. Короткий и ясный README.md про то, как запустить ваш проект. Мы советуем вам рассмотреть использование `Docker` и `Docker Compose`.
4. Короткий и ясный README.md про то, как использовать ваш проект. Это может быть инструкция к приложению командной строки, документация API, созданная автоматически, например, Swagger, и другое.
Вы можете создать функциональность по своему выбору.
## Оценивание
Вы можете **2** раза запросить промежуточное ревью. Оно не повлияет на итоговую оценку.
Постарайтесь найти баланс между функционалом и аттрибутами качества программного обеспечения.
Ваши проекты будут оцениваться по следующим параметрам:
* Корректность работы приложения (логика)
* Коректность использования бибиотек и тулзов
* Читабельность кода
* Тесты
* Следование указанным ограничениям
В зависимости от размера проекта, допускается как ужесточение требований, так и их послабление
## Отправка на проверку
Вы должны отправить GitHub/GitLab репозиторий. Также, добавьте к ним следующие аккаунты:
GitHub аккаунты:
1. [@FireFoxIL](https://github.com/FireFoxIL/)
1. [@artembakhanov](https://github.com/artembakhanov)
1. [@Pain122](https://github.com/Pain122)
1. [@nkalinskiy](https://github.com/nkalinskiy)
1. [@G1ng3r](https://github.com/G1ng3r)
GitLab аккаунты:
1. [@FireFoxIL](https://github.com/FireFoxIL/)
1. [@artembakhanov](https://gitlab.com/artembakhanov)
1. [@G1ng3r](https://gitlab.com/G1ng3r)
## Идеи для проектов
| # | Название | Описание |
|-----|----------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1. | Система контроля доступа | Система для контроллера, которая либо разрешает / не разрешает доступ для сотрудника по его карте. Система логов проходов по контроллерам |
| 2. | CRUD для ведения расходов | Система для добавления и учета расходов |
| 3. | Менеджер персональных данных | Система для хранения паролей и документов в шифрованном виде |
| 4. | Remind-бот для telegram | Бот позволяет запланировать напоминалку разово или по расписанию, отправляет сообщение в нужное время. |
| 5. | Сервис для шаринга текста | Навроде pastebin. Ревизии текста, владение по токенам без регистрации. |
| 6. | Сервис для шаринга файлов | Аплоад, даунлоад, хранение файлов на файловой системе сервера, владение по токенам без регистрации. |
| 7. | Healthcheck-сервис с нотификациями | Сервис мониторит состояние других ресурсов по http, и шлет нотификации (выбор канала за имплементером) если что-то начинает проваливать health check |
| 8. | Сокращалка урлов | Сокращенные URL живут вечно, проверка уникальности, увеличение длины ключа по мере исчерпания ключей. Проверка работоспособности ресурса по URL при сокращении |
| 9. | Телеграм-бот для проведения экзаменов | Для преподавателей: создание экзаменов, различных вопросов к ним, разбалловки, ограничение по времени и т.д. Для учеников: получение уведомлений (о начале экзамена и времени окончания), возможность ответить. |
## Примеры проектов
Примеры использования стеков, которые вы можете использовать в проектах. Размер ваших проектов может отличаться от представленных.
1. [Shopping Cart](https://github.com/gvolpe/pfps-shopping-cart)
4. [ZIO CRUD sample](https://github.com/adrianfilip/zio-crud-sample)
5. [Fintracker](https://github.com/dimfatal/fintracker) - проект достаточно старый, лучше использовать [Telegramium](https://github.com/apimorphism/telegramium) tg bot api
## Список популярных библиотек
1. Typelevel (cats стек)
1. https://github.com/tpolecat/doobie - для взаимодействия по JDBC с бд
2. https://tapir.softwaremill.com/en/latest/ - для создания api, в качестве бекенда можете использовать http4s
3. https://sttp.softwaremill.com/en/stable/ - http клиент
4. https://github.com/typelevel/log4cats или https://docs.tofu.tf/docs/tofu.logging.home - логирование
5. https://github.com/profunktor/redis4cats - redis кэш
6. https://fs2.io/#/getstarted/install - функциональный стриминг данных
7. https://fd4s.github.io/fs2-kafka/ - kafka реализованная через fs2 стримы
1. ZIO
1. https://zio.dev/ecosystem/ - список официальных и не только либ
2. https://zio.dev/zio2-interop-cats3/ - если нужно связать библиотеки typelevel стека с zio
3. https://circe.github.io/circe/ - для парсинга json
4. https://github.com/apimorphism/telegramium - telegram bot api