about summary refs log tree commit diff
path: root/src/Trips.hs
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-07-28T17·38+0100
committerWilliam Carroll <wpcarro@gmail.com>2020-07-28T17·38+0100
commit012296f156f59fe8581a01f2ddfd2a1067c09108 (patch)
treef95ef3a62db11060e658909836788230c8ede52a /src/Trips.hs
parentb3556648582c02fb5a9a10a6a4525e212397f945 (diff)
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.
Diffstat (limited to 'src/Trips.hs')
-rw-r--r--src/Trips.hs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/Trips.hs b/src/Trips.hs
new file mode 100644
index 000000000000..0b395f8bcfe8
--- /dev/null
+++ b/src/Trips.hs
@@ -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"