packages feed

wikimusic-api-1.2.0.8: src/WikiMusic/Sqlite/UserQuery.hs

{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE NoFieldSelectors #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module WikiMusic.Sqlite.UserQuery () where

import Database.Beam
import Database.Beam.Sqlite
import Optics
import Relude
import WikiMusic.Beam.Database
import WikiMusic.Free.UserQuery
import WikiMusic.Protolude

instance Exec UserQuery where
  execAlgebra (DoesTokenMatchByEmail env email token next) = next =<< doesTokenMatchByEmail' env email token

doesTokenMatchByEmail' :: (MonadIO m) => Env -> UserEmail -> UserToken -> m (Either UserQueryError Bool)
doesTokenMatchByEmail' env email token = do
  maybeUser <- liftIO
    . runBeamSqliteDebug putStrLn (env ^. #conn)
    . runSelectReturningFirst
    . select
    $ do
      filter_
        ( \s ->
            ((s ^. #emailAddress) ==. val_ (email ^. #value))
              &&. ((s ^. #passwordResetToken) ==. val_ (Just (token ^. #value)))
        )
        $ all_ ((^. #users) wikiMusicDatabase)

  pure . Right $ isJust maybeUser

-- getUsers' :: (MonadIO m) => Env -> m (Either UserQueryError [User])
-- getUsers' env = do
--   users <- liftIO
--     . runBeamSqliteDebug putStrLn (env ^. #conn)
--     . runSelectReturningList
--     . select
--     $ do
--       u <-
--         orderBy_ (asc_ . (^. #displayName))
--           $ filter_
--             (\s -> (s ^. #authToken) /=. val_ (Just ""))
--           $ all_ ((^. #users) wikiMusicDatabase)

--       r <-
--         oneToMany_ ((^. #userRoles) wikiMusicDatabase) (UserId . (^. #identifier)) u

--       pure (u, r)

--   -- let uu = (uncurry mkUserM)
--   -- pure . Right $ map uu users
--   -- let rr = groupBy ((==) `on` fst) $ users
--   -- let noneRR = mapMaybe nonEmpty rr
--   -- let noneRRR = map (\x -> do
--   --                       x
--   --                   ) noneRR
--   -- let roleMap = map (\l -> (fst . head $ l, map snd l)) . catMaybes . map (\(u, r) -> (nonEmpty u, r)) $ rr
--   pure . Right $ []