mirror of
https://github.com/kikootwo/ReadMeABook.git
synced 2026-06-03 04:40:09 +00:00
4c1d1c89e8
Add an isEnglish flag to AUDIBLE_REGIONS and update region handling across the app. UI: populate Audible region selects from AUDIBLE_REGIONS and mark non-English regions with a '*' and an amber warning explaining limited feature support. Service: set axios default param language=english on Audible requests (simplifies/fixes locale handling) and remove the previous locale-correction flow. API: validate regions dynamically from AUDIBLE_REGIONS. Also bump package version to 1.0.2. These changes make region metadata explicit and inform users about limited support for non-English regions while forcing English content where supported.
81 lines
2.9 KiB
TypeScript
81 lines
2.9 KiB
TypeScript
/**
|
|
* Component: Audible Settings API
|
|
* Documentation: documentation/integrations/audible.md
|
|
*/
|
|
|
|
import { NextRequest, NextResponse } from 'next/server';
|
|
import { requireAuth, requireAdmin, AuthenticatedRequest } from '@/lib/middleware/auth';
|
|
import { getConfigService } from '@/lib/services/config.service';
|
|
import { getAudibleService } from '@/lib/integrations/audible.service';
|
|
import { getJobQueueService } from '@/lib/services/job-queue.service';
|
|
import { AUDIBLE_REGIONS } from '@/lib/types/audible';
|
|
import { RMABLogger } from '@/lib/utils/logger';
|
|
|
|
const logger = RMABLogger.create('API.Admin.Settings.Audible');
|
|
|
|
const VALID_REGIONS = Object.keys(AUDIBLE_REGIONS);
|
|
|
|
export async function PUT(request: NextRequest) {
|
|
return requireAuth(request, async (req: AuthenticatedRequest) => {
|
|
return requireAdmin(req, async () => {
|
|
try {
|
|
const { region } = await request.json();
|
|
|
|
// Validate region
|
|
if (!region || !VALID_REGIONS.includes(region)) {
|
|
logger.warn('Invalid region provided', { region });
|
|
return NextResponse.json(
|
|
{ success: false, error: `Invalid Audible region. Must be one of: ${VALID_REGIONS.join(', ')}` },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
// Save region to configuration
|
|
const configService = getConfigService();
|
|
await configService.setMany([
|
|
{
|
|
key: 'audible.region',
|
|
value: region,
|
|
category: 'system',
|
|
description: 'Audible region for metadata and search',
|
|
},
|
|
]);
|
|
|
|
// Clear config cache to ensure new region is loaded immediately
|
|
configService.clearCache('audible.region');
|
|
|
|
// Force AudibleService to re-initialize with new region
|
|
const audibleService = getAudibleService();
|
|
audibleService.forceReinitialize();
|
|
|
|
logger.info('Audible region updated, triggering data refresh', { region });
|
|
|
|
// Trigger audible_refresh job to fetch data for new region
|
|
try {
|
|
const jobQueueService = getJobQueueService();
|
|
await jobQueueService.addAudibleRefreshJob();
|
|
logger.info('Audible refresh job triggered');
|
|
} catch (jobError) {
|
|
logger.warn('Failed to trigger audible refresh job', {
|
|
error: jobError instanceof Error ? jobError.message : String(jobError),
|
|
});
|
|
// Don't fail the request if job trigger fails
|
|
}
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: `Audible region set to ${region.toUpperCase()}. Data refresh job triggered.`,
|
|
});
|
|
} catch (error) {
|
|
logger.error('Failed to update Audible region', {
|
|
error: error instanceof Error ? error.message : String(error),
|
|
});
|
|
return NextResponse.json(
|
|
{ success: false, error: 'Failed to update Audible region settings' },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
});
|
|
});
|
|
}
|