generated from fahricansecer/boilerplate-be
This commit is contained in:
@@ -81,7 +81,7 @@ export class NewsService {
|
|||||||
): Promise<NewsArticle[]> {
|
): Promise<NewsArticle[]> {
|
||||||
if (!this.apiKey) {
|
if (!this.apiKey) {
|
||||||
this.logger.warn('NewsAPI key not configured');
|
this.logger.warn('NewsAPI key not configured');
|
||||||
return this.getMockArticles();
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -100,7 +100,7 @@ export class NewsService {
|
|||||||
return data.articles || [];
|
return data.articles || [];
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.logger.error(`Failed to fetch headlines: ${error.message}`);
|
this.logger.error(`Failed to fetch headlines: ${error.message}`);
|
||||||
return this.getMockArticles();
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,18 +192,4 @@ export class NewsService {
|
|||||||
return [...new Set(keywords)].slice(0, 5);
|
return [...new Set(keywords)].slice(0, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get mock articles for development
|
|
||||||
*/
|
|
||||||
private getMockArticles(): NewsArticle[] {
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
title: 'Breaking: Technology Trends Shaping 2026',
|
|
||||||
description: 'Latest technology trends analysis',
|
|
||||||
url: 'https://example.com/tech-trends',
|
|
||||||
source: { name: 'Tech News' },
|
|
||||||
publishedAt: new Date().toISOString(),
|
|
||||||
},
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import { ConfigService } from '@nestjs/config';
|
|||||||
import { TrendSource } from '@prisma/client';
|
import { TrendSource } from '@prisma/client';
|
||||||
|
|
||||||
interface TrendScanOptions {
|
interface TrendScanOptions {
|
||||||
|
country?: string;
|
||||||
|
language?: string;
|
||||||
limit?: number;
|
limit?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,7 +107,7 @@ export class RedditTrendsService {
|
|||||||
return data.data.children.map((child: any) => child.data);
|
return data.data.children.map((child: any) => child.data);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.logger.error(`Reddit search error: ${error.message}`);
|
this.logger.error(`Reddit search error: ${error.message}`);
|
||||||
return this.getMockPosts(keyword);
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,21 +249,4 @@ export class RedditTrendsService {
|
|||||||
this.tokenExpiry = Date.now() + data.expires_in * 1000 - 60000;
|
this.tokenExpiry = Date.now() + data.expires_in * 1000 - 60000;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get mock posts for development
|
|
||||||
*/
|
|
||||||
private getMockPosts(keyword: string): RedditPost[] {
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
id: `mock-${Date.now()}`,
|
|
||||||
title: `Trending discussion about ${keyword}`,
|
|
||||||
selftext: `This is a trending post about ${keyword}`,
|
|
||||||
score: Math.floor(Math.random() * 1000),
|
|
||||||
num_comments: Math.floor(Math.random() * 100),
|
|
||||||
url: `/r/trending/comments/mock`,
|
|
||||||
subreddit: 'trending',
|
|
||||||
created_utc: Date.now() / 1000,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ export class TwitterTrendsService {
|
|||||||
|
|
||||||
if (!this.bearerToken) {
|
if (!this.bearerToken) {
|
||||||
this.logger.warn('Twitter API token not configured');
|
this.logger.warn('Twitter API token not configured');
|
||||||
return this.getMockTrends();
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -92,7 +92,7 @@ export class TwitterTrendsService {
|
|||||||
return this.transformTwitterTrends(data[0]?.trends || []);
|
return this.transformTwitterTrends(data[0]?.trends || []);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.logger.error(`Failed to fetch Twitter trends: ${error.message}`);
|
this.logger.error(`Failed to fetch Twitter trends: ${error.message}`);
|
||||||
return this.getMockTrends();
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,22 +219,4 @@ export class TwitterTrendsService {
|
|||||||
.filter((word) => word.length > 2);
|
.filter((word) => word.length > 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get mock trends for development
|
|
||||||
*/
|
|
||||||
private getMockTrends(): TrendResult[] {
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
id: `twitter-mock-${Date.now()}`,
|
|
||||||
title: '#TrendingNow',
|
|
||||||
description: 'Mock trending topic',
|
|
||||||
source: TrendSource.TWITTER,
|
|
||||||
score: 75,
|
|
||||||
volume: 50000,
|
|
||||||
keywords: ['trending', 'now'],
|
|
||||||
relatedTopics: [],
|
|
||||||
timestamp: new Date(),
|
|
||||||
},
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,11 +83,11 @@ export class TrendsService {
|
|||||||
case TrendSource.GOOGLE_TRENDS:
|
case TrendSource.GOOGLE_TRENDS:
|
||||||
return this.googleTrends.fetchTrends(niche.keywords, options);
|
return this.googleTrends.fetchTrends(niche.keywords, options);
|
||||||
case TrendSource.TWITTER:
|
case TrendSource.TWITTER:
|
||||||
return this.googleNewsRss.fetchNews(niche.keywords, { ...options, allLanguages: options?.allLanguages });
|
return this.twitterTrends.fetchTrends(niche.keywords, options);
|
||||||
case TrendSource.REDDIT:
|
case TrendSource.REDDIT:
|
||||||
return this.redditTrends.fetchTrends(niche.keywords, options);
|
return this.redditTrends.fetchTrends(niche.keywords, options);
|
||||||
case TrendSource.NEWSAPI:
|
case TrendSource.NEWSAPI:
|
||||||
return this.googleNewsRss.fetchNews(niche.keywords, { ...options, allLanguages: options?.allLanguages });
|
return this.news.fetchTrends(niche.keywords, options);
|
||||||
default:
|
default:
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
@@ -144,6 +144,30 @@ export class TrendsService {
|
|||||||
this.logger.error(`Google News RSS error: ${error.message}`);
|
this.logger.error(`Google News RSS error: ${error.message}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Fetch from Reddit (Real data if keys exist, else empty)
|
||||||
|
const redditResults = await this.redditTrends.fetchTrends(keywords, scanOptions);
|
||||||
|
allTrends.push(...redditResults);
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error(`Reddit error: ${error.message}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Fetch from Twitter (Real data if keys exist, else empty)
|
||||||
|
const twitterResults = await this.twitterTrends.fetchTrends(keywords, scanOptions);
|
||||||
|
allTrends.push(...twitterResults);
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error(`Twitter error: ${error.message}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Fetch from NewsAPI (Real data if keys exist, else empty)
|
||||||
|
const newsApiResults = await this.news.fetchTrends(keywords, scanOptions);
|
||||||
|
allTrends.push(...newsApiResults);
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error(`NewsAPI error: ${error.message}`);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Fetch from Hacker News for Tech (FREE)
|
// Fetch from Hacker News for Tech (FREE)
|
||||||
if (keywords.some(k => k.toLowerCase().match(/ai|tech|yapay|google|openai/))) {
|
if (keywords.some(k => k.toLowerCase().match(/ai|tech|yapay|google|openai/))) {
|
||||||
|
|||||||
23
test-query.ts
Normal file
23
test-query.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import { PrismaClient } from '@prisma/client';
|
||||||
|
|
||||||
|
const prisma = new PrismaClient();
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
const masterContents = await prisma.masterContent.findMany({
|
||||||
|
orderBy: { createdAt: 'desc' },
|
||||||
|
take: 5,
|
||||||
|
include: {
|
||||||
|
contents: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(JSON.stringify(masterContents, null, 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
||||||
|
.then(() => prisma.$disconnect())
|
||||||
|
.catch(e => {
|
||||||
|
console.error(e);
|
||||||
|
prisma.$disconnect();
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user