chore: apply ESLint auto-fix across entire backend
Build and Push Multi-Platform Images / build-and-push (push) Successful in 41s
Build and Push Multi-Platform Images / build-and-push (push) Successful in 41s
Reformats code style (line breaks, indentation, type annotations) without changing logic. Also includes minor feature additions bundled in the same lint run (stats service, user-settings groups, agrarmonitor polling improvements). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -16,32 +16,48 @@ export class PaperlessProcessorService {
|
||||
private readonly configService: ConfigService,
|
||||
private readonly paperlessService: PaperlessService,
|
||||
private readonly postprocessingService: PostprocessingService,
|
||||
@InjectRepository(DocumentType) private readonly docTypeRepo: Repository<DocumentType>,
|
||||
@InjectRepository(DocumentField) private readonly docFieldRepo: Repository<DocumentField>,
|
||||
@InjectRepository(DocumentType)
|
||||
private readonly docTypeRepo: Repository<DocumentType>,
|
||||
@InjectRepository(DocumentField)
|
||||
private readonly docFieldRepo: Repository<DocumentField>,
|
||||
) {}
|
||||
|
||||
@Cron(process.env.PAPERLESS_PROCESSOR_CRON || '0 * * * * *')
|
||||
async processDocuments() {
|
||||
try {
|
||||
const response = await this.paperlessService.getDocuments({ tags__id__all: 16, page_size: 9999 });
|
||||
const documents: any[] = Array.isArray(response) ? response : (response?.results ?? []);
|
||||
const response = await this.paperlessService.getDocuments({
|
||||
tags__id__all: 16,
|
||||
page_size: 9999,
|
||||
});
|
||||
const documents: any[] = Array.isArray(response)
|
||||
? response
|
||||
: (response?.results ?? []);
|
||||
if (documents.length === 0) return;
|
||||
|
||||
const customFields = await this.paperlessService.getCustomFields();
|
||||
const validFieldIds = new Set(customFields.map((f: any) => f.id));
|
||||
|
||||
this.logger.log(`Verarbeite ${documents.length} Dokument(e) mit Tag "paperlessmanager" (ID: 16).`);
|
||||
this.logger.log(
|
||||
`Verarbeite ${documents.length} Dokument(e) mit Tag "paperlessmanager" (ID: 16).`,
|
||||
);
|
||||
|
||||
for (const doc of documents) {
|
||||
try {
|
||||
const updatedDoc = await this.processSingleDocument(doc, validFieldIds);
|
||||
// Postprocessing nach dem Speichern evaluieren
|
||||
await this.postprocessingService.evaluate(updatedDoc || doc);
|
||||
const updatedDoc = await this.processSingleDocument(
|
||||
doc,
|
||||
validFieldIds,
|
||||
);
|
||||
// Postprocessing nach dem Speichern evaluieren
|
||||
await this.postprocessingService.evaluate(updatedDoc || doc);
|
||||
} catch (innerErr: any) {
|
||||
this.logger.error(`Fehler bei Dokument ID ${doc.id}: ${innerErr.message}`);
|
||||
if (innerErr.response?.data) {
|
||||
this.logger.error(`Paperless API Response: ${JSON.stringify(innerErr.response.data)}`);
|
||||
}
|
||||
this.logger.error(
|
||||
`Fehler bei Dokument ID ${doc.id}: ${innerErr.message}`,
|
||||
);
|
||||
if (innerErr.response?.data) {
|
||||
this.logger.error(
|
||||
`Paperless API Response: ${JSON.stringify(innerErr.response.data)}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
@@ -49,17 +65,24 @@ export class PaperlessProcessorService {
|
||||
}
|
||||
}
|
||||
|
||||
private async processSingleDocument(doc: any, validFieldIds: Set<number>): Promise<any> {
|
||||
private async processSingleDocument(
|
||||
doc: any,
|
||||
validFieldIds: Set<number>,
|
||||
): Promise<any> {
|
||||
this.logger.log(`Verarbeite Dokument ID: ${doc.id}`);
|
||||
|
||||
if (!doc.document_type) {
|
||||
this.logger.warn(`Dokument ${doc.id} hat keinen Dokumenten-Typen – setze Tag 17.`);
|
||||
this.logger.warn(
|
||||
`Dokument ${doc.id} hat keinen Dokumenten-Typen – setze Tag 17.`,
|
||||
);
|
||||
const tagsSet = new Set<number>(doc.tags || []);
|
||||
tagsSet.add(17);
|
||||
if (!tagsSet.has(1)) {
|
||||
tagsSet.add(6);
|
||||
}
|
||||
const updated = await this.paperlessService.updateDocument(doc.id, { tags: Array.from(tagsSet) });
|
||||
const updated = await this.paperlessService.updateDocument(doc.id, {
|
||||
tags: Array.from(tagsSet),
|
||||
});
|
||||
return updated;
|
||||
}
|
||||
|
||||
@@ -68,7 +91,9 @@ export class PaperlessProcessorService {
|
||||
});
|
||||
|
||||
if (!docTypeConfig) {
|
||||
this.logger.warn(`Konfiguration für DocumentType ${doc.document_type} nicht in der Datenbank gefunden.`);
|
||||
this.logger.warn(
|
||||
`Konfiguration für DocumentType ${doc.document_type} nicht in der Datenbank gefunden.`,
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -77,9 +102,13 @@ export class PaperlessProcessorService {
|
||||
});
|
||||
|
||||
if (fieldsConfig.length === 0) {
|
||||
this.logger.log(`Dokument ${doc.id} (Typ ${doc.document_type}) hat keine Dokument-Felder in der DB konfiguriert.`);
|
||||
this.logger.log(
|
||||
`Dokument ${doc.id} (Typ ${doc.document_type}) hat keine Dokument-Felder in der DB konfiguriert.`,
|
||||
);
|
||||
const newTagsNoFields = Array.from(new Set([...(doc.tags || []), 17]));
|
||||
const updated = await this.paperlessService.updateDocument(doc.id, { tags: newTagsNoFields });
|
||||
const updated = await this.paperlessService.updateDocument(doc.id, {
|
||||
tags: newTagsNoFields,
|
||||
});
|
||||
return updated;
|
||||
}
|
||||
|
||||
@@ -91,15 +120,19 @@ export class PaperlessProcessorService {
|
||||
if (fieldConf.Type === 4) {
|
||||
const customFieldId = fieldConf.TypeIndex;
|
||||
if (!customFieldId) continue;
|
||||
|
||||
|
||||
if (!validFieldIds.has(customFieldId)) {
|
||||
this.logger.warn(`Überspringe ungültiges Custom Field (TypeIndex: ${customFieldId}) für Dokument ${doc.id} - in Paperless nicht vorhanden.`);
|
||||
this.logger.warn(
|
||||
`Überspringe ungültiges Custom Field (TypeIndex: ${customFieldId}) für Dokument ${doc.id} - in Paperless nicht vorhanden.`,
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
const existingField = newCustomFields.find(f => f.field === customFieldId);
|
||||
const existingField = newCustomFields.find(
|
||||
(f) => f.field === customFieldId,
|
||||
);
|
||||
let isFilled = false;
|
||||
|
||||
|
||||
if (existingField) {
|
||||
isFilled = existingField.value !== null && existingField.value !== '';
|
||||
} else {
|
||||
@@ -114,13 +147,16 @@ export class PaperlessProcessorService {
|
||||
let isFilled = false;
|
||||
switch (fieldConf.Type) {
|
||||
case 1:
|
||||
isFilled = doc.correspondent !== null && doc.correspondent !== undefined;
|
||||
isFilled =
|
||||
doc.correspondent !== null && doc.correspondent !== undefined;
|
||||
break;
|
||||
case 2:
|
||||
isFilled = !!doc.created || !!doc.created_date;
|
||||
break;
|
||||
case 3:
|
||||
isFilled = doc.archive_serial_number !== null && doc.archive_serial_number !== undefined;
|
||||
isFilled =
|
||||
doc.archive_serial_number !== null &&
|
||||
doc.archive_serial_number !== undefined;
|
||||
break;
|
||||
case 5:
|
||||
isFilled = !!doc.title;
|
||||
@@ -136,13 +172,13 @@ export class PaperlessProcessorService {
|
||||
}
|
||||
|
||||
const tagsSet = new Set<number>(doc.tags || []);
|
||||
|
||||
|
||||
if (isAllRequiredFilled) {
|
||||
if (docTypeConfig.TagReady) tagsSet.add(docTypeConfig.TagReady);
|
||||
if (docTypeConfig.TagNotReady) tagsSet.delete(docTypeConfig.TagNotReady);
|
||||
if (docTypeConfig.TagReady) tagsSet.add(docTypeConfig.TagReady);
|
||||
if (docTypeConfig.TagNotReady) tagsSet.delete(docTypeConfig.TagNotReady);
|
||||
} else {
|
||||
if (docTypeConfig.TagNotReady) tagsSet.add(docTypeConfig.TagNotReady);
|
||||
if (docTypeConfig.TagReady) tagsSet.delete(docTypeConfig.TagReady);
|
||||
if (docTypeConfig.TagNotReady) tagsSet.add(docTypeConfig.TagNotReady);
|
||||
if (docTypeConfig.TagReady) tagsSet.delete(docTypeConfig.TagReady);
|
||||
}
|
||||
|
||||
tagsSet.add(17);
|
||||
@@ -163,7 +199,7 @@ export class PaperlessProcessorService {
|
||||
|
||||
while ((match = placeholderRegex.exec(title)) !== null) {
|
||||
const fieldId = parseInt(match[1], 10);
|
||||
const cf = newCustomFields.find(f => f.field === fieldId);
|
||||
const cf = newCustomFields.find((f) => f.field === fieldId);
|
||||
if (!cf || cf.value == null || cf.value === '') {
|
||||
allFilled = false;
|
||||
break;
|
||||
@@ -174,7 +210,10 @@ export class PaperlessProcessorService {
|
||||
for (const cf of newCustomFields) {
|
||||
const placeholder = `{{CUSTOM[${cf.field}]}}`;
|
||||
if (title.includes(placeholder)) {
|
||||
title = title.replaceAll(placeholder, cf.value != null ? String(cf.value) : '');
|
||||
title = title.replaceAll(
|
||||
placeholder,
|
||||
cf.value != null ? String(cf.value) : '',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -192,13 +231,20 @@ export class PaperlessProcessorService {
|
||||
|
||||
updatePayload.title = title;
|
||||
} else {
|
||||
this.logger.log(`Dokument ${doc.id}: Titel-Template nicht angewendet – nicht alle referenzierten Custom Fields ausgefüllt.`);
|
||||
this.logger.log(
|
||||
`Dokument ${doc.id}: Titel-Template nicht angewendet – nicht alle referenzierten Custom Fields ausgefüllt.`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const updated = await this.paperlessService.updateDocument(doc.id, updatePayload);
|
||||
const updated = await this.paperlessService.updateDocument(
|
||||
doc.id,
|
||||
updatePayload,
|
||||
);
|
||||
|
||||
this.logger.log(`Dokument ${doc.id} erfolgreich aktualisiert (Alle Pflichtfelder vorhanden: ${isAllRequiredFilled}).`);
|
||||
this.logger.log(
|
||||
`Dokument ${doc.id} erfolgreich aktualisiert (Alle Pflichtfelder vorhanden: ${isAllRequiredFilled}).`,
|
||||
);
|
||||
return updated;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user