Repository navigation
feat: RSS-SE-26 display history analytics - #41
dilmun1101 merged 14 commits into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📝 WalkthroughWalkthroughСтраница истории загружает записи текущего пользователя из Supabase, отображает пустое состояние или карточки запросов, а proxy-маршрут сохраняет успешные и ошибочные операции в таблицу ChangesИстория запросов и аналитика
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant Client
participant HistoryPage
participant Supabase
participant HistoryRequestCard
Client->>HistoryPage: открыть страницу истории
HistoryPage->>Supabase: получить текущего пользователя
Supabase-->>HistoryPage: user.id
HistoryPage->>Supabase: загрузить history по user_id
Supabase-->>HistoryPage: записи истории
HistoryPage->>HistoryRequestCard: передать items
HistoryRequestCard-->>Client: отобразить карточки или пустое состояние
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 8
🧹 Nitpick comments (1)
src/features/history/api/history.ts (1)
19-23: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winОтсутствует ограничение количества строк в запросе истории.
Запрос не содержит
.limit()/пагинации, поэтому со временем активный пользователь может выгружать неограниченно растущий список записейhistoryпри каждом заходе на страницу.♻️ Пример ограничения выборки
const { data, error } = await supabase .from('history') .select('id, user_id, url, method, status, duration, timestamp, request_size, response_size, error_details') .eq('user_id', userId) - .order('timestamp', { ascending: false }); + .order('timestamp', { ascending: false }) + .limit(100);🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/features/history/api/history.ts` around lines 19 - 23, Ограничьте количество записей в запросе истории, добавив `.limit()` или существующую пагинацию в цепочку Supabase-запроса после сортировки по `timestamp` в обработчике, использующем выборку из таблицы `history`. Сохраните сортировку по убыванию и примените согласованный с приложением максимальный размер страницы.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@app/api/proxy/route.ts`:
- Around line 45-101: Вынесите дублируемую запись в `history` из основного
`try/catch` в отдельный helper, вызываемый из обоих путей прокси. Внутри helper
изолируйте создание Supabase-клиента, `auth.getUser()` и `insert` собственным
`try/catch`, чтобы ошибки логирования не изменяли успешный ответ или основной
статус прокси; проверяйте результат `insert` и логируйте полученную ошибку.
Сохраните текущие поля истории и различия статусов успешного и исключительного
путей.
- Around line 68-72: Sanitize the headers in the proxy response construction
around responseBuffer before returning the new Response: remove the original
content-encoding and content-length headers because response.arrayBuffer() has
already decoded the body. Preserve all other response headers and the existing
status and statusText values.
In `@src/features/history/api/history.ts`:
- Around line 25-27: Обработайте ошибку загрузки истории в связке loadHistory и
маршрута истории: не допускайте проброса PostgrestError в рендер без fallback.
Либо возвращайте безопасный пустой список из loadHistory при ошибке, либо
добавьте error.tsx для маршрута app/[locale]/history, сохранив корректное
отображение пользовательского fallback вместо необработанной 500-ошибки.
In
`@src/pages/history-page/ui/empty-history-message/empty-history-message.module.scss`:
- Around line 1-7: Центрируйте контейнер .container вместе с сообщением и CTA:
добавьте ему горизонтальное авто-центрирование или используйте отдельный
layout-класс для общего центрированного обёртывающего блока. Сохраните текущие
ограничения ширины и вертикальную компоновку.
In
`@src/pages/history-page/ui/history-requst-card/history-request-card.module.scss`:
- Around line 1-12: Сделайте адаптивным стиль .container: разрешите перенос
flex-элементов, добавьте min-width: 0 и примените overflow-wrap: anywhere к
элементу с URL, чтобы содержимое не выходило за пределы viewport на узких
экранах.
- Around line 18-22: Добавьте в module.scss селекторы .meta, .info и .infoError,
используемые компонентом history-request-card.tsx, чтобы CSS Module
экспортировал все указанные классы и применял стили метаданных и ошибки. Не
удаляйте className из компонента.
In `@src/pages/history-page/ui/history-requst-card/history-request-card.tsx`:
- Around line 34-42: Update the requestSize and responseSize render expressions
in the history request card so null or undefined values display — or N/A instead
of 0 B, while actual numeric zero continues to display 0 B.
- Line 31: Update the timestamp formatting in the history request card around
the `new Date(item.timestamp)` expression to use `Intl.DateTimeFormat` with the
request locale from `next-intl` and an explicit `timeZone`, rather than relying
on `toLocaleString()` defaults. Preserve the displayed timestamp while making
formatting deterministic across server environments.
---
Nitpick comments:
In `@src/features/history/api/history.ts`:
- Around line 19-23: Ограничьте количество записей в запросе истории, добавив
`.limit()` или существующую пагинацию в цепочку Supabase-запроса после
сортировки по `timestamp` в обработчике, использующем выборку из таблицы
`history`. Сохраните сортировку по убыванию и примените согласованный с
приложением максимальный размер страницы.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: e339bd23-31b8-46f3-8747-ef41dc005b96
📒 Files selected for processing (15)
app/[locale]/history/page.tsxapp/api/proxy/route.tsmessages/en.jsonmessages/ru.jsonsrc/features/history/api/history.tssrc/pages/history-page/index.tssrc/pages/history-page/ui/empty-history-message/empty-history-message.module.scsssrc/pages/history-page/ui/empty-history-message/empty-history-message.tsxsrc/pages/history-page/ui/history-intro/history-intro.module.scsssrc/pages/history-page/ui/history-intro/history-intro.tsxsrc/pages/history-page/ui/history-page.module.scsssrc/pages/history-page/ui/history-page.tsxsrc/pages/history-page/ui/history-requst-card/history-request-card.module.scsssrc/pages/history-page/ui/history-requst-card/history-request-card.tsxsrc/shared/api/supabase/get-current-user.ts
| if (error) { | ||
| throw error; | ||
| } |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== history api ==\n'
ast-grep outline src/features/history/api/history.ts --view expanded || true
printf '\n== page ==\n'
ast-grep outline "app/[locale]/history/page.tsx" --view expanded || true
printf '\n== relevant files with line numbers ==\n'
cat -n src/features/history/api/history.ts | sed -n '1,220p'
printf '\n---\n'
cat -n "app/[locale]/history/page.tsx" | sed -n '1,220p'
printf '\n== references to loadHistory ==\n'
rg -n "loadHistory\\(" . -g '!node_modules' -g '!dist' -g '!build' || trueRepository: FierceSloth/swagger-editor-app
Length of output: 2638
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== history route files ==\n'
find app -path '*/history/*' -maxdepth 4 -type f | sort || true
printf '\n== error/loading boundaries ==\n'
fd -a 'error.tsx|loading.tsx|not-found.tsx' app || true
printf '\n== specific route boundary files ==\n'
for f in \
"app/[locale]/history/error.tsx" \
"app/[locale]/history/loading.tsx" \
"app/error.tsx" \
"app/[locale]/error.tsx" \
"app/error.tsx"
do
if [ -f "$f" ]; then
echo "--- $f"
cat -n "$f" | sed -n '1,220p'
fi
doneRepository: FierceSloth/swagger-editor-app
Length of output: 340
Обработать ошибку загрузки истории на уровне маршрута
src/features/history/api/history.ts сейчас пробрасывает PostgrestError, а app/[locale]/history/page.tsx вызывает await loadHistory(user.id) без try/catch. Любой сбой Supabase уронит рендер страницы 500-ошибкой без пользовательского fallback; здесь нужен либо локальный fallback/пустой список, либо app/[locale]/history/error.tsx.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/features/history/api/history.ts` around lines 25 - 27, Обработайте ошибку
загрузки истории в связке loadHistory и маршрута истории: не допускайте проброса
PostgrestError в рендер без fallback. Либо возвращайте безопасный пустой список
из loadHistory при ошибке, либо добавьте error.tsx для маршрута
app/[locale]/history, сохранив корректное отображение пользовательского fallback
вместо необработанной 500-ошибки.
| .container { | ||
| display: flex; | ||
| align-items: center; | ||
| gap: 10px; | ||
| padding: 10px; | ||
| border: 1px solid rgba(255, 255, 255, 0.5); | ||
| border-radius: 15px; | ||
| background: rgba(255, 255, 255, 0.1); | ||
| transition: 1s; | ||
| font-size: 14px; | ||
| color: rgba(255, 255, 255, 0.5); | ||
|
|
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Сделайте карточку адаптивной.
display: flex без flex-wrap/responsive layout размещает URL и все метаданные в одну строку. На узких экранах карточка будет выходить за пределы viewport. Добавьте перенос, min-width: 0 и overflow-wrap: anywhere для URL либо используйте responsive grid.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@src/pages/history-page/ui/history-requst-card/history-request-card.module.scss`
around lines 1 - 12, Сделайте адаптивным стиль .container: разрешите перенос
flex-элементов, добавьте min-width: 0 и примените overflow-wrap: anywhere к
элементу с URL, чтобы содержимое не выходило за пределы viewport на узких
экранах.
| .item { | ||
| display: flex; | ||
| flex-direction: column; | ||
| gap: 5px; | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Добавьте отсутствующие CSS-классы компонента.
history-request-card.tsx использует styles.meta, styles.info и styles.infoError, но этот module.scss экспортирует только container и item. Поэтому стили метаданных и ошибки не применяются. Добавьте соответствующие селекторы или удалите эти className.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@src/pages/history-page/ui/history-requst-card/history-request-card.module.scss`
around lines 18 - 22, Добавьте в module.scss селекторы .meta, .info и
.infoError, используемые компонентом history-request-card.tsx, чтобы CSS Module
экспортировал все указанные классы и применял стили метаданных и ошибки. Не
удаляйте className из компонента.
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
app/api/proxy/route.ts (1)
103-113: 🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy liftОграничить размер upstream-ответа в прокси
response.arrayBuffer()целиком буферизует ответ в памяти, а для произвольногоtargetUrlздесь нет никакого лимита. Большой или chunked-ответ может привести к OOM на сервере. Нужен потоковый проксирующий ответ с ранним обрывом по max size; одной проверкиContent-Lengthнедостаточно.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/api/proxy/route.ts` around lines 103 - 113, Измените обработку ответа в прокси вокруг вызова fetch и текущего response.arrayBuffer(), чтобы читать upstream-поток порциями и прерывать его при достижении допустимого максимального размера, включая ответы без Content-Length. Сохраняйте существующие duration и responseSize для успешно завершённых ответов, а превышение лимита обрабатывайте контролируемым обрывом upstream-потока и соответствующим ответом клиенту.
🧹 Nitpick comments (1)
app/api/proxy/route.ts (1)
114-122: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winЛогирование истории блокирует ответ клиенту прокси.
await logHistorySafely(...)вызывается и ожидается доreturnкак в успешном, так и в catch-пути. Это добавляет к каждому проксируемому запросу дополнительный сетевой round-trip к Supabase (auth.getUser()+insert) прежде, чем клиент получит ответ, хотя сам ответ (responseBuffer/статус ошибки) уже полностью готов.В Next.js для этого случая (логирование/аналитика после отправки ответа, без блокировки) есть штатный стабильный API
after()изnext/server, который можно использовать прямо в Route Handler, включая доступ кcookies()/headers()внутри callback — то естьcreateClient()внутриlogHistorySafelyпродолжит работать корректно.♻️ Перенос логирования истории в after()
+import { after } from 'next/server'; ... - await logHistorySafely({ - targetUrl, - method, - status: response.status, - duration, - requestSize, - responseSize, - errorDetails: response.ok ? null : `HTTP ${response.status}`, - }); + after(() => + logHistorySafely({ + targetUrl, + method, + status: response.status, + duration, + requestSize, + responseSize, + errorDetails: response.ok ? null : `HTTP ${response.status}`, + }), + );- await logHistorySafely({ - targetUrl, - method, - status, - duration, - requestSize, - responseSize: 0, - errorDetails, - }); + after(() => + logHistorySafely({ + targetUrl, + method, + status, + duration, + requestSize, + responseSize: 0, + errorDetails, + }), + );Also applies to: 140-148
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/api/proxy/route.ts` around lines 114 - 122, Перенесите вызовы logHistorySafely из синхронного пути обработчика в callback after() из next/server, включая успешную и catch-ветки, чтобы они выполнялись после отправки ответа и не блокировали его. Зарегистрируйте callback после полной подготовки responseBuffer и статуса, сохранив все текущие поля логирования и возможность createClient() использовать cookies()/headers().
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@app/api/proxy/route.ts`:
- Around line 103-113: Измените обработку ответа в прокси вокруг вызова fetch и
текущего response.arrayBuffer(), чтобы читать upstream-поток порциями и
прерывать его при достижении допустимого максимального размера, включая ответы
без Content-Length. Сохраняйте существующие duration и responseSize для успешно
завершённых ответов, а превышение лимита обрабатывайте контролируемым обрывом
upstream-потока и соответствующим ответом клиенту.
---
Nitpick comments:
In `@app/api/proxy/route.ts`:
- Around line 114-122: Перенесите вызовы logHistorySafely из синхронного пути
обработчика в callback after() из next/server, включая успешную и catch-ветки,
чтобы они выполнялись после отправки ответа и не блокировали его.
Зарегистрируйте callback после полной подготовки responseBuffer и статуса,
сохранив все текущие поля логирования и возможность createClient() использовать
cookies()/headers().
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 10ff6b2a-48cd-4c5a-9964-a22ed9a96bf8
📒 Files selected for processing (1)
app/api/proxy/route.ts
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (2)
src/pages/history-page/lib/format-history.test.ts (1)
62-75: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winСделайте проверку timestamp детерминированной.
Тест повторяет внутренний алгоритм
formatTimestamp, поэтому он может пройти даже при неверном формате или timezone. Задайте явные locale/timezone и сравнивайте с фиксированной строкой; отдельно покройте русскую и английскую локализации.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/pages/history-page/lib/format-history.test.ts` around lines 62 - 75, Сделайте тесты formatTimestamp детерминированными: не вычисляйте ожидаемое значение через методы Date, а сравнивайте с фиксированной строкой при явно заданных locale и timezone. Добавьте отдельные проверки для английской и русской локализаций, чтобы тесты выявляли ошибки формата и часового пояса.src/pages/history-page/ui/history-requst-card/history-request-card.test.tsx (1)
32-56: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winДобавьте проверки timestamp и nullable-размеров.
Тесты не проверяют отображение
timestampи не отличаютnullот реального0 B. Добавьте assertions для форматированной даты и отдельный сценарий сnullдляrequest_size/response_size.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/pages/history-page/ui/history-requst-card/history-request-card.test.tsx` around lines 32 - 56, Расширьте тесты вокруг HistoryRequestCard: добавьте assertions для отображения форматированного timestamp в успешном и/или ошибочном сценарии, используя ожидаемый формат компонента. Добавьте отдельный сценарий с request_size и response_size равными null и проверьте их nullable-отображение, отличая его от реального значения 0 B.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@src/pages/history-page/ui/empty-history-message/empty-history-message.module.scss`:
- Line 33: Rename the spinReverse keyframe to kebab-case in its declaration and
update the animation reference in the empty-history message styles to use the
renamed keyframe.
In `@src/pages/history-page/ui/history-page.module.scss`:
- Around line 24-29: Update the .actions flex container to allow its CTA buttons
to wrap or stack vertically on narrow viewports, while preserving the existing
centered alignment and spacing for wider layouts.
In `@src/pages/history-page/ui/history-requst-card/history-request-card.tsx`:
- Around line 38-50: Локализуйте подписи Req:, Res: и Error: в компоненте
истории, используя существующие переводы History либо локализованные значения из
HistoryPage. Обновите отображение метаданных в history-request-card и сохраните
текущую структуру и форматирование размеров.
---
Nitpick comments:
In `@src/pages/history-page/lib/format-history.test.ts`:
- Around line 62-75: Сделайте тесты formatTimestamp детерминированными: не
вычисляйте ожидаемое значение через методы Date, а сравнивайте с фиксированной
строкой при явно заданных locale и timezone. Добавьте отдельные проверки для
английской и русской локализаций, чтобы тесты выявляли ошибки формата и часового
пояса.
In `@src/pages/history-page/ui/history-requst-card/history-request-card.test.tsx`:
- Around line 32-56: Расширьте тесты вокруг HistoryRequestCard: добавьте
assertions для отображения форматированного timestamp в успешном и/или ошибочном
сценарии, используя ожидаемый формат компонента. Добавьте отдельный сценарий с
request_size и response_size равными null и проверьте их nullable-отображение,
отличая его от реального значения 0 B.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 18f3f676-f44b-454f-8fdf-edcc0a073dc1
📒 Files selected for processing (16)
messages/en.jsonmessages/ru.jsonsrc/pages/history-page/lib/format-history.test.tssrc/pages/history-page/lib/format-history.tssrc/pages/history-page/ui/empty-history-message/empty-history-message.module.scsssrc/pages/history-page/ui/empty-history-message/empty-history-message.test.tsxsrc/pages/history-page/ui/empty-history-message/empty-history-message.tsxsrc/pages/history-page/ui/history-intro/history-intro.module.scsssrc/pages/history-page/ui/history-intro/history-intro.test.tsxsrc/pages/history-page/ui/history-intro/history-intro.tsxsrc/pages/history-page/ui/history-page.module.scsssrc/pages/history-page/ui/history-page.test.tsxsrc/pages/history-page/ui/history-page.tsxsrc/pages/history-page/ui/history-requst-card/history-request-card.module.scsssrc/pages/history-page/ui/history-requst-card/history-request-card.test.tsxsrc/pages/history-page/ui/history-requst-card/history-request-card.tsx
🚧 Files skipped from review as they are similar to previous changes (5)
- src/pages/history-page/ui/history-intro/history-intro.tsx
- src/pages/history-page/ui/empty-history-message/empty-history-message.tsx
- src/pages/history-page/ui/history-page.tsx
- messages/en.json
- messages/ru.json
| inset: 16px; | ||
| border-radius: 50%; | ||
| border: 1px dashed var(--bg-surface-4); | ||
| animation: spinReverse 12s linear infinite; |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Используйте kebab-case для имени keyframe.
spinReverse нарушает правило Stylelint keyframes-name-pattern. Переименуйте и объявление, и ссылку:
Предлагаемое исправление
- animation: spinReverse 12s linear infinite;
+ animation: spin-reverse 12s linear infinite;
-@keyframes spinReverse {
+@keyframes spin-reverse {Also applies to: 64-64
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@src/pages/history-page/ui/empty-history-message/empty-history-message.module.scss`
at line 33, Rename the spinReverse keyframe to kebab-case in its declaration and
update the animation reference in the empty-history message styles to use the
renamed keyframe.
Source: Linters/SAST tools
| .actions { | ||
| display: flex; | ||
| align-items: center; | ||
| justify-content: center; | ||
| gap: 16px; | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Разрешите перенос CTA-кнопок на узких экранах.
.actions всегда остаётся одной строкой, хотя empty-state содержит две кнопки, локализованные подписи и значительный горизонтальный padding. На мобильном viewport кнопки могут выйти за границы контейнера и ухудшить доступ к навигации.
Добавьте flex-wrap или media-query с вертикальным расположением кнопок.
Also applies to: 37-39
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/pages/history-page/ui/history-page.module.scss` around lines 24 - 29,
Update the .actions flex container to allow its CTA buttons to wrap or stack
vertically on narrow viewports, while preserving the existing centered alignment
and spacing for wider layouts.
| <span className={styles.metaItem}> | ||
| Req: {formatSize(item.request_size)} | ||
| <span className={styles.separator}>|</span> | ||
| Res: {formatSize(item.response_size)} | ||
| </span> | ||
| </div> | ||
| </div> | ||
|
|
||
| {item.error_details && ( | ||
| <div className={styles.errorRow}> | ||
| <ErrorIcon className={styles.errorIcon} /> | ||
| <span className={styles.errorLabel}>Error:</span> | ||
| <span className={styles.errorText}>{item.error_details}</span> |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Локализуйте подписи метаданных.
Req:, Res: и Error: останутся на английском в русской локали. Получайте эти подписи через History translations или передавайте локализованные значения из HistoryPage.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/pages/history-page/ui/history-requst-card/history-request-card.tsx`
around lines 38 - 50, Локализуйте подписи Req:, Res: и Error: в компоненте
истории, используя существующие переводы History либо локализованные значения из
HistoryPage. Обновите отображение метаданных в history-request-card и сохраните
текущую структуру и форматирование размеров.
📋 Trello Task ID
⚡️ Summary
🛠 Type of change
feat(New feature)fix(Bug fix)refactor(Code improvement / Refactoring without changing logic)style(Formatting, CSS)docs(Documentation)chore(Configs, Build)test(Testing)📷 Screenshots / GIFs
Summary by CodeRabbit