source names are unique
This commit is contained in:
+37
-27
@@ -605,15 +605,18 @@ async function checkRssFeeds() {
|
|||||||
try {
|
try {
|
||||||
const response = await fetch('/api/health/rss');
|
const response = await fetch('/api/health/rss');
|
||||||
const result = await response.json();
|
const result = await response.json();
|
||||||
|
|
||||||
if (result.success) {
|
if (result.success) {
|
||||||
const data = result.data;
|
const data = result.data;
|
||||||
console.log('Общий статус:', data.overallStatus);
|
console.log('Общий статус:', data.overallStatus);
|
||||||
console.log('Доступные ленты:', data.accessibleFeeds);
|
console.log('Доступные ленты:', data.accessibleFeeds);
|
||||||
console.log('Недоступные ленты:', data.unaccessibleFeeds);
|
console.log('Недоступные ленты:', data.unaccessibleFeeds);
|
||||||
|
|
||||||
// Показать рекомендации для недоступных лент
|
// Показать рекомендации для недоступных лент
|
||||||
if (data.recommendations && Object.keys(data.recommendations).length > 0) {
|
if (
|
||||||
|
data.recommendations &&
|
||||||
|
Object.keys(data.recommendations).length > 0
|
||||||
|
) {
|
||||||
console.log('Рекомендации по альтернативным URL:');
|
console.log('Рекомендации по альтернативным URL:');
|
||||||
Object.entries(data.recommendations).forEach(([source, url]) => {
|
Object.entries(data.recommendations).forEach(([source, url]) => {
|
||||||
console.log(`${source}: ${url}`);
|
console.log(`${source}: ${url}`);
|
||||||
@@ -632,14 +635,14 @@ function RssStatusWidget() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetch('/api/health/rss')
|
fetch('/api/health/rss')
|
||||||
.then(res => res.json())
|
.then((res) => res.json())
|
||||||
.then(data => {
|
.then((data) => {
|
||||||
if (data.success) {
|
if (data.success) {
|
||||||
setRssStatus(data.data);
|
setRssStatus(data.data);
|
||||||
}
|
}
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch((err) => {
|
||||||
console.error('Ошибка загрузки статуса RSS:', err);
|
console.error('Ошибка загрузки статуса RSS:', err);
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
});
|
});
|
||||||
@@ -648,28 +651,35 @@ function RssStatusWidget() {
|
|||||||
if (loading) return <div>Загрузка...</div>;
|
if (loading) return <div>Загрузка...</div>;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="rss-status">
|
<div className='rss-status'>
|
||||||
<h3>Статус RSS-лент</h3>
|
<h3>Статус RSS-лент</h3>
|
||||||
<div className={`status ${rssStatus.overallStatus.toLowerCase()}`}>
|
<div className={`status ${rssStatus.overallStatus.toLowerCase()}`}>
|
||||||
{rssStatus.overallStatus === 'UP' ? '✅ Все ленты доступны' :
|
{rssStatus.overallStatus === 'UP'
|
||||||
rssStatus.overallStatus === 'DEGRADED' ? '⚠️ Некоторые ленты недоступны' :
|
? '✅ Все ленты доступны'
|
||||||
'❌ Ленты недоступны'}
|
: rssStatus.overallStatus === 'DEGRADED'
|
||||||
|
? '⚠️ Некоторые ленты недоступны'
|
||||||
|
: '❌ Ленты недоступны'}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="feeds-list">
|
<div className='feeds-list'>
|
||||||
{Object.entries(rssStatus.accessibilityResults).map(([source, isAccessible]) => (
|
{Object.entries(rssStatus.accessibilityResults).map(
|
||||||
<div key={source} className={`feed-item ${isAccessible ? 'accessible' : 'inaccessible'}`}>
|
([source, isAccessible]) => (
|
||||||
<span className="source">{source}</span>
|
<div
|
||||||
<span className="status">
|
key={source}
|
||||||
{isAccessible ? '✅' : '❌'}
|
className={`feed-item ${
|
||||||
</span>
|
isAccessible ? 'accessible' : 'inaccessible'
|
||||||
{!isAccessible && rssStatus.recommendations[source] && (
|
}`}
|
||||||
<div className="recommendation">
|
>
|
||||||
Рекомендация: {rssStatus.recommendations[source]}
|
<span className='source'>{source}</span>
|
||||||
</div>
|
<span className='status'>{isAccessible ? '✅' : '❌'}</span>
|
||||||
)}
|
{!isAccessible && rssStatus.recommendations[source] && (
|
||||||
</div>
|
<div className='recommendation'>
|
||||||
))}
|
Рекомендация: {rssStatus.recommendations[source]}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@@ -867,8 +877,8 @@ function NewsFilter({ onFilterChange }) {
|
|||||||
// Загружаем список источников при монтировании компонента
|
// Загружаем список источников при монтировании компонента
|
||||||
fetch('/api/items/sources')
|
fetch('/api/items/sources')
|
||||||
.then((res) => res.json())
|
.then((res) => res.json())
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
if (data.success) {
|
if (data.success) {
|
||||||
setSources(data.data);
|
setSources(data.data);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ public interface MarketItemRepository extends MongoRepository<MarketItem, String
|
|||||||
/**
|
/**
|
||||||
* Получить все уникальные названия источников
|
* Получить все уникальные названия источников
|
||||||
*/
|
*/
|
||||||
@Query(value = "{}", fields = "{'sourceName': 1}")
|
|
||||||
List<String> findDistinctSourceNames();
|
List<String> findDistinctSourceNames();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user