Skip to content

Commit d4b78eb

Browse files
committed
Add asks notifications
1 parent 0d24b20 commit d4b78eb

File tree

5 files changed

+43
-24
lines changed

5 files changed

+43
-24
lines changed

src/Client/Im/Changelog.purs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ performChangelogAction action value model = model /\ effects
3232
Nothing[]
3333
Just OpenBackerPage → [ pure <<< Just $ SpecialRequest <<< ToggleModal $ Screen ShowBacker ]
3434
Just OpenExperimentsPage → [ pure <<< Just $ SpecialRequest <<< ToggleModal $ Screen ShowExperiments ]
35+
Just OpenProfilePage → [ pure <<< Just $ SpecialRequest <<< ToggleModal $ Screen ShowProfile ]
3536
Just SendDoppelgangerMessage → [ pure <<< Just $ MessageFromExperiment (SU.fromJust value) SOD.message ]
3637

3738
toggleChangelog ImModel NoMessages

src/Client/Im/Main.purs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ import Shared.Routes (routes)
7373
import Shared.Settings.Types (PrivacySettings)
7474
import Shared.Unsafe as SU
7575
import Shared.User as SUR
76-
import Test.Client.Model (model)
76+
7777
import Type.Proxy (Proxy(..))
7878
import Web.DOM.Element as WDE
7979
import Web.DOM.Node as WDN

src/Server/Asks/Action.purs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import Data.String (Pattern(..))
1010
import Data.String as DS
1111
import Run.Except as RE
1212
import Server.Asks.Database as SAD
13+
import Server.Database as SD
1314
import Server.Database.Privileges as SDP
1415
import Server.Database.Privileges as SPD
1516
import Server.Effect (ServerEffect)
@@ -26,12 +27,14 @@ import Shared.Resource (Media(..), ResourceType(..))
2627
import Shared.Resource as SP
2728
import Shared.ResponseError (ResponseError(..))
2829

29-
sendAsk Int Int -> String ServerEffect Boolean
30+
sendAsk Int Int String ServerEffect Boolean
3031
sendAsk loggedUserId userId question = do
3132
let trimmed = DS.trim question
32-
when (DS.length trimmed > maxAskCharacters) <<< RE.throw $ BadRequest { reason : "question too long" }
33-
canSendAsk <- SPD.hasPrivilege loggedUserId SendAsks
34-
unless canSendAsk <<< RE.throw $ BadRequest { reason : "not enough karma" }
33+
when (DS.length trimmed > maxAskCharacters) <<< RE.throw $ BadRequest { reason: "question too long" }
34+
canSendAsk SPD.hasPrivilege loggedUserId SendAsks
35+
unless canSendAsk <<< RE.throw $ BadRequest { reason: "not enough karma" }
3536
allowedToAsk ← SAD.isAllowedToAsk loggedUserId userId
36-
when allowedToAsk $ SAD.saveAsk loggedUserId userId question
37+
when allowedToAsk <<< SD.withTransaction $ \connection -> do
38+
SAD.saveAsk connection loggedUserId userId question
39+
SAD.notifyAsk connection userId
3740
pure allowedToAsk

src/Server/Asks/Database.purs

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,44 @@ module Server.Asks.Database where
33
import Droplet.Language
44
import Prelude hiding (not)
55

6+
import Data.Maybe (Maybe(..))
67
import Data.Maybe as DM
78
import Data.Tuple.Nested ((/\))
9+
import Droplet.Driver.Internal.Query (Connection(..))
810
import Server.Database as SD
911
import Server.Database.Asks (_answer, _answerer, _asker, asks)
1012
import Server.Database.Blocks (_blocked, _blocker, blocks)
13+
import Server.Database.Changelogs (_action, _changed, changelogs)
1114
import Server.Database.DoppelgangerQuestions (_question)
15+
import Server.Database.Experiments (_description)
1216
import Server.Database.Fields (_id, _recipient, _sender, l, s, u)
1317
import Server.Database.Histories (histories)
1418
import Server.Database.Types (Checked(..))
1519
import Server.Database.Users (_asksVisibility, _temporary, users)
1620
import Server.Effect (ServerEffect)
21+
import Shared.Changelog (ChangelogAction(..))
1722
import Shared.User (ProfileVisibility(..))
1823

19-
isAllowedToAsk :: Int -> Int -> ServerEffect Boolean
24+
isAllowedToAsk Int Int ServerEffect Boolean
2025
isAllowedToAsk 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)

src/Shared/Changelog.purs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ type Changelog =
2424
, read Boolean
2525
}
2626

27-
data ChangelogAction = OpenBackerPage | SendDoppelgangerMessage | OpenExperimentsPage
27+
data ChangelogAction = OpenBackerPage | SendDoppelgangerMessage | OpenExperimentsPage | OpenProfilePage
2828

2929
derive instance Generic ChangelogAction _
3030

@@ -42,7 +42,7 @@ instance ToValue ChangelogAction where
4242

4343
instance Bounded ChangelogAction where
4444
bottom = OpenBackerPage
45-
top = OpenExperimentsPage
45+
top = OpenProfilePage
4646

4747
instance BoundedEnum ChangelogAction where
4848
cardinality = Cardinality 1
@@ -51,23 +51,27 @@ instance BoundedEnum ChangelogAction where
5151
OpenBackerPage0
5252
SendDoppelgangerMessage1
5353
OpenExperimentsPage2
54+
OpenProfilePage -> 3
5455

5556
toEnum = case _ of
5657
0Just OpenBackerPage
5758
1Just SendDoppelgangerMessage
5859
2Just OpenExperimentsPage
60+
3 -> Just OpenProfilePage
5961
_ → Nothing
6062

6163
instance Enum ChangelogAction where
6264
succ = case _ of
6365
OpenBackerPageJust SendDoppelgangerMessage
6466
SendDoppelgangerMessageJust OpenExperimentsPage
65-
OpenExperimentsPageNothing
67+
OpenExperimentsPageJust OpenProfilePage
68+
OpenProfilePage -> Nothing
6669

6770
pred = case _ of
6871
OpenBackerPageNothing
6972
SendDoppelgangerMessageJust OpenBackerPage
7073
OpenExperimentsPageJust SendDoppelgangerMessage
74+
OpenProfilePage -> Just OpenExperimentsPage
7175

7276
derive instance Eq ChangelogAction
7377

0 commit comments

Comments
 (0)