aboutsummaryrefslogtreecommitdiff
path: root/server/src/Thermoprint/Server.hs
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2016-01-21 08:44:04 +0000
committerGregor Kleen <gkleen@yggdrasil.li>2016-01-21 08:44:04 +0000
commitc51e334bc5a537300d9421f43bd355850e2013b4 (patch)
treea0385ef4a26b4a8be7d31efb4b7d2056e9d247df /server/src/Thermoprint/Server.hs
parent79a01c5fe636dad60338e4847be8b3cbf3716192 (diff)
downloadthermoprint-c51e334bc5a537300d9421f43bd355850e2013b4.tar
thermoprint-c51e334bc5a537300d9421f43bd355850e2013b4.tar.gz
thermoprint-c51e334bc5a537300d9421f43bd355850e2013b4.tar.bz2
thermoprint-c51e334bc5a537300d9421f43bd355850e2013b4.tar.xz
thermoprint-c51e334bc5a537300d9421f43bd355850e2013b4.zip
Fixed Nats & new API
Diffstat (limited to 'server/src/Thermoprint/Server.hs')
-rw-r--r--server/src/Thermoprint/Server.hs95
1 files changed, 37 insertions, 58 deletions
diff --git a/server/src/Thermoprint/Server.hs b/server/src/Thermoprint/Server.hs
index 4018d17..eff6c3a 100644
--- a/server/src/Thermoprint/Server.hs
+++ b/server/src/Thermoprint/Server.hs
@@ -41,6 +41,8 @@ import Data.Set (Set)
41import qualified Data.Set as Set 41import qualified Data.Set as Set
42import Data.Sequence (Seq) 42import Data.Sequence (Seq)
43import qualified Data.Sequence as Seq 43import qualified Data.Sequence as Seq
44import Data.Sequence (Map)
45import qualified Data.Sequence as Map
44 46
45import qualified Network.Wai.Handler.Warp as Warp 47import qualified Network.Wai.Handler.Warp as Warp
46import Network.Wai (Application) 48import Network.Wai (Application)
@@ -62,11 +64,16 @@ instance Default Config where
62 , warpSettings = Warp.defaultSettings 64 , warpSettings = Warp.defaultSettings
63 } 65 }
64 66
67data HandlerInput = HandlerInput { sqlPool :: ConnectionPool
68 }
69
65 70
66share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase| 71share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
67Job 72Job
73 printer PrinterId
68 content Printout 74 content Printout
69Draft 75Draft
76 title DraftTitle Maybe
70 content Printout 77 content Printout
71|] 78|]
72 79
@@ -90,93 +97,65 @@ thermoprintServer io = Dyre.wrapMain $ Dyre.defaultParams
90 | otherwise = return cfg 97 | otherwise = return cfg
91 98
92 realMain (Config{..}) = enter io $ do 99 realMain (Config{..}) = enter io $ do
93 runSqlPool' (runMigrationSilent migrateAll) >>= mapM_ $(logWarn) 100 sqlPool <- ask
94 liftIO . Warp.runSettings warpSettings . serve thermoprintAPI $ enter (hoistNat io) thermoprintServer' 101 runSqlPool (runMigrationSilent migrateAll) sqlPool >>= mapM_ $(logWarn)
95 102 let
96 103 handlerInput = HandlerInput
97runSqlPool' :: ( MonadBaseControl IO m 104 { sqlPool = sqlPool
98 , MonadReader ConnectionPool m 105 }
99 ) => SqlPersistT m a -> m a 106 io' :: ReaderT HandlerInput IO :~> IO
100runSqlPool' a = runSqlPool a =<< ask 107 io' = runReaderTNat handlerInput
108 liftIO . Warp.runSettings warpSettings . serve thermoprintAPI $ enter (hoistNat io') thermoprintServer'
109
110type Handler = EitherT ServantErr (ReaderT HandlerInput IO)
101 111
102(<||>) :: Monad m => m a -> m b -> m (a :<|> b) 112(<||>) :: Monad m => m a -> m b -> m (a :<|> b)
103(<||>) = liftM2 (:<|>) 113(<||>) = liftM2 (:<|>)
104infixr 9 <||> 114infixr 9 <||>
105 115
106 116thermoprintServer' :: ServerT ThermoprintAPI Handler
107thermoprintServer' :: ( Monad m
108 ) => ServerT ThermoprintAPI (EitherT ServantErr m)
109thermoprintServer' = listPrinters 117thermoprintServer' = listPrinters
110 :<|> queueJob <||> printerStatus 118 :<|> listJobs <||> queueJob
111 :<|> listJobs 119 :<|> getJob <||> jobStatus <||> deleteJob
112 :<|> getJob <||> jobStatus <||> getJobPrinter <||> deleteJob
113 :<|> (listDrafts :<|> addDraft) 120 :<|> (listDrafts :<|> addDraft)
114 :<|> updateDraft <||> getDraft <||> deleteDraft 121 :<|> updateDraft <||> getDraft <||> deleteDraft <||> printDraft
115 122
116 123
117listPrinters :: ( Monad m 124listPrinters :: Handler (Set PrinterId)
118 ) => EitherT ServantErr m (Set PrinterId)
119listPrinters = return Set.empty 125listPrinters = return Set.empty
120 126
121queueJob :: ( Monad m 127queueJob :: Maybe PrinterId -> Printout -> Handler API.JobId
122 ) => PrinterId
123 -> Printout
124 -> EitherT ServantErr m API.JobId
125queueJob = return undefined 128queueJob = return undefined
126 129
127printerStatus :: ( Monad m 130printerStatus :: PrinterId -> Handler PrinterStatus
128 ) => PrinterId
129 -> EitherT ServantErr m PrinterStatus
130printerStatus = return undefined 131printerStatus = return undefined
131 132
132listJobs :: ( Monad m 133listJobs :: Maybe PrinterId -> Maybe API.JobId -> Maybe API.JobId -> Handler (Seq (API.JobId, JobStatus))
133 ) => Maybe PrinterId
134 -> Maybe API.JobId
135 -> Maybe API.JobId
136 -> EitherT ServantErr m (Seq API.JobId)
137listJobs = return undefined 134listJobs = return undefined
138 135
139getJob :: ( Monad m 136getJob :: API.JobId -> Handler Printout
140 ) => API.JobId
141 -> EitherT ServantErr m Printout
142getJob = return undefined 137getJob = return undefined
143 138
144jobStatus :: ( Monad m 139jobStatus :: API.JobId -> Handler JobStatus
145 ) => API.JobId
146 -> EitherT ServantErr m JobStatus
147jobStatus = return undefined 140jobStatus = return undefined
148 141
149getJobPrinter :: ( Monad m 142deleteJob :: API.JobId -> Handler ()
150 ) => API.JobId
151 -> EitherT ServantErr m PrinterId
152getJobPrinter = return undefined
153
154deleteJob :: ( Monad m
155 ) => API.JobId
156 -> EitherT ServantErr m ()
157deleteJob = return undefined 143deleteJob = return undefined
158 144
159listDrafts :: ( Monad m 145listDrafts :: Handler (Map API.DraftId (Maybe DraftTitle))
160 ) => EitherT ServantErr m (Set API.DraftId)
161listDrafts = return undefined 146listDrafts = return undefined
162 147
163addDraft :: ( Monad m 148addDraft :: Maybe DraftTitle -> Printout -> Handler API.DraftId
164 ) => Printout
165 -> EitherT ServantErr m API.DraftId
166addDraft = return undefined 149addDraft = return undefined
167 150
168updateDraft :: ( Monad m 151updateDraft :: API.DraftId -> Maybe DraftTitle -> Printout -> Handler ()
169 ) => API.DraftId
170 -> Printout
171 -> EitherT ServantErr m ()
172updateDraft = return undefined 152updateDraft = return undefined
173 153
174getDraft :: ( Monad m 154getDraft :: API.DraftId -> Handler (Maybe DraftTitle, Printout)
175 ) => API.DraftId
176 -> EitherT ServantErr m Printout
177getDraft = return undefined 155getDraft = return undefined
178 156
179deleteDraft :: ( Monad m 157deleteDraft :: API.DraftId -> Handler ()
180 ) => API.DraftId
181 -> EitherT ServantErr m ()
182deleteDraft = return undefined 158deleteDraft = return undefined
159
160printDraft :: API.DraftId -> Maybe PrinterId -> Handler API.JobId
161printDraft = return undefined