Этап 1a: фундамент
- Next 16.4 и Payload 3.91 в одном приложении, PostgreSQL с UUID, TypeScript 6, ESLint 9, Prettier, Vitest - Payload: администраторы с ролями, multi-tenant по сайтам, локализация en/ru/de/fr/es, интерфейс админки ru/en, языки сайта (sites.locales) - Коллекции sites, domains, currencies, countries, locations, tags, tariffs, payment-systems (manual), media и начальные данные (pnpm seed) - Proxy: хост → домен, язык и валюта, внутренние маршруты по хосту; /admin и /api закрыты на доменах брендов - Токены и темы брендов, оболочки сайта и кабинета, переключатели языка, валюты и темы, заглушки страниц - /svc/health, юнит systemd veilix-dev.service - Документация: решения D-022…D-024, команды в CLAUDE.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3400f58a5a
commit
7e331c2c9d
140 files changed
+15885
-43
No files matched your search
@@ -0,0 +1,24 @@
|
||||
import config from '@payload-config'
|
||||
import { getPayload } from 'payload'
|
||||
|
||||
export const dynamic = 'force-dynamic'
|
||||
|
||||
const TIMEOUT_MS = 3000
|
||||
|
||||
/** Проверка живости для выкладки и мониторинга: приложение отвечает и база доступна */
|
||||
export async function GET() {
|
||||
const headers = { 'Cache-Control': 'no-store' }
|
||||
try {
|
||||
const check = (async () => {
|
||||
const payload = await getPayload({ config })
|
||||
await payload.count({ collection: 'sites', overrideAccess: true })
|
||||
})()
|
||||
const timeout = new Promise<never>((_, reject) =>
|
||||
setTimeout(() => reject(new Error('timeout')), TIMEOUT_MS),
|
||||
)
|
||||
await Promise.race([check, timeout])
|
||||
return Response.json({ status: 'ok', db: 'ok' }, { headers })
|
||||
} catch {
|
||||
return Response.json({ status: 'error', db: 'unavailable' }, { status: 503, headers })
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user