From 11fcf6229751eb266485cbba78d30aced1787d14 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Tue, 20 Aug 2019 00:17:23 +0100 Subject: chore(tazblog): Replace BlogDB with stubs for DNS-based storage Removes acid-state specific code and the former BlogDB module, in its stead the new BlogStorage module contains stubs for the functions that will be filled in with DNS-based storage. This code is unformatted and will not currently serve a working blog. --- services/tazblog/src/BlogStore.hs | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 services/tazblog/src/BlogStore.hs (limited to 'services/tazblog/src/BlogStore.hs') diff --git a/services/tazblog/src/BlogStore.hs b/services/tazblog/src/BlogStore.hs new file mode 100644 index 000000000000..5ed67ac93864 --- /dev/null +++ b/services/tazblog/src/BlogStore.hs @@ -0,0 +1,54 @@ +-- |This module implements fetching of individual blog entries from +-- DNS. Yes, you read that correctly. +-- +-- Each blog post is stored as a set of records in a designated DNS +-- zone. For the production blog, this zone is `blog.tazj.in.`. +-- +-- A top-level record at `_posts` contains a list of all published +-- post IDs. +-- +-- For each of these post IDs, there is a record at `_meta.$postID` +-- that contains the title and number of post chunks. +-- +-- For each post chunk, there is a record at `_$chunkID.$postID` that +-- contains a base64-encoded post fragment. +-- +-- This module implements logic for assembling a post out of these +-- fragments and caching it based on the TTL of its `_meta` record. + +module BlogStore where + +import Data.Text (Text) +import Locales (BlogLang(..)) +import Data.Time (UTCTime) +import Control.Monad.IO.Class (MonadIO) + +newtype EntryId = EntryId { unEntryId :: Integer } + deriving (Eq, Ord) + +instance Show EntryId where + show = show . unEntryId + +data Entry = Entry { + entryId :: EntryId, + lang :: BlogLang, + author :: Text, + title :: Text, + btext :: Text, + mtext :: Text, + edate :: UTCTime +} deriving (Eq, Ord, Show) + +data BlogCache + +type Offset = Integer +type Count = Integer + +newCache :: String -> IO BlogCache +newCache zone = undefined + +listEntries :: MonadIO m => BlogCache -> Offset -> Count -> m [Entry] +listEntries cache offset count = undefined + +getEntry :: MonadIO m => BlogCache -> EntryId -> m (Maybe Entry) +getEntry cache eId = undefined -- cgit 1.4.1