diff --git a/backend/src/products/products.controller.ts b/backend/src/products/products.controller.ts index ecc6583a..74ca9c1c 100644 --- a/backend/src/products/products.controller.ts +++ b/backend/src/products/products.controller.ts @@ -13,6 +13,7 @@ import { Query, Request, } from '@nestjs/common'; +import { Public } from '../auth/decorators/public.decorator'; import { CreateProductDto } from './dto/create-product.dto'; import { UpdateProductDto } from './dto/update-product.dto'; import { ProductsService } from './products.service'; @@ -46,6 +47,7 @@ export class ProductsController { private readonly categoriesService: CategoriesService, ) {} + @Public() @Get() findAll( @Query('tag') tag?: string, @@ -54,6 +56,7 @@ export class ProductsController { return this.productsService.findAll({ tag, subcategory }); } + @Public() @Get('tags') findAllTags() { return this.productsService.findAllTags(); diff --git a/frontend/app/admin/ai/AiAdminClient.tsx b/frontend/app/admin/ai/AiAdminClient.tsx index 9350f22a..10c8e58f 100644 --- a/frontend/app/admin/ai/AiAdminClient.tsx +++ b/frontend/app/admin/ai/AiAdminClient.tsx @@ -81,6 +81,11 @@ export default function AiAdminClient({ keyHint, hasKey, aiFunctions }: Props) { ⚠️ MISTRAL_API_KEY är inte konfigurerad — alla AI-funktioner är inaktiva tills nyckeln sätts i miljövariablerna. )} + {hasKey && ( +
+ ℹ️ Status Konfigurerad innebär att API-nyckeln är satt. Om Mistral svarar med 503 är det ett tillfälligt serverfel hos Mistral — inte ett konfigurationsproblem. +
+ )}
Status @@ -151,11 +156,15 @@ export default function AiAdminClient({ keyHint, hasKey, aiFunctions }: Props) { {aiFunctions.map((fn, i) => ( - + {hasKey ? ( - + + ✓ Konfigurerad + ) : ( - 🔴 + + ✗ Inaktiv + )} diff --git a/frontend/app/api/products/route.ts b/frontend/app/api/products/route.ts index 9add664c..37d61ccb 100644 --- a/frontend/app/api/products/route.ts +++ b/frontend/app/api/products/route.ts @@ -1,18 +1,13 @@ import { NextRequest, NextResponse } from 'next/server'; -import { getAuthHeaders } from '../../../lib/auth-headers'; const API_BASE = process.env.NEXT_PUBLIC_API_URL_INTERNAL || 'http://recipe-api:8080'; -export async function GET(req: NextRequest) { - const authHeaders = await getAuthHeaders(); - if (!authHeaders.Authorization) { - return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); - } +export const dynamic = 'force-dynamic'; +export async function GET(req: NextRequest) { const url = new URL(req.url); const query = url.searchParams.toString(); const res = await fetch(`${API_BASE}/api/products${query ? `?${query}` : ''}`, { - headers: authHeaders, cache: 'no-store', });