Release / Plano (reaproveitar a imagem?) (push) Successful in 12s
CI / Lint e auditorias (push) Successful in 1m52s
CI / Trivy (dependências e segredos) (push) Successful in 14s
CI / Imagem Docker (linux/arm64) (push) Failing after 1m22s
Release / ci (push) Failing after 3m31s
Release / Publica a imagem (linux/arm64) (push) Skipped
Release / Cria a release no Gitea (push) Skipped
Release / Deploy no Coolify (push) Skipped
O botão do AliExpress passa a ficar no rodapé do card, alinhado entre os cards. O link usa a coluna Link_<idioma> da planilha (en, es, fr, de, zh-CN) e cai no Link (Brasil) quando ela está vazia. Colunas de link não viram filtro, e a API lê A1:AZ1000. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
56 lines
1.6 KiB
JavaScript
56 lines
1.6 KiB
JavaScript
import { google } from 'googleapis';
|
|
import { NextResponse } from 'next/server';
|
|
|
|
|
|
// Configurar cache (sempre exportar um número, 0 = sem cache)
|
|
export const revalidate = 600; // 10 minutos
|
|
|
|
// Habilitar/desabilitar cache
|
|
const ENABLE_CACHE = revalidate > 0;
|
|
|
|
export async function GET() {
|
|
try {
|
|
const spreadsheetId = process.env.SPREADSHEET_ID;
|
|
|
|
const sheets = google.sheets({ version: 'v4' });
|
|
|
|
const response = await sheets.spreadsheets.values.get({
|
|
spreadsheetId,
|
|
range: 'A1:AZ1000',
|
|
key: process.env.GOOGLE_SHEETS_API_KEY,
|
|
});
|
|
|
|
const rows = response.data.values;
|
|
|
|
if (!rows || rows.length === 0) {
|
|
return NextResponse.json({ error: 'Nenhum dado encontrado' }, { status: 404 });
|
|
}
|
|
|
|
const headers = rows[0];
|
|
|
|
const data = rows.slice(1).map(row => {
|
|
const obj = {};
|
|
headers.forEach((header, index) => {
|
|
obj[header] = row[index] || '';
|
|
});
|
|
return obj;
|
|
});
|
|
|
|
const responseHeaders = ENABLE_CACHE ? {
|
|
'Cache-Control': `public, s-maxage=${revalidate}, stale-while-revalidate=${revalidate * 2}`
|
|
} : {
|
|
'Cache-Control': 'no-store, no-cache, must-revalidate'
|
|
};
|
|
|
|
return NextResponse.json({ data, headers }, {
|
|
headers: responseHeaders
|
|
});
|
|
} catch (error) {
|
|
console.error('Erro ao buscar dados do Google Sheets:', error);
|
|
return NextResponse.json(
|
|
{ error: 'Erro ao buscar dados', details: error.message },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|