@@ -33,8 +33,10 @@ import Share.Notifications.Types
33
33
import Share.Postgres
34
34
import Share.Postgres qualified as PG
35
35
import Share.Postgres.Contributions.Queries qualified as ContributionQ
36
+ import Share.Postgres.Tickets.Queries qualified as TicketQ
36
37
import Share.Postgres.Users.Queries qualified as UsersQ
37
38
import Share.Prelude
39
+ import Share.Ticket
38
40
import Share.Utils.API (Cursor (.. ), CursorDirection (.. ))
39
41
import Share.Web.Share.DisplayInfo.Queries qualified as DisplayInfoQ
40
42
import Share.Web.Share.DisplayInfo.Types (UnifiedDisplayInfo )
@@ -315,17 +317,64 @@ getNotificationSubscription subscriberUserId subscriptionId = do
315
317
hydrateEventPayload :: forall m . (QueryA m ) => NotificationEventData -> m HydratedEventPayload
316
318
hydrateEventPayload = \ case
317
319
ProjectBranchUpdatedData
318
- (ProjectBranchData {projectId, branchId}) -> do
320
+ (ProjectData {projectId})
321
+ (BranchData {branchId}) -> do
319
322
HydratedProjectBranchUpdatedPayload <$> hydrateProjectBranchPayload projectId branchId
320
323
ProjectContributionCreatedData
321
- (ProjectContributionData {projectId, contributionId, fromBranchId, toBranchId, contributorUserId}) -> do
322
- HydratedProjectContributionCreatedPayload <$> hydrateContributionCreatedPayload contributionId projectId fromBranchId toBranchId contributorUserId
324
+ (ProjectData {projectId})
325
+ (ContributionData {contributionId, fromBranchId, toBranchId, contributorUserId}) -> do
326
+ HydratedProjectContributionCreatedPayload <$> hydrateContributionPayload contributionId projectId fromBranchId toBranchId contributorUserId
327
+ ProjectContributionUpdatedData
328
+ (ProjectData {projectId})
329
+ (ContributionData {contributionId, fromBranchId, toBranchId, contributorUserId}) -> do
330
+ HydratedProjectContributionUpdatedPayload <$> hydrateContributionPayload contributionId projectId fromBranchId toBranchId contributorUserId
331
+ ProjectContributionCommentData
332
+ (ProjectData {projectId})
333
+ (ContributionData {contributionId, fromBranchId, toBranchId, contributorUserId})
334
+ (CommentData {commentId, commentAuthorUserId}) -> do
335
+ HydratedProjectContributionCommentPayload
336
+ <$> hydrateContributionPayload contributionId projectId fromBranchId toBranchId contributorUserId
337
+ <*> hydrateCommentPayload commentId commentAuthorUserId
338
+ ProjectTicketCreatedData
339
+ (ProjectData {projectId})
340
+ (TicketData {ticketId, ticketAuthorUserId}) -> do
341
+ HydratedProjectTicketCreatedPayload <$> hydrateTicketPayload projectId ticketId ticketAuthorUserId
342
+ ProjectTicketUpdatedData
343
+ (ProjectData {projectId})
344
+ (TicketData {ticketId, ticketAuthorUserId}) -> do
345
+ HydratedProjectTicketUpdatedPayload <$> hydrateTicketPayload projectId ticketId ticketAuthorUserId
346
+ ProjectTicketCommentData
347
+ (ProjectData {projectId})
348
+ (TicketData {ticketId, ticketAuthorUserId})
349
+ (CommentData {commentId, commentAuthorUserId}) -> do
350
+ HydratedProjectTicketCommentPayload
351
+ <$> hydrateTicketPayload projectId ticketId ticketAuthorUserId
352
+ <*> hydrateCommentPayload commentId commentAuthorUserId
323
353
where
324
- hydrateContributionCreatedPayload :: ContributionId -> ProjectId -> BranchId -> BranchId -> UserId -> m ProjectContributionCreatedPayload
325
- hydrateContributionCreatedPayload contributionId projectId fromBranchId toBranchId authorUserId = do
354
+ hydrateTicketPayload :: ProjectId -> TicketId -> UserId -> m ProjectTicketPayload
355
+ hydrateTicketPayload projectId ticketId authorUserId = do
356
+ projectInfo <- hydrateProjectPayload projectId
357
+ ticketInfo <- hydrateTicketInfo ticketId authorUserId
358
+ pure $ ProjectTicketPayload {projectInfo, ticketInfo}
359
+ hydrateTicketInfo :: TicketId -> UserId -> m TicketPayload
360
+ hydrateTicketInfo ticketId authorUserId = do
361
+ author <- UsersQ. userDisplayInfoOf id authorUserId
362
+ ticket <- TicketQ. ticketById ticketId
363
+ pure $
364
+ TicketPayload
365
+ { ticketId,
366
+ ticketNumber = ticket. number,
367
+ ticketTitle = ticket. title,
368
+ ticketDescription = ticket. description,
369
+ ticketStatus = ticket. status,
370
+ ticketAuthor = author,
371
+ ticketCreatedAt = ticket. createdAt
372
+ }
373
+ hydrateContributionPayload :: ContributionId -> ProjectId -> BranchId -> BranchId -> UserId -> m ProjectContributionPayload
374
+ hydrateContributionPayload contributionId projectId fromBranchId toBranchId authorUserId = do
326
375
projectInfo <- hydrateProjectPayload projectId
327
376
contributionInfo <- hydrateContributionInfo contributionId fromBranchId toBranchId authorUserId
328
- pure $ ProjectContributionCreatedPayload {projectInfo, contributionInfo = contributionInfo projectInfo}
377
+ pure $ ProjectContributionPayload {projectInfo, contributionInfo = contributionInfo projectInfo}
329
378
hydrateContributionInfo :: ContributionId -> BranchId -> BranchId -> UserId -> m (ProjectPayload -> ContributionPayload )
330
379
hydrateContributionInfo contributionId fromBranchId toBranchId authorUserId = do
331
380
author <- UsersQ. userDisplayInfoOf id authorUserId
@@ -341,7 +390,8 @@ hydrateEventPayload = \case
341
390
contributionStatus = contribution. status,
342
391
contributionAuthor = author,
343
392
contributionSourceBranch = sourceBranch projectInfo,
344
- contributionTargetBranch = targetBranch projectInfo
393
+ contributionTargetBranch = targetBranch projectInfo,
394
+ contributionCreatedAt = contribution. createdAt
345
395
}
346
396
hydrateProjectBranchPayload projectId branchId = do
347
397
projectInfo <- hydrateProjectPayload projectId
@@ -395,3 +445,22 @@ hydrateEventPayload = \case
395
445
projectOwnerHandle,
396
446
projectOwnerUserId
397
447
}
448
+ hydrateCommentPayload :: CommentId -> UserId -> m CommentPayload
449
+ hydrateCommentPayload commentId commentAuthorUserId = do
450
+ let construct (commentId, commentContent, commentCreatedAt) commentAuthor =
451
+ CommentPayload
452
+ { commentId,
453
+ commentContent,
454
+ commentCreatedAt,
455
+ commentAuthor
456
+ }
457
+ construct
458
+ <$> ( queryExpect1Row
459
+ [sql |
460
+ SELECT cc.comment_id, cc.content, cc.created_at, cc.updated_at
461
+ FROM comment_content cc
462
+ JOIN users author ON cc.author_id = author.id
463
+ WHERE cc.comment_id = #{commentId}
464
+ |]
465
+ )
466
+ <*> (UsersQ. userDisplayInfoOf id commentAuthorUserId)
0 commit comments