Разработка URL shortener на Scala 2, используя функиональную парадигму

10 000 руб. за проект
11 декабря 2023, 05:40 • 1 отклик • 24 просмотра
Дедлайн: 16.11.23
Необходимо создать небольшое веб-приложение, выполняющее роль 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 для ошибок запрещается
Отзывы
Фрилансер кормил обещаниями, подолгу не выходил на связь, в итоге работу не выполнил и удалил чат в телеграме
11 месяцев назад