Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
1e6ab84
feat: add co-proposer invite handling and related events to logging
jekabs-karklins Jun 2, 2025
0449b66
Merge branch 'develop' into SWAP-4732-add-proposal_updated-event-when…
jekabs-karklins Jun 2, 2025
fbcab2e
feat: update event handling for co-proposer invitations and logging
jekabs-karklins Jun 4, 2025
d8834bc
feat: rename proposal invite events to co-proposer claim events
jekabs-karklins Jun 4, 2025
d48269b
feat: add Participants component for managing user invitations in pro…
jekabs-karklins Jun 4, 2025
85755b8
fix: show chips
jekabs-karklins Jun 4, 2025
de7156f
fix: update dialog title in InviteUser component
jekabs-karklins Jun 5, 2025
fe29449
feat: add VisitRegistrationClaim model and data sources for managing …
jekabs-karklins Jun 9, 2025
d12fe0a
Adding resolver
jekabs-karklins Jun 9, 2025
eed9339
feat: enhance visit management with registration claims and invites
jekabs-karklins Jun 9, 2025
0e6e934
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
jekabs-karklins Jun 10, 2025
1c11cc6
feat: add VisitAuthorization and VisitRegistrationClaimDataSource map…
jekabs-karklins Jun 12, 2025
05562bd
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
jekabs-karklins Jun 12, 2025
98e351a
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
jekabs-karklins Jun 12, 2025
4b59a32
Merge branch 'SWAP-4732-add-proposal_updated-event-when-user-accepts-…
jekabs-karklins Jun 12, 2025
219710d
feat: implement visit registration claim acceptance event and related…
jekabs-karklins Jun 16, 2025
5044a37
fix: update findByInviteId method to return an array of VisitRegistra…
jekabs-karklins Jun 16, 2025
0d29afb
fix: update import path for VisitRegistrationClaim model
jekabs-karklins Jun 16, 2025
e9227a2
fix: update button label and title for joining proposal
jekabs-karklins Jun 16, 2025
53283f1
feat: add co-proposer claim events and logging to invite mutations
jekabs-karklins Jun 16, 2025
8de732a
refactor: remove legacy email invite handling and improve template ID…
jekabs-karklins Jun 16, 2025
21db222
revert
jekabs-karklins Jun 16, 2025
25df8b2
refactor: rename mock template ID stubs for clarity in checkInviteRem…
jekabs-karklins Jun 16, 2025
5daa231
fix: update invite property to array in ProposalCoProposerClaimSentEvent
jekabs-karklins Jun 23, 2025
67977d5
feat: add visit_registration_claims table to store visit registration…
jekabs-karklins Jun 23, 2025
e744b90
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
jekabs-karklins Jun 23, 2025
80427f2
feat: update visit_registration_claims table structure and add confli…
jekabs-karklins Jun 23, 2025
e9669da
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
jekabs-karklins Jun 24, 2025
7123ffe
fix test
jekabs-karklins Jun 24, 2025
8de30d5
feat: enhance invite mutations to include email handling and logging
jekabs-karklins Jun 24, 2025
3a456f6
feat: update invite handling and logging for co-proposer and visit re…
jekabs-karklins Jun 24, 2025
4d7ad7a
fix: update dummy review values so after enabling evenbus the test pa…
jekabs-karklins Jun 25, 2025
3e9443d
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
jekabs-karklins Jun 25, 2025
04266e0
fix: update event descriptions for co-proposer and visit registration…
jekabs-karklins Jun 25, 2025
d25fa05
Merge branch 'SWAP-4726-new-user-selection-dialogue-not-working-with-…
jekabs-karklins Jun 25, 2025
e48dea7
feat: add email template IDs for co-proposer and visitor invite emails
jekabs-karklins Jun 25, 2025
d4b83ec
feat: enhance email template IDs for co-proposer and visit registrati…
jekabs-karklins Jun 25, 2025
7b32c5d
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
jekabs-karklins Jul 1, 2025
16cf3bc
refactor: remove unused file
jekabs-karklins Jul 1, 2025
515905d
refactor: adjust eliEmailHandler to only have neccesary changes
jekabs-karklins Jul 1, 2025
ee04b77
feat: add template_id to invites and update related email handling logic
jekabs-karklins Jul 2, 2025
4b30486
feat: add tests for co-proposer invite email and logging functionalit…
jekabs-karklins Jul 2, 2025
c48d509
feat: add tests for essEmailHandler and getTemplateIdForInvite functi…
jekabs-karklins Jul 2, 2025
08f872b
refactor how email template id is obtained
jekabs-karklins Jul 2, 2025
b2eff61
fix test
jekabs-karklins Jul 2, 2025
4ea30c4
Merge branch 'enable-event-bus-in-unit-testing' into refactor-email-t…
jekabs-karklins Jul 2, 2025
980bcd2
Merge branch 'refactor-email-template-id-obtaining' into SWAP-4726-ne…
jekabs-karklins Jul 2, 2025
0fe4edc
refactor: rename template to templateId in InviteDataSource classes
jekabs-karklins Jul 2, 2025
6409ce4
refactor: remove findByVisitId method from VisitRegistrationClaimData…
jekabs-karklins Jul 2, 2025
59ec9e6
refactor: improve initialization of invites in InviteDataSourceMock
jekabs-karklins Jul 2, 2025
b0992d1
Merge branch 'refactor-email-template-id-obtaining' into SWAP-4726-ne…
jekabs-karklins Jul 2, 2025
06a57f1
refactor: improve initialization of invites in InviteDataSource
jekabs-karklins Jul 2, 2025
e7964a3
Merge branch 'refactor-email-template-id-obtaining' into SWAP-4726-ne…
jekabs-karklins Jul 2, 2025
b25cdda
feat: update logger configuration to use ConsoleLogger with colorization
jekabs-karklins Jul 2, 2025
0964cf3
Merge branch 'enable-event-bus-in-unit-testing' into refactor-email-t…
jekabs-karklins Jul 2, 2025
d5d254d
test: add validation for templateId in co-proposer invite
jekabs-karklins Jul 2, 2025
1c11808
Merge branch 'develop' into enable-event-bus-in-unit-testing
jekabs-karklins Jul 2, 2025
a4a6a5f
Merge branch 'enable-event-bus-in-unit-testing' into refactor-email-t…
jekabs-karklins Jul 2, 2025
737e8a3
Merge branch 'refactor-email-template-id-obtaining' into SWAP-4726-ne…
jekabs-karklins Jul 2, 2025
8a3947e
Merge branch 'refactor-email-template-id-obtaining' into SWAP-4726-ne…
jekabs-karklins Jul 2, 2025
66c010c
feat: enhance email handling and logging for co-proposer invites and …
jekabs-karklins Jul 3, 2025
1553cef
Merge branch 'enable-event-bus-in-unit-testing' into refactor-email-t…
jekabs-karklins Jul 2, 2025
50a592f
Merge branch 'refactor-email-template-id-obtaining' of github.com:Use…
jekabs-karklins Jul 3, 2025
7179beb
Merge branch 'refactor-email-template-id-obtaining' into refactor-inv…
jekabs-karklins Jul 3, 2025
31cb2f8
Merge branch 'refactor-email-template-id-obtaining' of github.com:Use…
jekabs-karklins Jul 3, 2025
e55b11e
Merge branch 'refactor-email-template-id-obtaining' of github.com:Use…
jekabs-karklins Jul 3, 2025
376200b
merged
jekabs-karklins Jul 3, 2025
32157f3
Merge branch 'refactor-email-template-id-obtaining' into refactor-inv…
jekabs-karklins Jul 3, 2025
752b19b
Merge branch 'refactor-invite-event-handling' into SWAP-4726-new-user…
jekabs-karklins Jul 3, 2025
a659438
Merge branch 'refactor-email-template-id-obtaining' into refactor-inv…
jekabs-karklins Jul 3, 2025
06e2172
Merge branch 'refactor-invite-event-handling' of github.com:UserOffic…
jekabs-karklins Jul 3, 2025
b948bef
Merge branch 'refactor-invite-event-handling' of github.com:UserOffic…
jekabs-karklins Jul 3, 2025
a85baec
Merge branch 'refactor-invite-event-handling' of github.com:UserOffic…
jekabs-karklins Jul 3, 2025
ca82b54
Merge branch 'refactor-invite-event-handling' into SWAP-4726-new-user…
jekabs-karklins Jul 3, 2025
307ed17
Add email template IDs and new event interfaces for visit registratio…
jekabs-karklins Jul 3, 2025
ff7bcad
Remove deprecated email invite events from Event enum
jekabs-karklins Jul 3, 2025
923e4d2
Merge branch 'refactor-invite-event-handling' into SWAP-4726-new-user…
jekabs-karklins Jul 3, 2025
a7cd6e3
Update log message for co-proposer invite acceptance
jekabs-karklins Jul 3, 2025
4d4c721
Refactor co-proposer invite handling to use proposalPKey instead of p…
jekabs-karklins Jul 3, 2025
5963cc6
Merge branch 'refactor-invite-event-handling' into SWAP-4726-new-user…
jekabs-karklins Jul 3, 2025
c76322c
Update invite email descriptions to include user ID of the sender
jekabs-karklins Jul 3, 2025
e278df7
Enhance invite acceptance test to verify log entries and add data att…
jekabs-karklins Jul 3, 2025
d8b50cd
fix: remove leftover comment
jekabs-karklins Jul 4, 2025
50d1d0e
Merge branch 'develop' into enable-event-bus-in-unit-testing
jekabs-karklins Jul 4, 2025
7f4e3fa
Merge branch 'enable-event-bus-in-unit-testing' into refactor-email-t…
jekabs-karklins Jul 4, 2025
2b96a41
Merge branch 'refactor-email-template-id-obtaining' into refactor-inv…
jekabs-karklins Jul 4, 2025
23b55f5
Merge branch 'refactor-invite-event-handling' into SWAP-4726-new-user…
jekabs-karklins Jul 4, 2025
1c0a72f
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
Sep 12, 2025
53e42a4
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
jekabs-karklins Sep 16, 2025
fc69433
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
Sep 18, 2025
1b8dbec
refactor: remove unnecessary blank line in InviteDataSourceMock const…
Sep 18, 2025
342807c
refactor: rename claim processing methods for clarity and consistency
Sep 19, 2025
5dbe4a3
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
jekabs-karklins Sep 19, 2025
0ec64f0
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
Sep 26, 2025
9bdd4c5
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
jekabs-karklins Sep 30, 2025
a9687ec
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
jekabs-karklins Oct 3, 2025
c47f781
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
yoganandaness Oct 8, 2025
09c0519
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
jekabs-karklins Oct 12, 2025
5c2be03
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
yoganandaness Oct 14, 2025
db5cddc
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
yoganandaness Oct 15, 2025
9ef4558
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
yoganandaness Oct 15, 2025
884fcad
fixed e2e test clicking first proposal in the list
yoganandaness Oct 15, 2025
bdc17a0
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
yoganandaness Oct 15, 2025
ab14ff5
Merge branch 'develop' into SWAP-4726-new-user-selection-dialogue-not…
yoganandaness Oct 16, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions apps/backend/db_patches/0183_AddVisitRegistrationClaim.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
DO
$$
BEGIN
IF register_patch(
'AddVisitRegistrationClaim.sql',
'Jekabs Karklins',
'Adding table to store visit registration claims',
'2025-06-04'
) THEN
BEGIN
-- Create the visit_registration_claims table
CREATE TABLE IF NOT EXISTS visit_registration_claims (
invite_id INT NOT NULL,
visit_id INT NOT NULL,
FOREIGN KEY (invite_id) REFERENCES invites(invite_id) ON DELETE CASCADE,
FOREIGN KEY (visit_id) REFERENCES visits(visit_id) ON DELETE CASCADE,
UNIQUE (invite_id, visit_id)
);

ALTER TABLE visit_registration_claims ADD CONSTRAINT visit_registration_unique
UNIQUE (invite_id, visit_id);
END;
END IF;
END;
$$
LANGUAGE plpgsql;
2 changes: 2 additions & 0 deletions apps/backend/src/config/Tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,11 @@ export const Tokens = {
UnitDataSource: Symbol('UnitDataSource'),
UserAuthorization: Symbol('UserAuthorization'),
ProposalAuthorization: Symbol('ProposalAuthorization'),
VisitAuthorization: Symbol('VisitAuthorization'),
VisitRegistrationAuthorization: Symbol('VisitRegistrationAuthorization'),
UserDataSource: Symbol('UserDataSource'),
VisitDataSource: Symbol('VisitDataSource'),
VisitRegistrationClaimDataSource: Symbol('VisitRegistrationClaimDataSource'),
PredefinedMessageDataSource: Symbol('PredefinedMessageDataSource'),
InternalReviewDataSource: Symbol('InternalReviewDataSource'),
FapDataColumns: Symbol('FapDataColumns'),
Expand Down
7 changes: 7 additions & 0 deletions apps/backend/src/config/dependencyConfigDefault.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'reflect-metadata';
import { DataAccessUsersAuthorization } from '../auth/DataAccessUsersAuthorization';
import { OAuthAuthorization } from '../auth/OAuthAuthorization';
import { ProposalAuthorization } from '../auth/ProposalAuthorization';
import { VisitAuthorization } from '../auth/VisitAuthorization';
import { VisitRegistrationAuthorization } from '../auth/VisitRegistrationAuthorization';
import { PostgresAdminDataSourceWithAutoUpgrade } from '../datasources/postgres/AdminDataSource';
import PostgresCallDataSource from '../datasources/postgres/CallDataSource';
Expand Down Expand Up @@ -43,6 +44,7 @@ import PostgresTemplateDataSource from '../datasources/postgres/TemplateDataSour
import PostgresUnitDataSource from '../datasources/postgres/UnitDataSource';
import PostgresUserDataSource from '../datasources/postgres/UserDataSource';
import PostgresVisitDataSource from '../datasources/postgres/VisitDataSource';
import PostgresVisitRegistrationClaimDataSource from '../datasources/postgres/VisitRegistrationClaimDataSource';
import PostgresWorkflowDataSource from '../datasources/postgres/WorkflowDataSource';
import { createSkipLoggingHandler } from '../eventHandlers/logging';
import { SkipSendMailService } from '../eventHandlers/MailService/SkipSendMailService';
Expand Down Expand Up @@ -106,6 +108,11 @@ mapClass(Tokens.TemplateDataSource, PostgresTemplateDataSource);
mapClass(Tokens.UnitDataSource, PostgresUnitDataSource);
mapClass(Tokens.UserDataSource, PostgresUserDataSource);
mapClass(Tokens.VisitDataSource, PostgresVisitDataSource);
mapClass(
Tokens.VisitRegistrationClaimDataSource,
PostgresVisitRegistrationClaimDataSource
);
mapClass(Tokens.VisitAuthorization, VisitAuthorization);
mapClass(Tokens.VisitRegistrationAuthorization, VisitRegistrationAuthorization);
mapClass(Tokens.TechniqueDataSource, PostgresTechniqueDataSource);
mapClass(
Expand Down
7 changes: 7 additions & 0 deletions apps/backend/src/config/dependencyConfigE2E.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'reflect-metadata';
import { DataAccessUsersAuthorization } from '../auth/DataAccessUsersAuthorization';
import { OAuthAuthorization } from '../auth/OAuthAuthorization';
import { ProposalAuthorization } from '../auth/ProposalAuthorization';
import { VisitAuthorization } from '../auth/VisitAuthorization';
import { VisitRegistrationAuthorization } from '../auth/VisitRegistrationAuthorization';
import PostgresAdminDataSource from '../datasources/postgres/AdminDataSource';
import PostgresCallDataSource from '../datasources/postgres/CallDataSource';
Expand Down Expand Up @@ -39,6 +40,7 @@ import PostgresTemplateDataSource from '../datasources/postgres/TemplateDataSour
import PostgresUnitDataSource from '../datasources/postgres/UnitDataSource';
import PostgresUserDataSource from '../datasources/postgres/UserDataSource';
import PostgresVisitDataSource from '../datasources/postgres/VisitDataSource';
import PostgresVisitRegistrationClaimDataSource from '../datasources/postgres/VisitRegistrationClaimDataSource';
import PostgresWorkflowDataSource from '../datasources/postgres/WorkflowDataSource';
import { essEmailHandler } from '../eventHandlers/email/essEmailHandler';
import createLoggingHandler from '../eventHandlers/logging';
Expand Down Expand Up @@ -97,6 +99,11 @@ mapClass(Tokens.TemplateDataSource, PostgresTemplateDataSource);
mapClass(Tokens.UnitDataSource, PostgresUnitDataSource);
mapClass(Tokens.UserDataSource, PostgresUserDataSource);
mapClass(Tokens.VisitDataSource, PostgresVisitDataSource);
mapClass(
Tokens.VisitRegistrationClaimDataSource,
PostgresVisitRegistrationClaimDataSource
);
mapClass(Tokens.VisitAuthorization, VisitAuthorization);
mapClass(Tokens.VisitRegistrationAuthorization, VisitRegistrationAuthorization);
mapClass(Tokens.TechniqueDataSource, PostgresTechniqueDataSource);
mapClass(
Expand Down
7 changes: 7 additions & 0 deletions apps/backend/src/config/dependencyConfigELI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'reflect-metadata';
import { DataAccessUsersAuthorization } from '../auth/DataAccessUsersAuthorization';
import { OAuthAuthorization } from '../auth/OAuthAuthorization';
import { ProposalAuthorization } from '../auth/ProposalAuthorization';
import { VisitAuthorization } from '../auth/VisitAuthorization';
import { VisitRegistrationAuthorization } from '../auth/VisitRegistrationAuthorization';
import { PostgresAdminDataSourceWithAutoUpgrade } from '../datasources/postgres/AdminDataSource';
import PostgresCallDataSource from '../datasources/postgres/CallDataSource';
Expand Down Expand Up @@ -38,6 +39,7 @@ import PostgresTemplateDataSource from '../datasources/postgres/TemplateDataSour
import PostgresUnitDataSource from '../datasources/postgres/UnitDataSource';
import PostgresUserDataSource from '../datasources/postgres/UserDataSource';
import PostgresVisitDataSource from '../datasources/postgres/VisitDataSource';
import PostgresVisitRegistrationClaimDataSource from '../datasources/postgres/VisitRegistrationClaimDataSource';
import PostgresWorkflowDataSource from '../datasources/postgres/WorkflowDataSource';
import { eliEmailHandler } from '../eventHandlers/email/eliEmailHandler';
import createLoggingHandler from '../eventHandlers/logging';
Expand Down Expand Up @@ -99,6 +101,11 @@ mapClass(Tokens.TemplateDataSource, PostgresTemplateDataSource);
mapClass(Tokens.UnitDataSource, PostgresUnitDataSource);
mapClass(Tokens.UserDataSource, PostgresUserDataSource);
mapClass(Tokens.VisitDataSource, PostgresVisitDataSource);
mapClass(
Tokens.VisitRegistrationClaimDataSource,
PostgresVisitRegistrationClaimDataSource
);
mapClass(Tokens.VisitAuthorization, VisitAuthorization);
mapClass(Tokens.VisitRegistrationAuthorization, VisitRegistrationAuthorization);
mapClass(Tokens.InternalReviewDataSource, PostgresInternalReviewDataSource);
mapClass(Tokens.TechniqueDataSource, PostgresTechniqueDataSource);
Expand Down
7 changes: 7 additions & 0 deletions apps/backend/src/config/dependencyConfigESS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'reflect-metadata';
import { DataAccessUsersAuthorization } from '../auth/DataAccessUsersAuthorization';
import { OAuthAuthorization } from '../auth/OAuthAuthorization';
import { ProposalAuthorization } from '../auth/ProposalAuthorization';
import { VisitAuthorization } from '../auth/VisitAuthorization';
import { VisitRegistrationAuthorization } from '../auth/VisitRegistrationAuthorization';
import { PostgresAdminDataSourceWithAutoUpgrade } from '../datasources/postgres/AdminDataSource';
import PostgresCallDataSource from '../datasources/postgres/CallDataSource';
Expand Down Expand Up @@ -39,6 +40,7 @@ import PostgresTemplateDataSource from '../datasources/postgres/TemplateDataSour
import PostgresUnitDataSource from '../datasources/postgres/UnitDataSource';
import PostgresUserDataSource from '../datasources/postgres/UserDataSource';
import PostgresVisitDataSource from '../datasources/postgres/VisitDataSource';
import PostgresVisitRegistrationClaimDataSource from '../datasources/postgres/VisitRegistrationClaimDataSource';
import PostgresWorkflowDataSource from '../datasources/postgres/WorkflowDataSource';
import { essEmailHandler } from '../eventHandlers/email/essEmailHandler';
import createLoggingHandler from '../eventHandlers/logging';
Expand Down Expand Up @@ -98,6 +100,11 @@ mapClass(Tokens.TemplateDataSource, PostgresTemplateDataSource);
mapClass(Tokens.UnitDataSource, PostgresUnitDataSource);
mapClass(Tokens.UserDataSource, PostgresUserDataSource);
mapClass(Tokens.VisitDataSource, PostgresVisitDataSource);
mapClass(
Tokens.VisitRegistrationClaimDataSource,
PostgresVisitRegistrationClaimDataSource
);
mapClass(Tokens.VisitAuthorization, VisitAuthorization);
mapClass(Tokens.VisitRegistrationAuthorization, VisitRegistrationAuthorization);
mapClass(Tokens.InternalReviewDataSource, PostgresInternalReviewDataSource);
mapClass(Tokens.TechniqueDataSource, PostgresTechniqueDataSource);
Expand Down
7 changes: 7 additions & 0 deletions apps/backend/src/config/dependencyConfigSTFC.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'reflect-metadata';
import { DataAccessUsersAuthorization } from '../auth/DataAccessUsersAuthorization';
import { StfcProposalAuthorization } from '../auth/StfcProposalAuthorization';
import { StfcUserAuthorization } from '../auth/StfcUserAuthorization';
import { VisitAuthorization } from '../auth/VisitAuthorization';
import { VisitRegistrationAuthorization } from '../auth/VisitRegistrationAuthorization';
import { PostgresAdminDataSourceWithAutoUpgrade } from '../datasources/postgres/AdminDataSource';
import PostgresCallDataSource from '../datasources/postgres/CallDataSource';
Expand Down Expand Up @@ -32,6 +33,7 @@ import PostgresTagDataSource from '../datasources/postgres/TagDataSource';
import PostgresTemplateDataSource from '../datasources/postgres/TemplateDataSource';
import PostgresUnitDataSource from '../datasources/postgres/UnitDataSource';
import PostgresVisitDataSource from '../datasources/postgres/VisitDataSource';
import PostgresVisitRegistrationClaimDataSource from '../datasources/postgres/VisitRegistrationClaimDataSource';
import PostgresWorkflowDataSource from '../datasources/postgres/WorkflowDataSource';
import StfcFapDataSource from '../datasources/stfc/StfcFapDataSource';
import StfcInstrumentDataSource from '../datasources/stfc/StfcInstrumentDataSource';
Expand Down Expand Up @@ -96,6 +98,11 @@ mapClass(Tokens.TemplateDataSource, PostgresTemplateDataSource);
mapClass(Tokens.UnitDataSource, PostgresUnitDataSource);
mapClass(Tokens.UserDataSource, StfcUserDataSource);
mapClass(Tokens.VisitDataSource, PostgresVisitDataSource);
mapClass(
Tokens.VisitRegistrationClaimDataSource,
PostgresVisitRegistrationClaimDataSource
);
mapClass(Tokens.VisitAuthorization, VisitAuthorization);
mapClass(Tokens.VisitRegistrationAuthorization, VisitRegistrationAuthorization);
mapClass(Tokens.InternalReviewDataSource, StfcInternalReviewDataSource);
mapClass(Tokens.TechniqueDataSource, StfcTechniqueDataSource);
Expand Down
7 changes: 7 additions & 0 deletions apps/backend/src/config/dependencyConfigTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'reflect-metadata';
import { DataAccessUsersAuthorization } from '../auth/DataAccessUsersAuthorization';
import { UserAuthorizationMock } from '../auth/mockups/UserAuthorization';
import { ProposalAuthorization } from '../auth/ProposalAuthorization';
import { VisitAuthorization } from '../auth/VisitAuthorization';
import { VisitRegistrationAuthorization } from '../auth/VisitRegistrationAuthorization';
import { AdminDataSourceMock } from '../datasources/mockups/AdminDataSource';
import { CallDataSourceMock } from '../datasources/mockups/CallDataSource';
Expand Down Expand Up @@ -39,6 +40,7 @@ import { TechniqueDataSourceMock } from '../datasources/mockups/TechniqueDataSou
import { TemplateDataSourceMock } from '../datasources/mockups/TemplateDataSource';
import { UnitDataSourceMock } from '../datasources/mockups/UnitDataSource';
import { UserDataSourceMock } from '../datasources/mockups/UserDataSource';
import { VisitRegistrationClaimDataSourceMock } from '../datasources/mockups/VisitRegistrationClaimDataSource';
import { WorkflowDataSourceMock } from '../datasources/mockups/WorkflowDataSource';
import { essEmailHandler } from '../eventHandlers/email/essEmailHandler';
import createLoggingHandler from '../eventHandlers/logging';
Expand Down Expand Up @@ -95,6 +97,11 @@ mapClass(Tokens.TemplateDataSource, TemplateDataSourceMock);
mapClass(Tokens.UnitDataSource, UnitDataSourceMock);
mapClass(Tokens.UserDataSource, UserDataSourceMock);
mapClass(Tokens.VisitDataSource, VisitDataSourceMock);
mapClass(
Tokens.VisitRegistrationClaimDataSource,
VisitRegistrationClaimDataSourceMock
);
mapClass(Tokens.VisitAuthorization, VisitAuthorization);
mapClass(Tokens.VisitRegistrationAuthorization, VisitRegistrationAuthorization);
mapClass(Tokens.PredefinedMessageDataSource, PredefinedMessageDataSourceMock);
mapClass(Tokens.StatusActionsLogsDataSource, StatusActionsLogsDataSourceMock);
Expand Down
4 changes: 4 additions & 0 deletions apps/backend/src/datasources/InviteDataSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ export interface InviteDataSource {
proposalPk: number,
isClaimed?: boolean
): Promise<Invite[]>;
findVisitRegistrationInvites(
visitId: number,
isClaimed?: boolean
): Promise<Invite[]>;
getInvites(filter: GetInvitesFilter): Promise<Invite[]>;

update(args: {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { VisitRegistrationClaim } from '../models/VisitRegistrationClaim';

export interface VisitRegistrationClaimDataSource {
create(inviteId: number, visitId: number): Promise<VisitRegistrationClaim>;
findByInviteId(inviteId: number): Promise<VisitRegistrationClaim[]>;
}
12 changes: 12 additions & 0 deletions apps/backend/src/datasources/mockups/InviteDataSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,18 @@ export class InviteDataSourceMock implements InviteDataSource {

return invites.filter((invite) => invite !== null) as Invite[];
}
async findVisitRegistrationInvites(
visitId: number,
includeExpired: boolean
): Promise<Invite[]> {
const invites = this.invites.filter(
(invite) =>
invite.id === visitId &&
(includeExpired || !invite.expiresAt || invite.expiresAt > new Date())
Comment thread
jekabs-karklins marked this conversation as resolved.
);

return invites;
}
async delete(id: number): Promise<void> {
this.invites = this.invites.filter((invite) => invite.id !== id);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { injectable } from 'tsyringe';

import { VisitRegistrationClaim } from '../../models/VisitRegistrationClaim';
import { VisitRegistrationClaimDataSource } from '../VisitRegistrationClaimDataSource';

@injectable()
export class VisitRegistrationClaimDataSourceMock
implements VisitRegistrationClaimDataSource
{
private visitRegistrationClaims: VisitRegistrationClaim[];

constructor() {
this.init();
}

public init() {
this.visitRegistrationClaims = [
new VisitRegistrationClaim(1, 1),
new VisitRegistrationClaim(2, 1),
new VisitRegistrationClaim(3, 2),
new VisitRegistrationClaim(1, 3),
];
}

async create(
inviteId: number,
visitId: number
): Promise<VisitRegistrationClaim> {
const newClaim = new VisitRegistrationClaim(inviteId, visitId);
this.visitRegistrationClaims.push(newClaim);

return newClaim;
}

async findByInviteId(inviteId: number): Promise<VisitRegistrationClaim[]> {
return this.visitRegistrationClaims.filter(
(claim) => claim.inviteId === inviteId
);
}
}
29 changes: 29 additions & 0 deletions apps/backend/src/datasources/postgres/InviteDataSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,35 @@ export default class PostgresInviteDataSource implements InviteDataSource {
})
.then((invites: InviteRecord[]) => invites.map(createInviteObject));
}
findVisitRegistrationInvites(
visitId: number,
isClaimed?: boolean
): Promise<Invite[]> {
return database
.select('invites.*')
.from('visit_registration_claims')
.where('visit_id', visitId)
.modify((query) => {
if (isClaimed !== undefined) {
if (isClaimed) {
query.whereNotNull('claimed_at');
} else {
query.whereNull('claimed_at');
}
}
})
.leftJoin(
'invites',
'visit_registration_claims.invite_id',
'invites.invite_id'
)
.catch((error: Error) => {
throw new Error(
`Could not find visit registration invites: ${error.message}`
);
})
.then((invites: InviteRecord[]) => invites.map(createInviteObject));
}
findByCode(code: string): Promise<Invite | null> {
return database
.select('*')
Expand Down
9 changes: 7 additions & 2 deletions apps/backend/src/datasources/postgres/VisitDataSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,17 @@ class PostgresVisitDataSource implements VisitDataSource {
.then((visit) => (visit ? createVisitObject(visit) : null));
}

getRegistration(userId: number, visitId: number): Promise<VisitRegistration> {
getRegistration(
userId: number,
visitId: number
): Promise<VisitRegistration | null> {
return database('visits_has_users')
.where({ visit_id: visitId })
.andWhere({ user_id: userId })
.first()
.then((registration) => createVisitRegistrationObject(registration));
.then((registration) =>
registration ? createVisitRegistrationObject(registration) : null
);
}

getRegistrations(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { injectable } from 'tsyringe';

import { VisitRegistrationClaim } from '../../models/VisitRegistrationClaim';
import { VisitRegistrationClaimDataSource } from '../VisitRegistrationClaimDataSource';
import database from './database';
import {
VisitRegistrationClaimRecord,
createVisitRegistrationClaimObject,
} from './records';

@injectable()
export default class PostgresVisitRegistrationClaimDataSource
implements VisitRegistrationClaimDataSource
{
async create(
inviteId: number,
visitId: number
): Promise<VisitRegistrationClaim> {
const records = await database('visit_registration_claims')
.insert(
{
invite_id: inviteId,
visit_id: visitId,
},
'*'
)
.onConflict(['invite_id', 'visit_id'])
.ignore();

if (records.length !== 1) {
throw new Error('Failed to create visit registration claim');
}

return createVisitRegistrationClaimObject(
records[0] as VisitRegistrationClaimRecord
);
}

async findByInviteId(inviteId: number): Promise<VisitRegistrationClaim[]> {
const records = await database<VisitRegistrationClaimRecord>(
'visit_registration_claims'
)
.select('*')
.where('invite_id', inviteId);

return records.map((record: VisitRegistrationClaimRecord) =>
createVisitRegistrationClaimObject(record)
);
}
}
Loading
Loading