feat(sync): harden the Hiboutik sync, share rate limits across instances, update dependencies (#4)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-08 13:45:08 +00:00
parent 8c8a2ccf15
commit cc3dcd3f0a
62 changed files with 1546 additions and 639 deletions

View File

@@ -32,13 +32,13 @@ export class CategoryHiboutikService {
// Pass 2: parent links, once every category exists (a child can come before its parent in Hiboutik's list)
const nbParentsFailed = await forEachSafely(
hiboutikCategories,
(dto) => this.categoryDatabaseRepository.setParent(Number(dto.category_id), Number(dto.category_id_parent) || null),
(dto) => this.categoryDatabaseRepository.setParent(dto.category_id, dto.category_id_parent || null),
this.logger,
(dto) => `parent of Hiboutik category ${dto.category_id}`,
);
// Hiboutik is trusted: a successful (2xx) answer, even an empty list, is the truth. An HTTP error throws before this point.
const nbDeleted = await this.categoryDatabaseRepository.deleteMissing(hiboutikCategories.map((dto) => Number(dto.category_id)));
const nbDeleted = await this.categoryDatabaseRepository.deleteMissing(hiboutikCategories.map((dto) => dto.category_id));
this.logger.log(
`Categories sync ended: ${hiboutikCategories.length - nbFailed}/${hiboutikCategories.length} synced, ${nbFailed} failed, ` +
`${nbParentsFailed} parent links failed, ${nbDeleted} deleted.`,