shortener-server

Copyright(c) Mansur Ziiatdinov 2018-2019
LicenseBSD-3
Maintainerchgk@pm.me
Stabilityexperimental
PortabilityPOSIX
Safe HaskellNone
LanguageHaskell2010

DB

Contents

Description

В этом модуле находятся функции для работы с базой данных. Поскольку приложение демонстрационное, используется Sqlite. Из модуля экспортируются только функции, которые работают с типами предметной области, все внутренности БД инкапсулированы в модуле.

Строка для соединения с БД задаётся в конфигурации.

БД имеет следующую схему. В БД есть единственная таблица url, созданная при помощи следующего запроса:

  CREATE TABLE IF NOT EXISTS "url"
    ( "id" INTEGER PRIMARY KEY
    , "author" VARCHAR NOT NULL
    , "short" VARCHAR NOT NULL
    , "long" VARCHAR NOT NULL
    , "created_at" TIMESTAMP NOT NULL
    , CONSTRAINT "unique_short" UNIQUE ("short")
    );

Смысл полей:

id
первичный ключ
author
электронная почта создателя ссылки
short
сокращённая ссылка (часть после https://s.chgk.me/u/)
long
куда ведёт ссылка
created_at
дата-время создания ссылки
Synopsis

Соединение с БД

withDb Source #

Arguments

:: Config

Настройки приложения

-> SqlPersistM a

Действие с БД, возвращающее результат

-> IO a

Результат запуска действия

Запускает действия, изменяющие БД внутри монады IO. При каждом вызове БД открывается заново

Работа с БД

insertUrl Source #

Arguments

:: User

Пользователь, который сокращает ссылку

-> Text

Исходная ссылка

-> SqlPersistM Short

Результат сокращения

Сокращает заданный URL и записывает результат в БД. Для сокращения просто генерируется случайная строка из 8 латинских букв.

selectUrls Source #

Arguments

:: Maybe Text

Электронная почта, либо Nothing

-> SqlPersistM [(Short, Long)]

Список пар «сокращение - исходная ссылка»

В случае, если задана электронная почта, возвращает список ссылок, сокращённых этим пользователем. Если почта не задана, возвращает список всех ссылок. Результирующий список отсортирован по убыванию времени создания

getUrl Source #

Arguments

:: Short

Сокращённая ссылка

-> SqlPersistM (Maybe Text)

Соответствующая исходная ссылка, либо Nothing

Если сокращённой ссылке не соответствует ни одна исходная, возвращается Nothing