mirror of
https://github.com/khoaliber/dockhand.git
synced 2026-03-05 13:20:57 +00:00
Initial commit
This commit is contained in:
130
routes/api/notifications/trigger-test/+server.ts
Normal file
130
routes/api/notifications/trigger-test/+server.ts
Normal file
@@ -0,0 +1,130 @@
|
||||
import { json, type RequestHandler } from '@sveltejs/kit';
|
||||
import { sendEventNotification, sendEnvironmentNotification } from '$lib/server/notifications';
|
||||
import { NOTIFICATION_EVENT_TYPES, type NotificationEventType } from '$lib/server/db';
|
||||
|
||||
/**
|
||||
* Test endpoint to trigger notifications for any event type.
|
||||
* This is intended for development/testing purposes only.
|
||||
*
|
||||
* POST /api/notifications/trigger-test
|
||||
* Body: {
|
||||
* eventType: string,
|
||||
* environmentId?: number,
|
||||
* payload: { title: string, message: string, type?: string }
|
||||
* }
|
||||
*/
|
||||
export const POST: RequestHandler = async ({ request }) => {
|
||||
try {
|
||||
const body = await request.json();
|
||||
const { eventType, environmentId, payload } = body;
|
||||
|
||||
if (!eventType) {
|
||||
return json({ error: 'eventType is required' }, { status: 400 });
|
||||
}
|
||||
|
||||
if (!payload || !payload.title || !payload.message) {
|
||||
return json({ error: 'payload with title and message is required' }, { status: 400 });
|
||||
}
|
||||
|
||||
// Validate event type - NOTIFICATION_EVENT_TYPES is array of {id, label, ...}
|
||||
const validEventIds = NOTIFICATION_EVENT_TYPES.map(e => e.id);
|
||||
if (!validEventIds.includes(eventType)) {
|
||||
return json({
|
||||
error: `Invalid event type: ${eventType}`,
|
||||
validTypes: validEventIds
|
||||
}, { status: 400 });
|
||||
}
|
||||
|
||||
// Determine if this is a system event or environment event
|
||||
const isSystemEvent = eventType === 'license_expiring';
|
||||
|
||||
let result;
|
||||
|
||||
if (isSystemEvent) {
|
||||
// System events don't have an environment
|
||||
result = await sendEventNotification(
|
||||
eventType as NotificationEventType,
|
||||
{
|
||||
title: payload.title,
|
||||
message: payload.message,
|
||||
type: payload.type || 'info'
|
||||
}
|
||||
);
|
||||
} else if (environmentId) {
|
||||
// Environment-scoped events
|
||||
result = await sendEventNotification(
|
||||
eventType as NotificationEventType,
|
||||
{
|
||||
title: payload.title,
|
||||
message: payload.message,
|
||||
type: payload.type || 'info'
|
||||
},
|
||||
environmentId
|
||||
);
|
||||
} else {
|
||||
return json({
|
||||
error: 'environmentId is required for non-system events'
|
||||
}, { status: 400 });
|
||||
}
|
||||
|
||||
return json({
|
||||
success: result.success,
|
||||
sent: result.sent,
|
||||
eventType,
|
||||
environmentId: isSystemEvent ? null : environmentId
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('[Notification Test] Error:', error);
|
||||
return json({
|
||||
error: error instanceof Error ? error.message : 'Unknown error'
|
||||
}, { status: 500 });
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* GET endpoint to list all available event types
|
||||
*/
|
||||
export const GET: RequestHandler = async () => {
|
||||
return json({
|
||||
eventTypes: NOTIFICATION_EVENT_TYPES,
|
||||
categories: {
|
||||
container: [
|
||||
'container_started',
|
||||
'container_stopped',
|
||||
'container_restarted',
|
||||
'container_exited',
|
||||
'container_unhealthy',
|
||||
'container_oom',
|
||||
'container_updated',
|
||||
'image_pulled',
|
||||
],
|
||||
autoUpdate: [
|
||||
'auto_update_success',
|
||||
'auto_update_failed',
|
||||
'auto_update_blocked',
|
||||
],
|
||||
gitStack: [
|
||||
'git_sync_success',
|
||||
'git_sync_failed',
|
||||
'git_sync_skipped',
|
||||
],
|
||||
stack: [
|
||||
'stack_started',
|
||||
'stack_stopped',
|
||||
'stack_deployed',
|
||||
'stack_deploy_failed',
|
||||
],
|
||||
security: [
|
||||
'vulnerability_critical',
|
||||
'vulnerability_high',
|
||||
'vulnerability_any',
|
||||
],
|
||||
system: [
|
||||
'environment_offline',
|
||||
'environment_online',
|
||||
'disk_space_warning',
|
||||
'license_expiring',
|
||||
],
|
||||
}
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user