From 73bc5b3e49b54b22800574d9c412863799ff2fda Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Wed, 5 Jun 2019 00:38:31 +0200 Subject: [PATCH] try to fix leftjoin --- src/Aggreact/Comments/StoreService.hs | 23 ++++++++--------------- src/Aggreact/Comments/Types.hs | 6 +++--- src/Aggreact/Users/Types.hs | 17 +++++++++++++++++ 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/Aggreact/Comments/StoreService.hs b/src/Aggreact/Comments/StoreService.hs index e5c7c73..7cebed1 100644 --- a/src/Aggreact/Comments/StoreService.hs +++ b/src/Aggreact/Comments/StoreService.hs @@ -50,12 +50,12 @@ import qualified Aggreact.Users as User import Data.Time.Format () import Database.SQLite.Simple (Only (..), query, query_) -import Database.Store (DefaultMetas (..), Id (..), - Store (..)) - +import Database.Beam ((&&.),references_,(==?.)) import qualified Database.Beam as Beam import qualified Database.Beam.Sqlite as BeamSqlite +import Database.Store (DefaultMetas (..), Id (..), + Store (..)) import Database.Store.Backend.SQLite as SQL import qualified Database.Store.CRUD as CRUD import qualified Database.Store.Search as Search @@ -114,18 +114,11 @@ commentsView' conn db sl = comment <- Beam.all_ (_aggreactComments db) user <- Beam.leftJoin_ (Beam.all_ (_aggreactUsers db)) - (\u ->_userid comment `Beam.references_` u) - pure $ CommentView (bCommentToComment comment) (bUserToUser user) - -- let queryTxt = "SELECT * FROM " - -- <> stTablename commentStore <> " c" - -- <> " INNER JOIN " - -- <> stTablename userStore <> " u" - -- <> " ON c.userid = u.id" - -- <> " WHERE " - -- <> " slug = ? " - -- <> " ORDER BY created" - -- <> " DESC LIMIT 1000" - -- liftIO $ query (conn commentStore) (conv queryTxt) (Only sl) + (\u -> (Beam.maybe_ + (pure False) + (\uc -> uc `references_` u) + (_userid comment))) + pure $ CommentView (bCommentToCommentNoUser comment) (bUserToUser user) -- | A comment handler, handle all impure operations needed to Comments data CommentHandler = CommentHandler diff --git a/src/Aggreact/Comments/Types.hs b/src/Aggreact/Comments/Types.hs index b3062b6..a1381c0 100644 --- a/src/Aggreact/Comments/Types.hs +++ b/src/Aggreact/Comments/Types.hs @@ -136,15 +136,15 @@ data NewComment = } deriving (Generic,Typeable,Data,Eq,Ord,Show) -- ** Beam -bCommentToComment :: BComment -> Comment -bCommentToComment bc = +bCommentToCommentNoUser :: BComment -> Comment +bCommentToCommentNoUser bc = Entity (_id bc) (NewComment { parent = _parent bc , slug = _slug bc , content = _content bc - , userid = _userid bc + , userid = MUserId Nothing }) (DefaultMetas { updated = _updated bc diff --git a/src/Aggreact/Users/Types.hs b/src/Aggreact/Users/Types.hs index 93ac7b0..fa80239 100644 --- a/src/Aggreact/Users/Types.hs +++ b/src/Aggreact/Users/Types.hs @@ -79,6 +79,23 @@ instance Form.FromForm NewUser where -- ** Beam + + +bUserToUser :: BUser -> User +bUserToUser bc = + Entity + (_id bc) + NewUser + { nick = _nick bc + , email = _email bc + , password = _password bc + , role = _role bc + , trust = _trust bc + } + DefaultMetas + { updated = _updated bc + , created = _created bc } + data BUserT f = BUser { _nick :: Beam.Columnar f Nick