aboutsummaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2016-01-28 12:09:41 +0000
committerGregor Kleen <gkleen@yggdrasil.li>2016-01-28 12:09:41 +0000
commitf236eb926bd554cb6494a0184d1070f264c4d03a (patch)
treec79deb2b5e99dca9019daad6a945d36f4ab24456 /server/src
parent36bc432fc0f8ae46c7ff0de162ee275d25f12e3a (diff)
downloadthermoprint-f236eb926bd554cb6494a0184d1070f264c4d03a.tar
thermoprint-f236eb926bd554cb6494a0184d1070f264c4d03a.tar.gz
thermoprint-f236eb926bd554cb6494a0184d1070f264c4d03a.tar.bz2
thermoprint-f236eb926bd554cb6494a0184d1070f264c4d03a.tar.xz
thermoprint-f236eb926bd554cb6494a0184d1070f264c4d03a.zip
Draft CRUD
Diffstat (limited to 'server/src')
-rw-r--r--server/src/Thermoprint/Server/API.hs74
-rw-r--r--server/src/Thermoprint/Server/Database.hs7
2 files changed, 42 insertions, 39 deletions
diff --git a/server/src/Thermoprint/Server/API.hs b/server/src/Thermoprint/Server/API.hs
index 3c8fefe..77f33e7 100644
--- a/server/src/Thermoprint/Server/API.hs
+++ b/server/src/Thermoprint/Server/API.hs
@@ -10,48 +10,54 @@ module Thermoprint.Server.API
10 , handlerNat 10 , handlerNat
11 ) where 11 ) where
12 12
13import Thermoprint.API hiding (JobId(..), DraftId(..)) 13import Thermoprint.API hiding (JobId(..), DraftId(..))
14import qualified Thermoprint.API as API (JobId(..), DraftId(..)) 14import qualified Thermoprint.API as API (JobId(..), DraftId(..))
15 15
16import Thermoprint.Server.Printer 16import Thermoprint.Server.Printer
17import Thermoprint.Server.Database 17import Thermoprint.Server.Database
18 18
19import Data.Set (Set) 19import Data.Set (Set)
20import qualified Data.Set as Set 20import qualified Data.Set as Set
21import Data.Sequence (Seq) 21import Data.Sequence (Seq)
22import qualified Data.Sequence as Seq 22import qualified Data.Sequence as Seq
23import Data.Map (Map) 23import Data.Map (Map)
24import qualified Data.Map as Map 24import qualified Data.Map as Map
25 25
26import qualified Data.Text as T 26import qualified Data.Text as T
27 27
28import Servant 28import Servant
29import Servant.Server 29import Servant.Server
30import Servant.Server.Internal.Enter 30import Servant.Server.Internal.Enter
31 31
32import Control.Monad.Logger 32import Control.Monad.Logger
33import Control.Monad.Reader 33import Control.Monad.Reader
34import Control.Monad.Trans.Resource 34import Control.Monad.Trans.Resource
35import Control.Monad.Trans.Either 35import Control.Monad.Trans.Either
36import Control.Monad.IO.Class 36import Control.Monad.IO.Class
37 37
38import Control.Concurrent.STM 38import Control.Concurrent.STM
39 39
40import Control.Monad ((<=<), liftM2) 40import Control.Monad ((<=<), liftM2)
41import Prelude hiding ((.), id, mapM) 41import Prelude hiding ((.), id, mapM)
42import Control.Category 42import Control.Category
43 43
44import Control.DeepSeq 44import Control.DeepSeq
45 45
46import Data.Foldable (toList) 46import Data.Foldable (toList)
47import Data.Traversable (mapM) 47import Data.Traversable (mapM)
48import Data.Bifunctor 48import Data.Bifunctor
49import Data.Monoid 49import Data.Monoid
50import Data.Maybe 50import Data.Maybe
51import Data.Function (on) 51import Data.Function (on)
52 52
53import Database.Persist 53import Database.Persist
54import Database.Persist.Sql 54import Database.Persist.Sql
55
56import Data.Conduit (Source, sourceToList, mapOutput)
57
58import Data.Acquire (with)
59
60import Control.Monad.Catch (handle, catch)
55 61
56type ProtoHandler = ReaderT HandlerInput (LoggingT (ResourceT IO)) 62type ProtoHandler = ReaderT HandlerInput (LoggingT (ResourceT IO))
57type Handler = EitherT ServantErr ProtoHandler 63type Handler = EitherT ServantErr ProtoHandler
@@ -156,19 +162,21 @@ abortJob jobId = do
156 when (not found) $ left err404 162 when (not found) $ left err404
157 163
158listDrafts :: Handler (Map API.DraftId (Maybe DraftTitle)) 164listDrafts :: Handler (Map API.DraftId (Maybe DraftTitle))
159listDrafts = return undefined 165listDrafts = asks sqlPool >>= runSqlPool (selectSourceRes [] []) >>= flip with toMap
166 where
167 toMap source = fmap Map.fromList . sourceToList $ (\(Entity key (Draft title _)) -> (castId key, title)) `mapOutput` source
160 168
161addDraft :: Maybe DraftTitle -> Printout -> Handler API.DraftId 169addDraft :: Maybe DraftTitle -> Printout -> Handler API.DraftId
162addDraft = return undefined 170addDraft title content = fmap castId . runSqlPool (insert $ Draft title content) =<< asks sqlPool
163 171
164updateDraft :: API.DraftId -> Maybe DraftTitle -> Printout -> Handler () 172updateDraft :: API.DraftId -> Maybe DraftTitle -> Printout -> Handler ()
165updateDraft = return undefined 173updateDraft draftId title content = (\(KeyNotFound _) -> left $ err404) `handle` (runSqlPool (update (castId draftId) [ DraftTitle =. title, DraftContent =. content ]) =<< asks sqlPool)
166 174
167getDraft :: API.DraftId -> Handler (Maybe DraftTitle, Printout) 175getDraft :: API.DraftId -> Handler (Maybe DraftTitle, Printout)
168getDraft = return undefined 176getDraft draftId = fmap (\(Draft title content) -> (title, content)) . maybe (left err404) return =<< runSqlPool (get $ castId draftId) =<< asks sqlPool
169 177
170deleteDraft :: API.DraftId -> Handler () 178deleteDraft :: API.DraftId -> Handler ()
171deleteDraft = return undefined 179deleteDraft draftId = runSqlPool (delete $ (castId draftId :: Key Draft)) =<< asks sqlPool
172 180
173printDraft :: API.DraftId -> Maybe PrinterId -> Handler API.JobId 181printDraft :: API.DraftId -> Maybe PrinterId -> Handler API.JobId
174printDraft = return undefined 182printDraft draftId printerId = (\(Draft _ content) -> queueJob printerId content) =<< maybe (left err404) return =<< runSqlPool (get $ castId draftId) =<< asks sqlPool
diff --git a/server/src/Thermoprint/Server/Database.hs b/server/src/Thermoprint/Server/Database.hs
index 5bd4512..7f21bf9 100644
--- a/server/src/Thermoprint/Server/Database.hs
+++ b/server/src/Thermoprint/Server/Database.hs
@@ -7,12 +7,7 @@
7{-# LANGUAGE StandaloneDeriving #-} 7{-# LANGUAGE StandaloneDeriving #-}
8{-# LANGUAGE FlexibleInstances #-} 8{-# LANGUAGE FlexibleInstances #-}
9 9
10module Thermoprint.Server.Database 10module Thermoprint.Server.Database where
11 ( Job(..), JobId
12 , Draft(..), DraftId
13 , Key(..)
14 , migrateAll
15 ) where
16 11
17import Control.DeepSeq 12import Control.DeepSeq
18 13