API Reference - Passenger API
Working with Passengers using Collections
PassengerCollection
The PassengerCollection class provides a Backbone.js-inspired interface for managing passenger data with built-in indexing, pagination, and array operations.
Accessing the PassengerCollection
import { initializeSGERP } from 'sgerp-frontend-lib';
const api = initializeSGERP({
activeConnection: 'admin@staging',
connections: {
'admin@staging': {
id: 'admin@staging',
environment: 'staging',
user: 'admin',
password: 'your-password',
baseUrl: 'https://sgerp-stage.d.gcdev.swatrider.com',
},
},
});
// Access the PassengerCollection
const passengers = api.collections.passenger;
Common Passenger Operations
Get All Passengers
Fetch and work with passenger collections:
const passengers = api.collections.passenger;
// Fetch first page
await passengers.fetch({ limit: 20 });
console.log('Total passengers:', passengers.length);
console.log('Has more:', passengers.hasMore);
// Iterate through passengers
passengers.forEach(passenger => {
console.log(`${passenger.name} (${passenger.username})`);
console.log(` Email: ${passenger.email}`);
console.log(` Phone: ${passenger.phone}`);
console.log(` Active: ${passenger.is_active}`);
});
Find Passengers by Project
Use underscore.js methods to filter passengers by project:
const passengers = api.collections.passenger;
await passengers.fetch({ limit: 100 });
// Get all passengers for a specific project
const projectId = 455;
const projectPassengers = passengers.where({ project_id: projectId });
console.log(`Project ${projectId} has ${projectPassengers.length} passengers`);
projectPassengers.forEach(passenger => {
console.log(` ${passenger.name}`);
console.log(` Type: ${passenger.passenger_type_name}`);
console.log(` Organization: ${passenger.organization_name}`);
});
Find Passengers by Type
Filter passengers by passenger type:
const passengers = api.collections.passenger;
await passengers.fetch({ limit: 100 });
// Get passengers by type
const standardPassengers = passengers.where({ passenger_type_code: 'standard' });
console.log(`Found ${standardPassengers.length} standard passengers`);
Search Passengers
Use find or findWhere to search for specific passengers:
const passengers = api.collections.passenger;
await passengers.fetch({ limit: 100 });
// Find by username
const passenger = passengers.findWhere({ username: 'qauser30082023081307' });
if (passenger) {
console.log('Found passenger:', passenger.name);
console.log('Email:', passenger.email);
console.log('Phone:', passenger.phone);
}
// Find by ID
const passengerById = passengers.get('0006c950-72d5-4dfb-b289-f93747a7367a');
if (passengerById) {
console.log('Found passenger:', passengerById.name);
}
Active Passengers Only
Filter to get only active passengers:
const passengers = api.collections.passenger;
await passengers.fetch({ limit: 100 });
// Get only active passengers
const activePassengers = passengers.filter(p => p.is_active);
console.log(`${activePassengers.length} active passengers out of ${passengers.length} total`);
Group Passengers by Organization
Use collection methods to group and analyze passenger data:
const passengers = api.collections.passenger;
await passengers.fetch({ limit: 100 });
// Group by organization
const byOrganization = passengers.groupBy('organization_name');
Object.entries(byOrganization).forEach(([org, orgPassengers]) => {
console.log(`${org}: ${orgPassengers.length} passengers`);
});
Passenger Model Properties
interface Passenger {
// Core fields
id: string;
project_id: number;
organization_id: number;
user_id: number;
name: string;
username: string;
email: string;
phone: string;
is_active: boolean;
// Optional fields
employee_id: string | null;
passenger_type_id: number;
cost_centre_id: number | null;
department_id: number | null;
stripe_customer_id: string | null;
gender: string | null;
birth_date: string | null;
// Authentication
last_login: string | null;
failed_login_attempts: number;
blocked_until: string | null;
// Extended fields
organization_code: string;
organization_name: string;
passenger_type_code: string;
passenger_type_name: string;
cost_centre_code: string | null;
cost_centre_name: string | null;
department_code: string | null;
department_name: string | null;
user_is_active: boolean;
// Metadata
options: Record<string, any>;
search_index: string;
created_by_id: number | null;
created_by_email: string | null;
// Timestamps
created_at: string;
modified_at: string;
}
Pagination
The PassengerCollection supports pagination just like other collections:
const passengers = api.collections.passenger;
// Fetch first page (20 passengers)
await passengers.fetch({ limit: 20 });
console.log('Page 1:', passengers.length, 'passengers');
// Load next page
if (passengers.hasMore) {
await passengers.fetchNext();
console.log('Total loaded:', passengers.length, 'passengers');
}
// Or fetch all passengers at once
await passengers.fetchAll();
console.log('All passengers loaded:', passengers.length);
Using in React
import { useSGERP } from 'sgerp-frontend-lib';
import { useEffect, useState } from 'react';
function PassengerList() {
const api = useSGERP();
const passengers = api?.collections.passenger;
const [loading, setLoading] = useState(true);
useEffect(() => {
if (!passengers) return;
passengers.fetch({ limit: 20 })
.finally(() => setLoading(false));
}, [passengers]);
if (loading) return <div>Loading...</div>;
return (
<div>
<h2>Passengers ({passengers?.length})</h2>
{passengers?.models.map(passenger => (
<div key={passenger.id}>
<h3>{passenger.name}</h3>
<p>{passenger.email}</p>
<p>{passenger.phone}</p>
<p>Type: {passenger.passenger_type_name}</p>
</div>
))}
</div>
);
}