aboutsummaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2016-01-23 12:52:15 +0000
committerGregor Kleen <gkleen@yggdrasil.li>2016-01-23 12:52:15 +0000
commitb508a6bd35d28260f307acf8ffde8b7acf843a09 (patch)
treef3f18a35cf66fa897d93c874a6fc05672239d7ab /server/src
parenta8e274ee830bb6f72609295803d8ee37a36ea481 (diff)
downloadthermoprint-b508a6bd35d28260f307acf8ffde8b7acf843a09.tar
thermoprint-b508a6bd35d28260f307acf8ffde8b7acf843a09.tar.gz
thermoprint-b508a6bd35d28260f307acf8ffde8b7acf843a09.tar.bz2
thermoprint-b508a6bd35d28260f307acf8ffde8b7acf843a09.tar.xz
thermoprint-b508a6bd35d28260f307acf8ffde8b7acf843a09.zip
Db layout, persistent-inst. & printer framework
Diffstat (limited to 'server/src')
-rw-r--r--server/src/Thermoprint/Server/Database.hs5
-rw-r--r--server/src/Thermoprint/Server/Database/Instances.hs33
-rw-r--r--server/src/Thermoprint/Server/Printer.hs29
3 files changed, 66 insertions, 1 deletions
diff --git a/server/src/Thermoprint/Server/Database.hs b/server/src/Thermoprint/Server/Database.hs
index 61179e6..65bfc37 100644
--- a/server/src/Thermoprint/Server/Database.hs
+++ b/server/src/Thermoprint/Server/Database.hs
@@ -11,13 +11,16 @@ module Thermoprint.Server.Database
11 , migrateAll 11 , migrateAll
12 ) where 12 ) where
13 13
14import Thermoprint.API (Printout, DraftTitle) 14import Thermoprint.API (Printout, DraftTitle, JobStatus)
15 15
16import Database.Persist.TH 16import Database.Persist.TH
17 17
18import Thermoprint.Server.Database.Instances
19
18share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase| 20share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
19Job 21Job
20 content Printout 22 content Printout
23 status JobStatus
21Draft 24Draft
22 title DraftTitle Maybe 25 title DraftTitle Maybe
23 content Printout 26 content Printout
diff --git a/server/src/Thermoprint/Server/Database/Instances.hs b/server/src/Thermoprint/Server/Database/Instances.hs
new file mode 100644
index 0000000..f5c22fd
--- /dev/null
+++ b/server/src/Thermoprint/Server/Database/Instances.hs
@@ -0,0 +1,33 @@
1{-# LANGUAGE TemplateHaskell #-}
2{-# LANGUAGE TypeSynonymInstances #-}
3{-# LANGUAGE FlexibleInstances #-}
4
5module Thermoprint.Server.Database.Instances where
6
7import Thermoprint.API (Printout, JobStatus, PrintingError)
8
9import Database.Persist (PersistField(..))
10import Database.Persist.Sql (PersistFieldSql(..))
11import Database.Persist.TH
12
13import Control.Monad ((<=<))
14import Data.Bifunctor
15
16import qualified Data.Aeson as JSON (encode, eitherDecodeStrict')
17
18import Data.ByteString (ByteString)
19import qualified Data.ByteString.Lazy as LBS (toStrict)
20import qualified Data.Text as T (pack)
21
22import Data.Proxy
23
24-- | Instead of deriving an instance using 'derivePersistField', which would use 'show' and 'read', we write our own by hand in order to use json
25instance PersistField Printout where
26 toPersistValue = toPersistValue . LBS.toStrict . JSON.encode
27 fromPersistValue = first T.pack . JSON.eitherDecodeStrict' <=< fromPersistValue
28
29instance PersistFieldSql Printout where
30 sqlType _ = sqlType (Proxy :: Proxy ByteString)
31
32derivePersistField "PrintingError"
33derivePersistField "JobStatus"
diff --git a/server/src/Thermoprint/Server/Printer.hs b/server/src/Thermoprint/Server/Printer.hs
new file mode 100644
index 0000000..e66afff
--- /dev/null
+++ b/server/src/Thermoprint/Server/Printer.hs
@@ -0,0 +1,29 @@
1{-# LANGUAGE RankNTypes #-}
2
3module Thermoprint.Server.Printer
4 ( Printer
5 ) where
6
7import Thermoprint.API (PrintingError(..), Printout)
8
9import Thermoprint.Server.Database
10
11import Database.Persist
12import Database.Persist.Sql
13
14import Data.Sequence (Seq, ViewL(..))
15import qualified Data.Sequence as Seq
16import Data.Map (Map)
17import qualified Data.Map as Map
18
19import Control.Monad.IO.Class (MonadIO)
20
21import Control.Concurrent.STM
22
23data Printer = Printer
24 { print :: forall m. (MonadIO m) => Printout -> m (Maybe PrintingError)
25 , queue :: TVar (Seq JobId)
26 }
27
28runPrinter :: Printer -> IO ()
29runPrinter = undefined