prisma.findmany() в prod режиме возвращаются устаревшие данные, но в режиме dev все ок
При попытке получить данные из таблицы prisma.order.findmany() в режиме разработки мы получаем правильные данные, в производственном режиме мы получаем данные только на этапе инициализации проекта.
useOrders.ts
import { useState, useEffect } from 'react';
import { Order } from '@prisma/client';
export const useOrders = () => {
const [orders, setOrders] = useState<Order[]>([]);
const [filteredOrders, setFilteredOrders] = useState<Order[]>([]);
const [statusFilter, setStatusFilter] = useState<string>('ALL');
const [searchId, setSearchId] = useState<string>('');
const fetchOrders = async () => {
try {
console.log('[USE-ORDERS-FETCH] Fetching orders...');
const res = await fetch(`/api/admin/orders?timestamp=${Date.now()}`, {
headers: {
'Content-Type': 'application/json',
},
});
if (!res.ok) {
throw new Error(`[USE-ORDERS-FETCH] HTTP error! status: ${res.status}`);
}
const data = await res.json();
console.log('[USE-ORDERS-FETCH] Fetched orders:', data);
setOrders(data);
console.log('[USE-ORDERS-FETCH] Orders state updated:', data);
} catch (error) {
console.error('[USE-ORDERS-FETCH] Error fetching orders:', error);
}
};
const updateOrder = async (orderId: string, field: string, value: string) => {
try {
const response = await fetch(`/api/admin/orders/${orderId}`, {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ [field]: value }),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || '[USE-ORDERS-UPDATE] Failed to update order');
}
await fetchOrders();
console.log('[USE-ORDERS-UPDATE] Order updated:', orderId, field, value);
} catch (error) {
console.error('[USE-ORDERS-UPDATE] Error updating order:', error);
}
};
useEffect(() => {
fetchOrders();
console.log('[USE-ORDERS-USEEFFECT] Orders:', orders);
}, []);
useEffect(() => {
if (statusFilter === 'ALL') {
setFilteredOrders(
searchId
? orders.filter(order => order.orderId.toString().includes(searchId))
: orders
);
} else {
setFilteredOrders(
orders.filter(order =>
order.status === statusFilter &&
(searchId ? order.orderId.toString().includes(searchId) : true)
)
);
}
}, [statusFilter, orders, searchId]);
return {
orders,
filteredOrders,
statusFilter,
setStatusFilter,
searchId,
setSearchId,
updateOrder,
};
};
app/api/admin/orders/route.ts
import { prisma } from '@/prisma/prisma-client';
import { NextRequest, NextResponse } from 'next/server';
export async function GET(request: NextRequest) {
try {
let orders = await prisma.order.findMany({
orderBy: {
createdAt: 'desc'
}
});
console.log('[API-ADMIN-ORDERS-GET] Orders:', orders);
return NextResponse.json(orders, {
headers: {
'Cache-Control': 'no-store, no-cache, must-revalidate, proxy-revalidate',
'Pragma': 'no-cache',
'Expires': '0',
},
});
} catch (error) {
console.error('[API-ADMIN-ORDERS] Orders API Error:', error);
return NextResponse.json({ error: '[API-ADMIN-ORDERS] Внутренняя ошибка сервера' }, { status: 500 });
}
}
выводит логи в режиме разработки, но не в рабочем режиме. в то же время логи /api/admin/orders/${OrderID} передаются как в dev, так и в prod
app\api\admin\orders[id]\route.ts
import { prisma } from '@/prisma/prisma-client';
import { NextRequest, NextResponse } from 'next/server';
export async function PATCH(
request: NextRequest,
{ params }: { params: { id: string } }
) {
try {
const body = await request.json();
const orderId = parseInt(params.id);
if (isNaN(orderId)) {
return NextResponse.json(
{ error: '[API-ADMIN-ORDERS-PATCH] Invalid order ID' },
{ status: 400 }
);
}
const updatedOrder = await prisma.order.update({
where: { id: orderId },
data: body,
});
console.log('[API-ADMIN-ORDERS-PATCH] Updated order:', updatedOrder);
return NextResponse.json(updatedOrder);
} catch (error) {
console.error('[API-ADMIN-ORDERS-PATCH] Update Order API Error:', error);
return NextResponse.json(
{ error: '[API-ADMIN-ORDERS-PATCH] Ошибка при обновлении заказа' },
{ status: 500 }
);
}
}
в базе данных действительно происходят изменения, но prisma возвращает ответ со статусом 200 и данными, которые были при первой инициализации проекта (только в prod режиме, в режиме разработки корректные данные). вот скриншоты из network и supbase
в данном случае я изменил статус с "COMPLETED" на "PENDING", эти изменения были корректно изменены в supаbase, но после запроса /api/admin/orders/ нам возвращаются данные до изменения, статус равен 200. даже если я обновлю страницу, будет сделан новый запрос, он все равно вернет старые данные.
Я подумал, что, возможно, проблема в nginx или middleware, но их полное удаление привело к тем же результатам.