Разработка URL shortener на Scala 2, используя функиональную парадигму
10 000 руб. за проект
Дедлайн: 16.11.23
Необходимо создать небольшое веб-приложение, выполняющее роль URL shortener.
Ограничения по code style:
Необходимо создать небольшое веб-приложение, выполняющее роль URL shortener.
- Сокращенные URL живут вечно, проверка уникальности, увеличение длины ключа по мере исчерпания ключей. Проверка доступа до ресурса по сокращенному URL.
- Код должен быть написать на Scala 2 в функицональном стиле, присущем этому языку (implicits, Monoids, и пр.)
- Код должен быть читаемым и задокументирован
- Необходимо также написание тестов с помощью ScalaTest
- Сборка проекта должна происходить с помощью sbt.
- БД - PostgreSQL
- Готовый docker-compose с приложением и БД
- Короткий и ясный README.md про то, как задеплоить и запустить ваш проект, а также инструкции, как его использовать. Важно, чтобы мы могли задеплоить приложение на своей машине сразу же со всей необходимой для него инфраструктурой.
- Интерфейс не нужен, но необходима документация endpoints с помощью Swagger по ручке /docs.
- Деплоить приложение тоже не нужно, достаточно, чтобы инфраструктура разворачивалась локально.
Ограничения по code style:
- Переменные и функции должны иметь осмысленные названия;
- Тест классы именуются <ClassName>Spec, где <ClassName> - класс к которому пишутся тесты;
- Тест классы находятся в том же пакете, что и класс к которому пишутся тесты (например, класс Fibonacci находится в
пакете fibonacci в директории src/main/scala/fibonacci, значит его тест класс FibonacciSpec должен быть в том же
пакете в директории src/test/scala/fibonacci); - Каждый тест должен быть в отдельном test suite;
- Использовать java коллекции запрещается (Используйте Scala коллекции);
- Использовать mutable коллекции запрещается;
- Использовать var запрещается;
- Использование this запрещается (используйте self, если надо);
- Использование return запрещается;
- Использование System.exit запрещается;
- Касты или проверки на типы с помощью методов из Java вроде asInstanceOf запрещаются;
- Использование циклов запрещается (используйте for comprehension, tailRec, методы Monad, fold);
- Использование не безопасных вызовов разрешено только в тестах (например .get у Option);
- Использование взятия и освобождения примитивов синхронизации: semaphore, mutex - из разных потоков запрещено;
- Использование require для ошибок запрещается
Отзывы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.