shares updated

This commit is contained in:
dimitar committed 2026-03-06 13:22:07 +01:00
1 parent a11194831d
commit 6241c25af0
14 files changed
+296 -174

No files matched your search

@@ -5,7 +5,7 @@ export class TrackShareDto {
@IsUUID()
articleId: string;
@IsEnum(['facebook', 'twitter', 'whatsapp', 'telegram', 'link'])
@IsEnum(['facebook', 'twitter', 'instagram', 'tiktok', 'telegram', 'link'])
platform: SharePlatform;
@IsOptional()
@@ -36,7 +36,8 @@ export class ShareStatsResponse {
articleTitle: string;
facebookShares: number;
twitterShares: number;
whatsappShares: number;
instagramShares: number;
tiktokShares: number;
telegramShares: number;
linkShares: number;
totalShares: number;
@@ -11,7 +11,8 @@ import { Article } from '../entities';
export type SharePlatform =
| 'facebook'
| 'twitter'
| 'whatsapp'
| 'instagram'
| 'tiktok'
| 'telegram'
| 'link';
@@ -48,7 +49,8 @@ export interface ShareStats {
articleTitle: string;
facebookShares: number;
twitterShares: number;
whatsappShares: number;
instagramShares: number;
tiktokShares: number;
telegramShares: number;
linkShares: number;
totalShares: number;
@@ -53,8 +53,10 @@ export class AnalyticsService {
return 'facebookShares';
case 'twitter':
return 'twitterShares';
case 'whatsapp':
return 'whatsappShares';
case 'instagram':
return 'instagramShares';
case 'tiktok':
return 'tiktokShares';
case 'telegram':
return 'telegramShares';
default:
@@ -72,20 +74,21 @@ export class AnalyticsService {
'article.title as "articleTitle"',
'article.facebookShares as "facebookShares"',
'article.twitterShares as "twitterShares"',
'article.whatsappShares as "whatsappShares"',
'article.instagramShares as "instagramShares"',
'article.tiktokShares as "tiktokShares"',
'article.telegramShares as "telegramShares"',
'article.views as "views"',
'article.createdAt as "createdAt"',
'article.updatedAt as "updatedAt"',
])
.addSelect(
`(article.facebookShares + article.twitterShares + article.whatsappShares + article.telegramShares) as "totalShares"`,
`(article.facebookShares + article.twitterShares + article.instagramShares + article.tiktokShares + article.telegramShares) as "totalShares"`,
)
.addSelect(
`CASE
WHEN article.views > 0
THEN ROUND(
(article.facebookShares + article.twitterShares + article.whatsappShares + article.telegramShares)::decimal / article.views * 100,
(article.facebookShares + article.twitterShares + article.instagramShares + article.tiktokShares + article.telegramShares)::decimal / article.views * 100,
2
)
ELSE 0
@@ -117,7 +120,8 @@ export class AnalyticsService {
articleTitle: string;
facebookShares: string;
twitterShares: string;
whatsappShares: string;
instagramShares: string;
tiktokShares: string;
telegramShares: string;
views: string;
createdAt: string;
@@ -138,11 +142,16 @@ export class AnalyticsService {
const facebookShares = parseInt(rawResult.facebookShares) || 0;
const twitterShares = parseInt(rawResult.twitterShares) || 0;
const whatsappShares = parseInt(rawResult.whatsappShares) || 0;
const instagramShares = parseInt(rawResult.instagramShares) || 0;
const tiktokShares = parseInt(rawResult.tiktokShares) || 0;
const telegramShares = parseInt(rawResult.telegramShares) || 0;
const views = parseInt(rawResult.views) || 0;
const baseTotalShares =
facebookShares + twitterShares + whatsappShares + telegramShares;
facebookShares +
twitterShares +
instagramShares +
tiktokShares +
telegramShares;
const totalShares = baseTotalShares + linkShares;
const shareRate =
views > 0 ? parseFloat(((totalShares / views) * 100).toFixed(2)) : 0;
@@ -152,7 +161,8 @@ export class AnalyticsService {
articleTitle: rawResult.articleTitle,
facebookShares,
twitterShares,
whatsappShares,
instagramShares,
tiktokShares,
telegramShares,
linkShares,
totalShares,
@@ -217,14 +227,16 @@ export class AnalyticsService {
totalShares: number;
facebookShares: number;
twitterShares: number;
whatsappShares: number;
instagramShares: number;
tiktokShares: number;
telegramShares: number;
linkShares: number;
}> {
interface ArticleStatsRaw {
facebookShares: string;
twitterShares: string;
whatsappShares: string;
instagramShares: string;
tiktokShares: string;
telegramShares: string;
}
@@ -233,7 +245,8 @@ export class AnalyticsService {
.select([
'SUM(article.facebookShares) as facebookShares',
'SUM(article.twitterShares) as twitterShares',
'SUM(article.whatsappShares) as whatsappShares',
'SUM(article.instagramShares) as instagramShares',
'SUM(article.tiktokShares) as tiktokShares',
'SUM(article.telegramShares) as telegramShares',
])
.getRawOne()) as ArticleStatsRaw;
@@ -244,13 +257,15 @@ export class AnalyticsService {
const facebookShares = parseInt(articleStats?.facebookShares || '0') || 0;
const twitterShares = parseInt(articleStats?.twitterShares || '0') || 0;
const whatsappShares = parseInt(articleStats?.whatsappShares || '0') || 0;
const instagramShares = parseInt(articleStats?.instagramShares || '0') || 0;
const tiktokShares = parseInt(articleStats?.tiktokShares || '0') || 0;
const telegramShares = parseInt(articleStats?.telegramShares || '0') || 0;
const totalShares =
facebookShares +
twitterShares +
whatsappShares +
instagramShares +
tiktokShares +
telegramShares +
linkShares;
@@ -258,7 +273,8 @@ export class AnalyticsService {
totalShares,
facebookShares,
twitterShares,
whatsappShares,
instagramShares,
tiktokShares,
telegramShares,
linkShares,
};
+4 -1
View File
@@ -249,7 +249,10 @@ export class Article {
twitterShares: number;
@Column({ default: 0 })
whatsappShares: number;
instagramShares: number;
@Column({ default: 0 })
tiktokShares: number;
@Column({ default: 0 })
telegramShares: number;