import type { APIRoute } from 'astro'; const PB_POCKETBASE_URL = import.meta.env.PB_POCKETBASE_URL || 'http://127.0.0.1:8090'; const POCKETBASE_ID_REGEX = /^[a-z0-9]{15}$/; function jsonResponse(data: object, status = 200): Response { return new Response(JSON.stringify(data), { status, headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' } }); } export const GET: APIRoute = async ({ url }) => { try { const postId = url.searchParams.get('postId'); if (!postId || !POCKETBASE_ID_REGEX.test(postId)) { return jsonResponse({ error: 'Некорректный postId' }, 400); } // Получаем пост let post; try { post = await fetch(`${PB_POCKETBASE_URL}/api/collections/posts/records/${postId}`, { headers: { 'Content-Type': 'application/json' } }).then(r => r.json()); } catch { return jsonResponse({ error: 'Пост не найден' }, 404); } if (!post || !post.id) { return jsonResponse({ error: 'Пост не найден' }, 404); } const now = new Date(); const todayStr = now.toISOString().split('T')[0]; let { views = 0, today_views = 0, last_reset = '' } = post; // Если новый день - сбрасываем today_views if (last_reset !== todayStr) { today_views = 0; last_reset = todayStr; } // Инкремент views++; today_views++; // Обновляем пост await fetch(`${PB_POCKETBASE_URL}/api/collections/posts/records/${postId}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ views, today_views, last_reset }) }); return jsonResponse({ views, today_views }, 200); } catch (error) { console.error('[Increment Views] Error:', error); return jsonResponse({ error: 'Внутренняя ошибка сервера' }, 500); } };