Skip to main content

User Module

The User module is a comprehensive user management system for the Comdeall platform that handles the complete lifecycle of users including parents, therapists, children, and administrators. It manages user registration, onboarding, profile management, role-based access control, child management, therapist verification, financial operations, and integrates with Hasura database functions for core child management operations.

Table of Contents​

  1. Module Structure
  2. User Endpoints
  3. Core Features
  4. User Management Workflows
  5. Hasura Functions & Database Logic
  6. Child Management System
  7. Therapist Management System
  8. Financial Integration
  9. Security & Authorization
  10. Technical Implementation

Module Structure​

@Module({
imports: [
forwardRef(() => AppointmentsModule),
forwardRef(() => PaymentModule),
forwardRef(() => BackgroundModule),
forwardRef(() => SubscriptionModule),
DBModule,
],
controllers: [UserController],
providers: [
UserService,
Requests,
{ provide: 'EmailProvider', useClass: SendgridProvider },
{ provide: 'FirebaseProvider', useClass: FirebaseProvider },
],
exports: [UserService],
})
export class UserModule {}

Architecture Components​

  • UserController - REST API endpoints (/api/user-management)
  • UserService - Business logic and workflow orchestration
  • UserDBService - Database operation abstraction layer
  • UserRepository - Raw database queries and data access
  • Hasura Functions - Direct database functions for child operations
  • Background Integration - Email, SMS, and notification services
  • Payment Integration - Financial operations and wallet management

User Endpoints​

MethodEndpointAuthRolesDescription
POST/create-parentJWTADMINCreate new parent account
POST/assign-child-therapistJWTADMINAssign therapist to child
POST/inactive-childsJWTADMINGet inactive children list
POST/delete-childsJWTADMIN, PARENTDelete multiple children
POST/delete-childJWTADMIN, PARENTDelete single child
POST/edit-consultation-feesJWTADMINUpdate therapist fees
POST/remove-assigned-childJWTADMINUnassign child from therapist
POST/inactive-therapistsJWTADMINGet inactive therapists list
POST/therapist-verificationNoneWebhookVerify therapist documents
POST/delete-therapistsJWTADMINDelete multiple therapists
POST/delete-userJWTPARENT, THERAPISTSelf-delete user account
POST/add-bank-accountJWTTHERAPISTAdd bank account details
POST/delete-bank-accountJWTTHERAPISTRemove bank account
POST/withdraw-requestJWTTHERAPISTRequest earnings withdrawal

Core Features​

1. User Management​

  • Multi-role Support - Parents, therapists, children, and administrators
  • Registration Workflows - Role-specific onboarding processes
  • Profile Management - Comprehensive user profile editing
  • Account Lifecycle - Creation, activation, suspension, and deletion
  • Relationship Management - Parent-child and child-therapist mappings

2. Child Management (Hasura-driven)​

  • Direct Frontend Integration - Frontend calls Hasura functions directly
  • Age-based Validation - Supports children aged 0-18 years
  • Unique Identification - Auto-generated unique codes (CD2024001 format)
  • Media Integration - Profile images and evaluation documents
  • No Immediate Subscription - Subscription handled after screening assessment

3. Therapist Management​

  • Verification System - Document verification and approval workflow
  • Fee Management - Customizable consultation fee structures
  • Bank Account Integration - Multiple bank account support
  • Withdrawal System - Automated earnings withdrawal processing
  • Performance Tracking - Appointment and earnings analytics

4. Financial Operations​

  • Wallet Management - Individual user wallet systems
  • Payment Processing - Integration with payment providers
  • Payout Management - Automated therapist payment processing
  • Refund Handling - Comprehensive refund workflow
  • Transaction Tracking - Detailed financial audit trails

User Management Workflows​

Parent Creation Process​

Admin Creates Parent → Email Verification → Parent Profile Created → Ready for Child Addition (via Hasura)

Key Steps:

  1. Admin Creation - Administrator creates parent account with basic details
  2. Validation - Email and phone number uniqueness verification
  3. Account Creation - Parent account created with registered status
  4. Ready State - Parent can now add children through frontend Hasura calls

Child Addition Workflow (Frontend → Hasura)​

Frontend Form → Hasura add_child Function → Validation → Unique Code Generation → Child Created → Screening Assessment

Important Note:

  • Frontend directly calls Hasura add_child function
  • No subscription is activated during child creation
  • Subscription is handled after screening assessment completion

Subscription Activation Process​

Child Created → Screening Assessment → Assessment Completion → Subscription Required → Payment → Subscription Active

Subscription Logic:

  • Children can be added without immediate subscription
  • Screening assessment is always available
  • Subscription becomes required for advanced features
  • Payment is processed after screening assessment completion

Therapist Verification Process​

Registration → Document Upload → Admin Review → Verification API → Approval/Rejection → Account Activation → Assignment Eligibility


Hasura Functions & Database Logic​

Function: add_child (Frontend Direct Call)​

Comprehensive child addition with validation and unique code generation.

CREATE OR REPLACE FUNCTION add_child(
hasura_session JSON,
input_parent_id UUID,
input_child_name TEXT,
input_concerns TEXT,
input_dob DATE,
input_gender TEXT,
input_age INTEGER,
input_profile_img UUID DEFAULT NULL,
input_previous_evaluations_json JSON DEFAULT NULL
) RETURNS SETOF child

Function Features:

  • Direct Frontend Access - Called directly from frontend via GraphQL
  • Session-based Authorization - JWT token validation with role checking
  • Parent Validation - Ensures parent exists and is properly onboarded
  • Child Count Limits - Enforces maximum children per parent (default: 4)
  • Age Calculation - Validates age against date of birth
  • Unique Code Generation - Creates country-year-sequence format codes
  • Media Handling - Associates profile images and evaluation documents
  • No Subscription Logic - Child creation doesn't trigger subscription

Key Differences from Backend Endpoint:

  • Frontend calls this function directly through Hasura GraphQL
  • No immediate subscription activation
  • Simplified workflow focused on child creation only

Function: edit_child (Frontend Direct Call)​

Sophisticated child profile editing with media management.

CREATE OR REPLACE FUNCTION edit_child(
hasura_session JSON,
input_child_id UUID,
input_alternate_phone TEXT,
input_concerns TEXT,
input_profile_img UUID,
input_previous_evaluations UUID[]
) RETURNS SETOF child

Edit Capabilities:

  • Direct Frontend Integration - No backend endpoint involvement
  • Profile Updates - Modify child information while preserving history
  • Media Replacement - Handle profile image and document updates
  • Validation - Ensure data integrity during updates
  • Audit Tracking - Maintain change history for compliance

Function: parent_onboarding​

Complete parent profile setup with media and preference management.

CREATE OR REPLACE FUNCTION parent_onboarding(
hasura_session JSON,
input_parent_name TEXT,
input_child_relation TEXT,
input_alternate_phone TEXT,
input_concerns TEXT,
input_location TEXT,
input_profile_img UUID,
input_preferred_languages UUID[]
) RETURNS SETOF parent

Onboarding Process:

  • Profile Completion - Updates parent with comprehensive information
  • Language Preferences - Associates multiple preferred languages
  • Media Management - Links profile images and sets usage flags
  • Location Tracking - Records geographical preferences
  • Validation - Ensures all required fields are properly formatted

Function: update_therapist_profile​

Comprehensive therapist profile management with verification handling.

CREATE OR REPLACE FUNCTION update_therapist_profile(
user_id UUID,
gender TEXT,
date_of_birth DATE,
state_id UUID,
city_id UUID,
consultation_fee INTEGER,
aadhaar_card TEXT,
pan_card TEXT,
social_security TEXT,
degree_name TEXT,
university_name TEXT,
profile_description TEXT
) RETURNS JSON

Child Management System​

Frontend-Driven Architecture​

Frontend Form → Hasura GraphQL → Database Function → Response → UI Update

Benefits:

  • Direct Database Access - Eliminates backend API layer for child operations
  • Real-time Validation - Immediate feedback on data validation
  • Reduced Latency - Direct database function calls
  • Simplified Architecture - Fewer moving parts for core operations

Unique Code Generation​

Each child receives a unique identifier following the pattern: CD{YEAR}{SEQUENCE}

// Generation Logic (in Hasura function)
const generateUniqueCode = (countryCode: string, year: string, sequence: number): string => {
const paddedSequence = sequence.toString().padStart(3, '0');
return `${countryCode}${year}${paddedSequence}`;
};

// Example: CD2024001, CD2024002, etc.

Age-based Features​

  • Monthly Tracking - Age stored in months for precise developmental tracking
  • Assessment Eligibility - Age-appropriate assessment assignments
  • Progress Monitoring - Developmental milestone tracking
  • Educational Content - Age-specific lesson plan recommendations

Subscription Integration Logic​

Child Created → Screening Assessment Available → Assessment Completed → Subscription Required for Advanced Features

Subscription Workflow:

  1. Child Creation - No subscription required
  2. Screening Access - Always available regardless of subscription
  3. Assessment Completion - Triggers subscription requirement
  4. Feature Access - Advanced features require active subscription
  5. Payment Processing - Handled after assessment completion

Therapist Management System​

Verification Workflow​

Registration → Document Collection → Identity Verification → Professional Validation → Manual Review → Approval → Active Status

Document Types:

  • Identity Proof - Aadhaar Card, PAN Card, Social Security Number
  • Professional Credentials - Degree certificates, license documents
  • Background Checks - Automated verification through external APIs

Fee Management​

  • Individual Rates - Custom consultation fees per therapist
  • Dynamic Pricing - Admin-configurable fee structures
  • Payment Integration - Automated fee collection and distribution
  • Performance Incentives - Rating-based fee adjustments

Bank Account System​

// Multiple bank account support
{
accountHolder: "Therapist Name",
accountNumber: "1234567890",
ifscCode: "BANK0001234",
accountType: "SAVINGS",
bankName: "Example Bank"
}

Withdrawal Management​

  • Automated Processing - Scheduled withdrawal processing
  • Minimum Thresholds - Configurable minimum withdrawal amounts
  • Status Tracking - Real-time withdrawal status updates
  • Audit Trails - Comprehensive transaction logging

Financial Integration​

Wallet System​

Each user (parent/therapist) maintains individual wallet balances:

  • Credit Management - Automatic credits from payments/earnings
  • Debit Processing - Service charges and withdrawal debits
  • Balance Tracking - Real-time balance calculations
  • Transaction History - Detailed transaction logs

Payment Processing​

  • Razorpay Integration - Primary payment gateway
  • Webhook Handling - Automated payment status updates
  • Refund Management - Automated and manual refund processing
  • Multi-currency Support - International payment handling

Therapist Payouts​

// Payout workflow
{
earnings: "Session fees - platform commission",
schedule: "Weekly automated payouts",
methods: ["Bank transfer", "Digital wallet"],
tracking: "Real-time payout status"
}

Security & Authorization​

Role-based Access Control​

ResourceADMINPARENTTHERAPISTCHILD
Create Parent✓✗✗✗
Add Child (Hasura)✓✓✗✗
Edit Child (Hasura)✓✓ (own)✗✗
Assign Therapist✓✗✗✗
Manage Fees✓✗✗✗
Bank Operations✗✗✓✗
View Reports✓✓ (own)✓ (assigned)✗

Hasura Security​

  • Row Level Security - Database-level access control
  • Session Variables - JWT claims used for authorization
  • Function Permissions - Role-based function access
  • Input Validation - Comprehensive validation in database functions

Data Protection​

  • PII Encryption - Sensitive data encrypted at rest
  • Access Logging - All data access logged for audit
  • Session Management - JWT-based secure session handling
  • Input Validation - Comprehensive server-side validation
  • SQL Injection Protection - Parameterized queries throughout

Technical Implementation​

Hybrid Architecture​

// Backend endpoints for admin operations
@Injectable()
export class UserService {
async createParent(parentData: CreateParentDto) {
// Validate unique email/phone
const existingUser = await this.userDBService.findUser(parentData.contact, parentData.email);
if (existingUser.length > 0) {
throw new BadRequestException('Parent already exists');
}

// Create parent - child addition handled by Hasura
await this.userDBService.createParent({
...parentData,
is_registered: true
});
}
}

// Frontend directly calls Hasura for child operations
// No backend endpoint involvement for add_child/edit_child

Frontend Integration Pattern​

// Frontend GraphQL call to Hasura
const ADD_CHILD_MUTATION = gql`
mutation AddChild($input: AddChildInput!) {
add_child(
input_parent_id: $input.parent_id
input_child_name: $input.child_name
input_concerns: $input.concerns
input_dob: $input.dob
input_gender: $input.gender
input_age: $input.age
input_profile_img: $input.profile_img
input_previous_evaluations_json: $input.previous_evaluations
) {
id
name
unique_code
created_at
}
}
`;

Subscription Logic Integration​

// Subscription activation after screening
const handleScreeningCompletion = async (assessmentId: string, childId: string) => {
// Check if assessment is screening type
const assessment = await getAssessment(assessmentId);

if (assessment.type === 'SCREENING') {
// Trigger subscription requirement
await triggerSubscriptionFlow(childId);
}
};

Error Handling Strategy​

  • Hasura Function Errors - Structured error responses from database functions
  • Business Logic Errors - Contextual error responses with suggested actions
  • Database Errors - Sanitized error messages preventing information disclosure
  • External API Errors - Graceful degradation with fallback mechanisms
  • Audit Logging - All errors logged with user context and request details

This User module provides a robust, scalable foundation for user management across the Comdeall platform, leveraging Hasura's direct database functions for efficient child management while maintaining backend API endpoints for administrative operations and complex business logic.