dbp/relay-sublibrary-connector-campusonline-bundle
## Getting Started
### Minimal Setup
1. **Installation**:
```bash
composer require dbp/relay-sublibrary-connector-campusonline-bundle
Ensure your Laravel app meets the Relay API Gateway requirements (PHP 8.1+, Symfony 5.4+).
Bundle Registration:
Add the bundle to config/bundles.php:
return [
// ...
DigitalBlueprint\Relay\SublibraryConnector\CampusOnlineBundle\DbpRelaySublibraryConnectorCampusonlineBundle::class => ['all' => true],
];
Configuration: Publish the default config:
php artisan vendor:publish --tag="campusonline-bundle-config"
Update config/campusonline.php with your CampusOnline API credentials and endpoint.
First Use Case: Trigger a sync via CLI:
php artisan campusonline:sync
Verify logs in storage/logs/laravel.log for API responses.
API Integration:
CampusOnlineClient service (autowired via Symfony DI) to interact with CampusOnline.use DigitalBlueprint\Relay\SublibraryConnector\CampusOnlineBundle\Service\CampusOnlineClient;
public function __construct(private CampusOnlineClient $client) {}
public function fetchCourses() {
return $this->client->get('/courses', ['limit' => 100]);
}
Event-Driven Syncs:
CampusOnlineSyncCommand to customize sync logic:
protected function execute(InputInterface $input, OutputInterface $output): int {
$data = $this->client->get('/sync-data');
$this->processData($data); // Custom logic
return Command::SUCCESS;
}
Data Transformation:
CampusOnlineDataMapper to convert raw API responses to Laravel models:
$mapper = new CampusOnlineDataMapper();
$course = $mapper->mapToCourse($apiResponse);
Scheduled Syncs:
app/Console/Kernel.php:
protected function schedule(Schedule $schedule) {
$schedule->command('campusonline:sync')->dailyAt('03:00');
}
RelayConnectorInterface:
class CampusOnlineRelayConnector implements RelayConnectorInterface {
public function connect(): array {
return $this->client->authenticate();
}
}
CampusOnlineClient in unit tests:
$mockClient = Mockery::mock(CampusOnlineClient::class);
$mockClient->shouldReceive('get')->andReturn(['data' => []]);
$this->app->instance(CampusOnlineClient::class, $mockClient);
Authentication Failures:
CAMPUSONLINE_API_KEY and CAMPUSONLINE_API_SECRET are set in .env.php artisan campusonline:debug-auth
Rate Limiting:
use Symfony\Component\HttpClient\RetryableHttpClient;
$client = new RetryableHttpClient($baseClient, [
'max_retries' => 3,
'delay_between_retries' => 1000,
]);
Data Schema Mismatches:
RelaySchemaValidator:
$validator = new RelaySchemaValidator();
$validator->validate($apiResponse, Course::class);
Archived Package:
config/campusonline.php:
'debug' => env('CAMPUSONLINE_DEBUG', false),
php artisan campusonline:log-request to dump raw API requests/responses.Custom Endpoints:
Override CampusOnlineClient to add endpoints:
class CustomCampusOnlineClient extends CampusOnlineClient {
public function getEnrollments() {
return $this->request('GET', '/enrollments');
}
}
Bind it in config/services.php:
'campusonline' => [
'client' => CustomCampusOnlineClient::class,
],
Webhooks:
Extend CampusOnlineWebhookController to handle real-time updates:
public function handleWebhook(Request $request) {
$payload = $request->json()->all();
$this->dispatch(new CampusOnlineWebhookEvent($payload));
}
Model Events:
Listen for model events (e.g., CourseSynced) to trigger side effects:
Course::synced(function ($course) {
// Send notification, update cache, etc.
});
config/campusonline.php if testing:
'cache' => [
'enabled' => env('CAMPUSONLINE_CACHE_ENABLED', false),
],
.env vars with CAMPUSONLINE_ to avoid conflicts:
CAMPUSONLINE_API_URL=https://api.campusonline.example
How can I help you explore Laravel packages today?