Move SQL out of API and into separate modules

Create modules for each Table in our SQL database. This cleans up the handler
bodies at the expense of introducing more files and indirection.
This commit is contained in:
William Carroll 2020-07-28 18:38:30 +01:00
parent b355664858
commit 012296f156
3 changed files with 80 additions and 25 deletions

27
src/Trips.hs Normal file
View file

@ -0,0 +1,27 @@
{-# LANGUAGE OverloadedStrings #-}
--------------------------------------------------------------------------------
module Trips where
--------------------------------------------------------------------------------
import Data.Function ((&))
import Database.SQLite.Simple
import qualified Types as T
--------------------------------------------------------------------------------
-- | Create a new `trip` in `dbFile`.
create :: FilePath -> T.Trip -> IO ()
create dbFile trip = withConnection dbFile $ \conn ->
execute conn "INSERT INTO Trips (username,destination,startDate,endDate,comment) VALUES (?,?,?,?,?)"
(trip & T.tripFields)
-- | Delete a trip from `dbFile` using its `tripPK` Primary Key.
delete :: FilePath -> T.TripPK -> IO ()
delete dbFile tripPK =
withConnection dbFile $ \conn -> do
execute conn "DELETE FROM Trips WHERE username = ? AND destination = ? and startDate = ?"
(tripPK & T.tripPKFields)
-- | Return a list of all of the trips in `dbFile`.
list :: FilePath -> IO [T.Trip]
list dbFile = withConnection dbFile $ \conn ->
query_ conn "SELECT * FROM Trips"