# Индивидуальные проекты В течение второй половины курса вы будете работать над своими собственными проектами. ## Ограничения 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