Fertility Yoga Documentation

Not tested yet

Page Routing Documentation

This documentation describes when different pages are displayed based on user subscription status.

Page Routing Logic

PageRouteConditions
Main Listing Page/{uniqueCode}
  • Valid uniqueCode exists
  • User is in preconception phase
  • Current date is between program_start_date and program_end_date of most recent booked program
  • User's subscription is NOT paused (stage is not 'PAUSED')
  • User's subscription is NOT expired (stage is not 'PLAN_EXPIRED')
Paused Subscription Page/{uniqueCode}/paused-subscription
  • Valid uniqueCode exists
  • User is in preconception phase
  • User's subscription stage is 'PAUSED'
  • Sets validationStatus to "paused"
Renew Subscription Page/{uniqueCode}/renew-subscription
  • Valid uniqueCode exists
  • User is in preconception phase
  • Current date is NOT between program_start_date and program_end_date of most recent booked program
  • OR User's subscription stage is 'PLAN_EXPIRED'
  • Sets validationStatus to "expired"
Root Page (Fallback)/
  • No uniqueCode provided
  • Invalid uniqueCode
  • User is NOT in preconception phase
  • Any other error occurs during validation

Validation Flow

// Validation flow pseudocode
function validateUser() {
  if (!uniqueCode) → redirect to /
  if (!isValid) → redirect to /
  if (!isPreconception) → redirect to /
  if (!isActiveSubscription) → redirect to /{uniqueCode}/renew-subscription
  if (isPaused) → redirect to /{uniqueCode}/paused-subscription
  else → show main listing page (/{uniqueCode})
}

Database Schema

experience_user

Contains user information including unique code, phase, and booked programs

FieldTypeDescription
idUUIDPrimary key
user_codeStringUnique identifier code
phaseStringCurrent program phase
nameStringUser's name
emailStringUser's email
booked_programsArrayContains program objects with dates and phase

Authentication Process

Authentication Flow

StepProcessResult
1User visits page with unique codeSystem extracts uniqueCode from URL
2System validates uniqueCode against databaseUser record is retrieved if code exists
3System checks user's phaseConfirms if user is in preconception phase
4System checks subscription status1. Sorts booked programs by updated_at field (most recent first)
2. Checks if current date is between program_start_date and program_end_date
3. Checks if stage is 'PAUSED' for paused subscriptions
4. Checks if stage is 'PLAN_EXPIRED' for expired subscriptions
5System routes to appropriate pageUser sees content based on their status

Detailed Subscription Status Logic

Program Sorting Priority

When determining subscription status, booked programs are sorted in the following priority:

  1. Updated_at timestamp (most recent first)
  2. Program end date (most recent first)
  3. Program start date (most recent first)

Status Determination Algorithm

The system follows these sequential steps to determine subscription status:

  1. Sort all booked programs for the user as described above
  2. Take the most recent program from the sorted list
  3. Check if the user's stage is 'PAUSED'
    • If true: User is in PAUSED status
  4. Check if the user's stage is 'PLAN_EXPIRED'
    • If true: User is in EXPIRED status
  5. Check if current date is between program_start_date and program_end_date
    • If true: User is in ACTIVE status
    • If false: User is in EXPIRED status

UserValidationResult Fields

FieldTypeDescription
isActiveSubscriptionbooleanTrue if current date is between program_start_date and program_end_date
isPausedbooleanTrue if user's stage is 'PAUSED'
isPlanExpiredbooleanTrue if user's stage is 'PLAN_EXPIRED'

Important Notes

  • Date comparisons use the local system time zone
  • The most recently updated program (based on updated_at field) is always considered first
  • Stage values ('PAUSED', 'PLAN_EXPIRED') take precedence over date-based status determination