@@ -3,33 +3,44 @@ module Server.Asks.Database where
33import Droplet.Language
44import Prelude hiding (not )
55
6+ import Data.Maybe (Maybe (..))
67import Data.Maybe as DM
78import Data.Tuple.Nested ((/\))
9+ import Droplet.Driver.Internal.Query (Connection (..))
810import Server.Database as SD
911import Server.Database.Asks (_answer , _answerer , _asker , asks )
1012import Server.Database.Blocks (_blocked , _blocker , blocks )
13+ import Server.Database.Changelogs (_action , _changed , changelogs )
1114import Server.Database.DoppelgangerQuestions (_question )
15+ import Server.Database.Experiments (_description )
1216import Server.Database.Fields (_id , _recipient , _sender , l , s , u )
1317import Server.Database.Histories (histories )
1418import Server.Database.Types (Checked (..))
1519import Server.Database.Users (_asksVisibility , _temporary , users )
1620import Server.Effect (ServerEffect )
21+ import Shared.Changelog (ChangelogAction (..))
1722import Shared.User (ProfileVisibility (..))
1823
19- isAllowedToAsk :: Int -> Int -> ServerEffect Boolean
24+ isAllowedToAsk ∷ Int → Int → ServerEffect Boolean
2025isAllowedToAsk loggedUserId userId = do
21- found <- SD .single $ select _id # from (users # as u) # wher ( u ... _id .=. userId .&&.
22- ( _asksVisibility .=. Everyone
23- .||. _asksVisibility
24- .=. NoTemporaryUsers
25- .&&. not (exists $ select (1 # as l) # from (users # as s) # wher (s ... _id .=. loggedUserId .&&. _temporary .=. Checked true ))
26- .||. _asksVisibility
27- .=. Contacts
28- .&&. (exists $ select (1 # as l) # from (histories # as s) # wher (_sender .=. loggedUserId .&&. _recipient .=. userId .||. _recipient .=. loggedUserId .&&. _sender .=. userId))
29- ) .&&. not (exists $ select (1 # as u) # from blocks # wher (_blocker .=. loggedUserId .&&. _blocked .=. u ... _id .||. _blocker .=. u ... _id .&&. _blocked .=. loggedUserId))
30- .&&. not (exists $ select (1 # as u) # from asks # wher (_answerer .=. (u ... _id) .&&. _asker .=. loggedUserId .&&. isNull _answer))
31- )
32- pure $ DM .isJust found
26+ found ← SD .single $ select _id # from (users # as u) # wher
27+ ( u ... _id .=. userId
28+ .&&.
29+ ( _asksVisibility .=. Everyone
30+ .||. _asksVisibility
31+ .=. NoTemporaryUsers
32+ .&&. not (exists $ select (1 # as l) # from (users # as s) # wher (s ... _id .=. loggedUserId .&&. _temporary .=. Checked true ))
33+ .||. _asksVisibility
34+ .=. Contacts
35+ .&&. (exists $ select (1 # as l) # from (histories # as s) # wher (_sender .=. loggedUserId .&&. _recipient .=. userId .||. _recipient .=. loggedUserId .&&. _sender .=. userId))
36+ )
37+ .&&. not (exists $ select (1 # as u) # from blocks # wher (_blocker .=. loggedUserId .&&. _blocked .=. u ... _id .||. _blocker .=. u ... _id .&&. _blocked .=. loggedUserId))
38+ .&&. not (exists $ select (1 # as u) # from asks # wher (_answerer .=. (u ... _id) .&&. _asker .=. loggedUserId .&&. isNull _answer))
39+ )
40+ pure $ DM .isJust found
3341
34- saveAsk :: Int -> Int -> String -> ServerEffect Unit
35- saveAsk loggedUserId useId question = SD .execute $ insert # into asks (_asker /\ _answerer /\ _question) # values (loggedUserId /\ useId /\ question)
42+ saveAsk ∷ Connection → Int → Int → String → _ Unit
43+ saveAsk connection loggedUserId useId question = SD .executeWith connection $ insert # into asks (_asker /\ _answerer /\ _question) # values (loggedUserId /\ useId /\ question)
44+
45+ notifyAsk ∷ Connection → Int → _
46+ notifyAsk connection userId = SD .executeWith connection $ insert # into changelogs (_changed /\ _description /\ _action) # values (Just userId /\ " You have a new ask! Answer here" /\ Just OpenProfilePage )
0 commit comments