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