feat: implement onboarding journeys
This commit is contained in:
parent
660ce24995
commit
5d7685dc8d
15 changed files with 1605 additions and 17 deletions
|
|
@ -22,6 +22,7 @@ from user_engine.domain import (
|
|||
FamilyInvitation,
|
||||
IdentityFactor,
|
||||
Membership,
|
||||
OnboardingJourney,
|
||||
OutboxEvent,
|
||||
PreparedAccount,
|
||||
ProfileScope,
|
||||
|
|
@ -29,6 +30,7 @@ from user_engine.domain import (
|
|||
RegistrationSession,
|
||||
TenantAccount,
|
||||
User,
|
||||
WelcomeProtocol,
|
||||
)
|
||||
|
||||
SCHEMA_VERSION = "0001_initial"
|
||||
|
|
@ -62,6 +64,8 @@ class InMemoryUserEngineStore:
|
|||
active_access_contexts: dict[
|
||||
tuple[str, str], ActiveAccessContext
|
||||
] = field(default_factory=dict)
|
||||
welcome_protocols: dict[str, WelcomeProtocol] = field(default_factory=dict)
|
||||
onboarding_journeys: dict[str, OnboardingJourney] = field(default_factory=dict)
|
||||
profile_values: dict[
|
||||
tuple[str, str, ProfileScope, str | None], ProfileValue
|
||||
] = field(default_factory=dict)
|
||||
|
|
@ -234,6 +238,45 @@ class InMemoryUserEngineStore:
|
|||
if context.tenant == tenant
|
||||
)
|
||||
|
||||
def save_welcome_protocol(self, protocol: WelcomeProtocol) -> None:
|
||||
self.welcome_protocols[protocol.protocol_id] = protocol
|
||||
|
||||
def welcome_protocol(self, protocol_id: str) -> WelcomeProtocol | None:
|
||||
return self.welcome_protocols.get(protocol_id)
|
||||
|
||||
def welcome_protocols_for_tenant(
|
||||
self, tenant: str
|
||||
) -> tuple[WelcomeProtocol, ...]:
|
||||
return tuple(
|
||||
protocol
|
||||
for protocol in self.welcome_protocols.values()
|
||||
if protocol.tenant == tenant
|
||||
)
|
||||
|
||||
def save_onboarding_journey(self, journey: OnboardingJourney) -> None:
|
||||
self.onboarding_journeys[journey.journey_id] = journey
|
||||
|
||||
def onboarding_journey(self, journey_id: str) -> OnboardingJourney | None:
|
||||
return self.onboarding_journeys.get(journey_id)
|
||||
|
||||
def onboarding_journeys_for_user(
|
||||
self, user_id: str, *, tenant: str | None = None
|
||||
) -> tuple[OnboardingJourney, ...]:
|
||||
return tuple(
|
||||
journey
|
||||
for journey in self.onboarding_journeys.values()
|
||||
if journey.user_id == user_id and (tenant is None or journey.tenant == tenant)
|
||||
)
|
||||
|
||||
def onboarding_journeys_for_tenant(
|
||||
self, tenant: str
|
||||
) -> tuple[OnboardingJourney, ...]:
|
||||
return tuple(
|
||||
journey
|
||||
for journey in self.onboarding_journeys.values()
|
||||
if journey.tenant == tenant
|
||||
)
|
||||
|
||||
def save_profile_value(self, value: ProfileValue) -> None:
|
||||
self.profile_values[
|
||||
(value.user_id, value.attribute_key, value.scope, value.scope_id)
|
||||
|
|
@ -296,6 +339,8 @@ class InMemoryUserEngineStore:
|
|||
"prepared_accounts": len(self.prepared_accounts),
|
||||
"access_profiles": len(self.access_profiles),
|
||||
"active_access_contexts": len(self.active_access_contexts),
|
||||
"welcome_protocols": len(self.welcome_protocols),
|
||||
"onboarding_journeys": len(self.onboarding_journeys),
|
||||
"profile_values": len(self.profile_values),
|
||||
"audit_records": len(self.audit_records),
|
||||
"pending_outbox_events": len(self.outbox_events),
|
||||
|
|
@ -317,6 +362,8 @@ class InMemoryUserEngineStore:
|
|||
"prepared_accounts": copy.deepcopy(self.prepared_accounts),
|
||||
"access_profiles": copy.deepcopy(self.access_profiles),
|
||||
"active_access_contexts": copy.deepcopy(self.active_access_contexts),
|
||||
"welcome_protocols": copy.deepcopy(self.welcome_protocols),
|
||||
"onboarding_journeys": copy.deepcopy(self.onboarding_journeys),
|
||||
"profile_values": copy.deepcopy(self.profile_values),
|
||||
"audit_records": copy.deepcopy(self.audit_records),
|
||||
"outbox_events": copy.deepcopy(self.outbox_events),
|
||||
|
|
@ -349,6 +396,10 @@ class InMemoryUserEngineStore:
|
|||
self.active_access_contexts = snapshot[
|
||||
"active_access_contexts"
|
||||
] # type: ignore[assignment]
|
||||
self.welcome_protocols = snapshot["welcome_protocols"] # type: ignore[assignment]
|
||||
self.onboarding_journeys = snapshot[
|
||||
"onboarding_journeys"
|
||||
] # type: ignore[assignment]
|
||||
self.profile_values = snapshot["profile_values"] # type: ignore[assignment]
|
||||
self.audit_records = [*snapshot_audit_records, *denied_audit_records]
|
||||
self.outbox_events = snapshot["outbox_events"] # type: ignore[assignment]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue