feat: Add expandable section for creating products with integrated product form

This commit is contained in:
Nils-Johan Gynther
2026-04-12 08:29:28 +02:00
parent f84ee39197
commit ea307e6a6c
6 changed files with 110 additions and 10 deletions
@@ -12,6 +12,7 @@ export class QuickImportService {
*/
async importFromInput(input: string): Promise<QuickImportResult> {
input = input.trim();
console.log('[QuickImport] Mottog input:', input);
if (!input) {
throw new BadRequestException('Du måste ange en URL eller filsökväg');
@@ -21,20 +22,26 @@ export class QuickImportService {
const isUrl = this.isUrl(input);
const isPdf = this.isPdfPath(input);
console.log('[QuickImport] isUrl:', isUrl, 'isPdf:', isPdf);
if (isUrl) {
// Försök detektera webbplats
if (input.includes('ica.se')) {
console.log('[QuickImport] Detekterade ICA-länk, startar skrapning...');
return this.scrapeIcaRecipe(input);
} else {
console.log('[QuickImport] URL är inte från ICA.se');
throw new BadRequestException(
'Endast ICA-recept stöds för närvarande. Försök med en ICA-länk (ica.se)'
);
}
} else if (isPdf) {
console.log('[QuickImport] PDF-fil identifierad');
throw new BadRequestException(
'PDF-import är under utveckling. Använd snabbimport för ICA-recept eller skriv in receptet manuellt.'
);
} else {
console.log('[QuickImport] Input är inte URL eller PDF');
throw new BadRequestException(
'Ogültig input. Ange en gyltig URL (t.ex. ica.se/recept/...) eller filsökväg'
);
@@ -74,6 +81,8 @@ export class QuickImportService {
*/
private async scrapeIcaRecipe(url: string): Promise<QuickImportResult> {
try {
console.log('[QuickImport] Hämtar HTML från:', url);
// Hämta HTML från URL
const response = await fetch(url, {
headers: {
@@ -82,14 +91,18 @@ export class QuickImportService {
},
});
console.log('[QuickImport] HTTP status:', response.status);
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
const html = await response.text();
console.log('[QuickImport] HTML längd:', html.length, 'tecken');
// Extrahera receptinformation från HTML
const recipe = this.parseIcaHtml(html);
console.log('[QuickImport] Parsad recept:', { name: recipe.name, ingredienser: recipe.ingredients.length });
if (!recipe.name) {
throw new Error('Kunde inte hitta receptnamn på sidan. Försök med en annan länk.');
@@ -97,6 +110,7 @@ export class QuickImportService {
// Konvertera till Markdown-format
const markdown = this.recipeToMarkdown(recipe);
console.log('[QuickImport] Markdown genererad, längd:', markdown.length);
return {
markdown,
@@ -104,6 +118,7 @@ export class QuickImportService {
};
} catch (err) {
const message = err instanceof Error ? err.message : 'Okänt fel vid scraping';
console.error('[QuickImport] ERROR:', message);
throw new BadRequestException(
`Kunde inte hämta recept från ICA: ${message}. Kontrollera att länken är korrekt och försök igen.`
);