2512-есть Maintenance режим, но бот всё равно отвечает фульно

This commit is contained in:
2026-01-25 06:46:05 +03:00
parent 817e958646
commit 7d2ffb54b5
7 changed files with 120 additions and 9 deletions

View File

@@ -8,7 +8,8 @@ import { InvoiceDraftPage } from "./pages/InvoiceDraftPage";
import { InvoiceViewPage } from "./pages/InvoiceViewPage";
import { DraftsList } from "./pages/DraftsList";
import { SettingsPage } from "./pages/SettingsPage";
import { UNAUTHORIZED_EVENT } from "./services/api";
import { UNAUTHORIZED_EVENT, MAINTENANCE_EVENT } from "./services/api";
import MaintenancePage from "./pages/MaintenancePage";
// Компонент-заглушка для внешних браузеров
const NotInTelegramScreen = () => (
@@ -37,6 +38,7 @@ const NotInTelegramScreen = () => (
function App() {
const [isUnauthorized, setIsUnauthorized] = useState(false);
const [isMaintenance, setIsMaintenance] = useState(false);
const tg = window.Telegram?.WebApp;
// Проверяем, есть ли данные от Telegram
@@ -44,7 +46,9 @@ function App() {
useEffect(() => {
const handleUnauthorized = () => setIsUnauthorized(true);
const handleMaintenance = () => setIsMaintenance(true);
window.addEventListener(UNAUTHORIZED_EVENT, handleUnauthorized);
window.addEventListener(MAINTENANCE_EVENT, handleMaintenance);
if (tg) {
tg.expand(); // Расширяем приложение на все окно
@@ -52,6 +56,7 @@ function App() {
return () => {
window.removeEventListener(UNAUTHORIZED_EVENT, handleUnauthorized);
window.removeEventListener(MAINTENANCE_EVENT, handleMaintenance);
};
}, [tg]);
@@ -80,6 +85,11 @@ function App() {
);
}
// Если бэкенд вернул 503 (режим технического обслуживания)
if (isMaintenance) {
return <MaintenancePage />;
}
return (
<Providers>
<BrowserRouter>

View File

@@ -0,0 +1,28 @@
import { Result, Button } from "antd";
// Страница-заглушка для режима технического обслуживания
const MaintenancePage = () => (
<div
style={{
height: "100vh",
display: "flex",
alignItems: "center",
justifyContent: "center",
background: "#fff",
padding: 20,
}}
>
<Result
status="warning"
title="Сервис на техническом обслуживании"
subTitle="Мы скоро вернемся с новыми функциями!"
extra={
<Button type="primary" onClick={() => window.location.reload()}>
Попробовать снова
</Button>
}
/>
</div>
);
export default MaintenancePage;

View File

@@ -46,6 +46,9 @@ const tg = window.Telegram?.WebApp;
// Событие для глобальной обработки 401
export const UNAUTHORIZED_EVENT = 'rms_unauthorized';
// Событие для режима технического обслуживания (503)
export const MAINTENANCE_EVENT = 'rms_maintenance';
const apiClient = axios.create({
baseURL: API_BASE_URL,
headers: {
@@ -80,9 +83,14 @@ apiClient.interceptors.response.use(
description: 'Ваша сессия в Telegram истекла или данные неверны. Попробуйте перезапустить бота.',
placement: 'top',
});
window.dispatchEvent(new Event(UNAUTHORIZED_EVENT));
}
if (error.response && error.response.status === 503) {
// Режим технического обслуживания
window.dispatchEvent(new Event(MAINTENANCE_EVENT));
}
// Если запрос был отменен нами (нет initData), не выводим стандартную ошибку API
if (error.message === 'MISSING_TELEGRAM_DATA') {