Files
recipe-app/backend/dist/quick-import/quick-import.service.js
T
Nils-Johan Gynther 969dafdbc6
Test Suite / test (24.15.0) (push) Has been cancelled
Refactor code structure for improved readability and maintainability
2026-05-06 07:37:59 +02:00

102 lines
4.7 KiB
JavaScript

"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var QuickImportService_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuickImportService = void 0;
const common_1 = require("@nestjs/common");
const download_image_1 = require("../common/utils/download-image");
const IMAGE_DEST_DIR = process.env.IMAGE_DEST_DIR || '/app/recipe-images';
const IMPORTER_SERVICE_URL = process.env.IMPORTER_SERVICE_URL || 'http://importer-api:3001';
let QuickImportService = QuickImportService_1 = class QuickImportService {
constructor() {
this.logger = new common_1.Logger(QuickImportService_1.name);
}
async importFromInput(input) {
const trimmed = input.trim();
this.logger.log(`Delegerar URL-import till microservice: ${trimmed}`);
if (!trimmed) {
throw new common_1.BadRequestException('Du måste ange en URL eller ladda upp en fil');
}
let response;
try {
response = await fetch(`${IMPORTER_SERVICE_URL}/api/quick-import`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ input: trimmed }),
});
}
catch (err) {
this.logger.error(`Kunde inte nå importer-api: ${err}`);
throw new common_1.ServiceUnavailableException('Import-tjänsten är inte tillgänglig. Försök igen senare.');
}
const result = await this.handleImporterResponse(response);
return this.downloadImageIfNeeded(result);
}
async importFromUpload(file) {
this.logger.log(`Delegerar filuploading till microservice: ${file.originalname} (${file.mimetype})`);
const form = new FormData();
form.append('file', new Blob([new Uint8Array(file.buffer)], { type: file.mimetype }), file.originalname);
let response;
try {
response = await fetch(`${IMPORTER_SERVICE_URL}/api/quick-import`, {
method: 'POST',
body: form,
});
}
catch (err) {
this.logger.error(`Kunde inte nå importer-api: ${err}`);
throw new common_1.ServiceUnavailableException('Import-tjänsten är inte tillgänglig. Försök igen senare.');
}
const result = await this.handleImporterResponse(response);
return this.downloadImageIfNeeded(result);
}
async handleImporterResponse(response) {
if (!response.ok) {
let message = `Import-tjänsten svarade ${response.status}`;
try {
const body = (await response.json());
if (body.message)
message = body.message;
}
catch {
}
this.logger.error(`Importer-api fel: ${message}`);
if (response.status >= 400 && response.status < 500) {
throw new common_1.BadRequestException(message);
}
throw new common_1.ServiceUnavailableException(message);
}
return response.json();
}
async downloadImageIfNeeded(result) {
if (!result.imageUrl)
return result;
const imageUrl = result.imageUrl;
if (!imageUrl.startsWith('http://') && !imageUrl.startsWith('https://')) {
return result;
}
this.logger.log(`Laddar ner receptbild: ${imageUrl}`);
try {
const localPath = await (0, download_image_1.downloadAndOptimizeImage)(imageUrl, IMAGE_DEST_DIR);
this.logger.log(`Bild sparad lokalt: ${localPath}`);
return { ...result, imageUrl: localPath };
}
catch (imgErr) {
this.logger.warn(`Kunde inte ladda ner bild: ${imgErr} (källa: ${imageUrl})`);
return {
...result,
imageWarning: result.imageWarning ?? 'Receptbild kunde inte laddas ner lokalt; extern URL används.',
};
}
}
};
exports.QuickImportService = QuickImportService;
exports.QuickImportService = QuickImportService = QuickImportService_1 = __decorate([
(0, common_1.Injectable)()
], QuickImportService);
//# sourceMappingURL=quick-import.service.js.map