Backend (real implementations, no more stubs):
- Redis pub/sub bridge: subscribes to discord-gateway events (message/attachment/voice) and broadcasts to WS clients
- Redis command channel: backend publishes voice/media commands, discord-gateway executes and replies
- Voice service: connectVoice/disconnectVoice/getVoiceStatus via Redis commands with graceful fallback
- Media service: queue/skip/stop/volume via Redis commands, reads status from Redis cache
- Messages repository: ALL 7 methods now use real PostgreSQL queries (findMany, findById, findByChannel, create, update, delete, getAttachmentsByChannel)
- Analytics: period returns {start,end} epoch millis, overview includes hourly/topics/top_users, worst_flags as string[]
- Health check: actually queries SELECT 1 against database
- VoiceStatus type fixed: {connected, activeGuildId, activeChannelId, activeChannelName}
- Guild type: includes icon: string | null
- asyncHandler: accepts Promise<unknown> instead of Promise<void>
Discord Gateway:
- CommandHandler: subscribes to 'backend:command' Redis channel, executes voice/media commands, publishes replies
- Publishes voice:status and media:status to Redis for backend caching
- Shutdown handler updated to close command handler
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
23 lines
767 B
TypeScript
23 lines
767 B
TypeScript
import { getPool } from "../../shared/database/index.js";
|
|
import { createChildLogger } from "../../shared/logger/index.js";
|
|
|
|
const logger = createChildLogger("health.repository");
|
|
|
|
export class HealthRepository {
|
|
async checkDatabaseConnection() {
|
|
try {
|
|
logger.debug("Running database health check");
|
|
const pool = getPool();
|
|
await pool.query("SELECT 1 AS result");
|
|
logger.debug("Database health check passed");
|
|
return { connected: true };
|
|
} catch (err: unknown) {
|
|
const message = err instanceof Error ? err.message : String(err);
|
|
logger.error({ error: message }, "Database health check failed");
|
|
return { connected: false, error: message };
|
|
}
|
|
}
|
|
}
|
|
|
|
export const healthRepository = new HealthRepository();
|