ps-simple-rest-service/src/SimpleService/Persistence.purs

39 lines
1.3 KiB
Plaintext

module SimpleServer.Persistence
( insertUser
, findUser
, updateUser
, deleteUser
) where
import Prelude
import Control.Monad.Aff (Aff)
import Data.Array as Array
import Data.Maybe (Maybe)
import Database.PostgreSQL as PG
import SimpleServer.Types (User(..), UserID)
insertUserQuery :: String
insertUserQuery = "insert into users (id, name) values ($1, $2)"
findUserQuery :: String
findUserQuery = "select id, name from users where id = $1"
updateUserQuery :: String
updateUserQuery = "update users set name = $1 where id = $2"
deleteUserQuery :: String
deleteUserQuery = "delete from users where id = $1"
insertUser :: forall eff. PG.Connection -> User -> Aff (postgreSQL :: PG.POSTGRESQL | eff) Unit
insertUser conn user = PG.execute conn (PG.Query insertUserQuery) user
findUser :: forall eff. PG.Connection -> UserID -> Aff (postgreSQL :: PG.POSTGRESQL | eff) (Maybe User)
findUser conn userID = map Array.head $ PG.query conn (PG.Query findUserQuery) (PG.Row1 userID)
updateUser :: forall eff. PG.Connection -> User -> Aff (postgreSQL :: PG.POSTGRESQL | eff) Unit
updateUser conn (User {id, name}) = PG.execute conn (PG.Query updateUserQuery) (PG.Row2 name id)
deleteUser :: forall eff. PG.Connection -> UserID -> Aff (postgreSQL :: PG.POSTGRESQL | eff) Unit
deleteUser conn userID = PG.execute conn (PG.Query deleteUserQuery) (PG.Row1 userID)