feat: add voice recordings feature with database integration

- Implemented PostgreSQL and SQLite schemas for voice recordings.
- Created repository functions for inserting, updating, and listing voice recordings.
- Developed uploader logic to handle file uploads and database updates.
- Added routes for accessing voice recordings via API.
- Enhanced UI state to include recordings tab.
- Introduced moderation WebSocket event for uploaded recordings.
This commit is contained in:
MythEclipse
2026-05-18 20:15:38 +07:00
parent 9d5559a45b
commit 3b9e87ee6c
17 changed files with 1404 additions and 13 deletions
+19
View File
@@ -25,6 +25,7 @@ import {
finalizeRecordingSession,
type RecordingSession,
} from "./recorder/sessionRecording";
import { uploadRecordingSegment } from "./recorder/uploader";
import { retryWithBackoff } from "./retry";
import type { PcmBroadcaster } from "./types";
@@ -211,6 +212,24 @@ export async function startRecording(
"Metadata saved",
);
}
// Trigger async voice segment upload
const segmentId = `${userId}-${currentSegment.startTime}`;
uploadRecordingSegment({
id: segmentId,
oggPath: currentSegment.filename,
userId: userMetadata.userId,
username: userMetadata.username,
avatarUrl: userMetadata.avatarUrl,
guildId: channel.guild.id,
channelId: channel.id,
channelName: channel.name,
}).catch((err) => {
logger.error(
{ segmentId, error: err.message },
"Upload segment trigger failed",
);
});
});
currentSegment.out.on("error", (err) => {