Цель проекта - создать сервис для поиска и редактора мемов. Это учебный проект для проб стиля разработки tagless-final совместно с функциональными библиотеками cats, cats-effect, tofu и др.
Проект представляет собой web-application, позволяющий добавлять, просматривать, удалять и редактировать мемы.
Основные модули платформы:
- бэк-енд клиента для просмотра контента пользователями (реализован базовый кейс)
- фронт-енд для бэк-енда (не реализован)
- скраппер для сбора данных и наполнения хранилища мемов (не реализован)
Функции модуля бэк-енда клиента:
- Базовый CRUD сценарий для сущности - пост, имеющий
url, дату публикации -published, число лайков -likes:- Создание поста по
url,published,likes- done - Редактирование любого поля поста по отдельности, либо все сразу - done
- Удаление поста по
id, всех постов - done - Чтение всех постов - done
- Фильтрации при чтении постов из хранилища:
- by published (
dateordatetimeparameter) done - by id (
stringparameter) done - by pages with n on one page (
intpage-size,intpage) pending - with likes below (
intparameter) pending - with likes above (
intparameter) pending
- by published (
- Создание поста по
- Scala
- cats
- cats-effect
- http4s
- doobie (or skunk)
- postgres(using docker image)
- tofu-logging
- derevo-pureconfig
В данным проекте реализовано два коннектора к БД, один на основе doobie второй на основе skunk.
skunk - библиотека для работы с БД postgres, реализованная в чистом функциональном стиле одним из создателей doobie.
Сменить коннектор можно перезапустив приложение, заменив перед этим строчку в классе ApplicationBuilder:
override val dbConnector: DBConnector[F, UUID] = new DoobieConnector[F]()
на
import infrastructure.repository.skunk.SkunkConnector
override val dbConnector: DBConnector[F, UUID] = new SkunkConnector[F]()
Оба коннектора поддерживают все объявленные операции при обращении к БД.
Инициализация БД:
- установить docker клиент
- развернуть образ с базой данных, командой
docker-compose up -dиз корня проекта - подключиться к БД любым клиентом, используя строку подключения:
jdbc:postgresql://localhost:54320/postgresusername/password: example - создать БД для нужд проекта командой в клиенте:
create database memologio; commit; - подключиться к БД
memologioклиентом по адресуjdbc:postgresql://localhost:54320/memologiousername/password:exampleи выполнить команды из скриптаsrc/main/resources/db_initialization.sql
Запустить приложение можно используя sbt выполнив sbt run
В качестве клиента для ручного тестирования в данный момент используется файл client.http в корне проекта.
В нем описаны основные запросы к бэк-енду клиента для проверки работоспособности. С его помощью можно проверить работоспособность приложения.
- Добавить сущность пользователя, роли, модуль авторизации.
- Добавить сущность теги. Осуществить связь многие ко многим к постам.
- Возможность создавать свои мемы с помощью шаблонов, добавлять новые шаблоны. Сущность шаблон, связь многие к одному к пользователям.
- Вывод трендов на основе лайков
- Добавить модуль Скрапер мемов: сервис, позволяющий выкачивать из открытых источников мемы, парсить ленты новостей и сохранять в общее хранилище.