"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