---
# System prepended metadata

title: Индивидуальные проекты

---

# Индивидуальные проекты

В течение второй половины курса вы будете работать над своими собственными проектами.

## Ограничения

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
