Skip to content

Commit 0140c93

Browse files
committed
fix: manual subscription adding
1 parent 1d48024 commit 0140c93

File tree

7 files changed

+126
-56
lines changed

7 files changed

+126
-56
lines changed

apps/aigency-backend/src/grabbers/reddit/reddit.module.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import { Module } from '@nestjs/common';
1+
import { forwardRef, Module } from '@nestjs/common';
22
import { ContextModule } from 'src/context';
33
import { FinderModule } from 'src/finder';
44
import { SubscriptionModule } from 'src/subscription';
55
import { RedditController } from './reddit.controller';
66
import { RedditService } from './reddit.service';
77

88
@Module({
9-
imports: [SubscriptionModule, ContextModule, FinderModule],
9+
imports: [forwardRef(() => SubscriptionModule), ContextModule, FinderModule],
1010
providers: [RedditService],
1111
controllers: [RedditController],
1212
exports: [RedditService],

apps/aigency-backend/src/grabbers/reddit/reddit.service.ts

Lines changed: 66 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,51 @@
1-
import { Injectable } from '@nestjs/common';
1+
import { forwardRef, Inject, Injectable } from '@nestjs/common';
22
import * as convertHTML from 'html-to-text';
33
import { ContextService } from 'src/context/context.service';
44
import { FinderService } from 'src/finder/finder.service';
55
import { SubscriptionService } from 'src/subscription/subscription.service';
66
import * as convertXML from 'xml-js';
77

8-
type RedditEntry = {
8+
export type RedditMessage = {
9+
author: {
10+
name: {
11+
_text: string;
12+
};
13+
uri: {
14+
_text: string;
15+
};
16+
};
17+
category: {
18+
_attributes: {
19+
term: string;
20+
label: string;
21+
};
22+
};
23+
content: {
24+
_attributes: {
25+
type: string;
26+
};
27+
_text: string;
28+
};
29+
id: {
30+
_text: string;
31+
};
32+
link: {
33+
_attributes: {
34+
href: string;
35+
};
36+
};
37+
updated: {
38+
_text: string;
39+
};
40+
published: {
41+
_text: string;
42+
};
43+
title: {
44+
_text: string;
45+
};
46+
};
47+
48+
export type RedditEntry = {
949
feed: {
1050
id: {
1151
_text: string;
@@ -16,56 +56,40 @@ type RedditEntry = {
1656
title: {
1757
_text: string;
1858
};
19-
entry: {
20-
author: {
21-
name: {
22-
_text: string;
23-
};
24-
uri: {
25-
_text: string;
26-
};
27-
};
28-
category: {
29-
_attributes: {
30-
term: string;
31-
label: string;
32-
};
33-
};
34-
content: {
35-
_attributes: {
36-
type: string;
37-
};
38-
_text: string;
39-
};
40-
id: {
41-
_text: string;
42-
};
43-
link: {
44-
_attributes: {
45-
href: string;
46-
};
47-
};
48-
updated: {
49-
_text: string;
50-
};
51-
published: {
52-
_text: string;
53-
};
54-
title: {
55-
_text: string;
56-
};
57-
}[];
59+
entry: RedditMessage[];
5860
};
5961
};
6062

6163
@Injectable()
6264
export class RedditService {
6365
constructor(
66+
@Inject(forwardRef(() => SubscriptionService))
6467
private subscriptionService: SubscriptionService,
6568
private contextService: ContextService,
6669
private finderService: FinderService,
6770
) {}
6871

72+
async getRedditChannelMessages(channelName: string) {
73+
try {
74+
const rss = await this.getRSS(
75+
`https://www.reddit.com/${channelName}.rss`,
76+
);
77+
if (!rss) return;
78+
const xml = this.parseXML(rss);
79+
if (
80+
!xml ||
81+
!xml.feed ||
82+
!xml.feed.entry ||
83+
xml.feed.title._text === 'search results'
84+
)
85+
return;
86+
87+
return xml.feed.entry;
88+
} catch (error) {
89+
console.log(error);
90+
}
91+
}
92+
6993
async grabReddits() {
7094
try {
7195
const activeSubscriptions =
@@ -91,6 +115,7 @@ export class RedditService {
91115
.map((sub) => sub.link),
92116
),
93117
);
118+
// console.log('uniqueReddits', uniqueReddits);
94119

95120
const submissionXmls = await Promise.allSettled(
96121
uniqueReddits.map((reddit) =>

apps/aigency-backend/src/grabbers/telegram/get-messages.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Dialog } from 'telegram/tl/custom/dialog';
44
const MSG_FETCH_LIMIT = 10;
55
const MSG_FETCH_TIME_LIMIT_MINUTES = 60;
66

7-
export type Message = {
7+
export type TelegramMessage = {
88
id: number;
99
text: string;
1010
date: number;
@@ -28,8 +28,8 @@ export const getMessagesFromChannel = async ({
2828
>;
2929
isNew?: boolean;
3030
lastMessageId?: number;
31-
}): Promise<Message[]> => {
32-
const messages: Message[] = [];
31+
}): Promise<TelegramMessage[]> => {
32+
const messages: TelegramMessage[] = [];
3333
if (
3434
dialog.entity?.className === 'Channel' ||
3535
dialog.entity?.className === 'Chat'
@@ -143,7 +143,7 @@ export const getMessages = async ({
143143
return getMessagesFromChannel({ client, dialog, lastMessageId, isNew });
144144
}
145145
} else {
146-
const result: Message[] = [];
146+
const result: TelegramMessage[] = [];
147147
for (let i = 0; i < dialogs.length; i++) {
148148
const messages = await getMessagesFromChannel({
149149
client,

apps/aigency-backend/src/grabbers/telegram/telegram.module.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import { Module } from '@nestjs/common';
1+
import { forwardRef, Module } from '@nestjs/common';
22
import { ContextModule } from 'src/context';
33
import { FinderModule } from 'src/finder';
44
import { SubscriptionModule } from 'src/subscription';
55
import { TelegramController } from './telegram.controller';
66
import { TelegramService } from './telegram.service';
77

88
@Module({
9-
imports: [SubscriptionModule, ContextModule, FinderModule],
9+
imports: [forwardRef(() => SubscriptionModule), ContextModule, FinderModule],
1010
providers: [TelegramService],
1111
controllers: [TelegramController],
1212
exports: [TelegramService],

apps/aigency-backend/src/grabbers/telegram/telegram.service.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Injectable } from '@nestjs/common';
1+
import { forwardRef, Inject, Injectable } from '@nestjs/common';
22
import * as dotenv from 'dotenv';
33
import { ContextService } from 'src/context/context.service';
44
import { FinderService } from 'src/finder/finder.service';
@@ -19,6 +19,7 @@ export class TelegramService {
1919
private T_SESSION: string;
2020

2121
constructor(
22+
@Inject(forwardRef(() => SubscriptionService))
2223
private subscriptionService: SubscriptionService,
2324
private contextService: ContextService,
2425
private finderService: FinderService,
@@ -48,6 +49,19 @@ export class TelegramService {
4849
}
4950
}
5051

52+
async getTelegramChannelMessages(channelName: string) {
53+
try {
54+
const telegramEntry = await this.getTelegramClientAndDialogs();
55+
if (!telegramEntry) return;
56+
const { client, dialogs } = telegramEntry;
57+
if (!client || !dialogs) return;
58+
const messages = await getMessages({ client, dialogs, channelName });
59+
return messages;
60+
} catch (error) {
61+
console.log(error);
62+
}
63+
}
64+
5165
async grabTelegrams() {
5266
try {
5367
const activeSubscriptions =
@@ -74,6 +88,7 @@ export class TelegramService {
7488
.filter(Boolean),
7589
),
7690
);
91+
// console.log('uniqueTelegrams', uniqueTelegrams);
7792

7893
const telegramEntry = await this.getTelegramClientAndDialogs();
7994
if (!telegramEntry) return;
@@ -98,6 +113,7 @@ export class TelegramService {
98113
console.log(error);
99114
}
100115
}
116+
// console.log('telegramMessages', telegramMessages);
101117

102118
// save profiles
103119
await Promise.all(

apps/aigency-backend/src/subscription/subscription.module.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1-
import { Module } from '@nestjs/common';
1+
import { forwardRef, Module } from '@nestjs/common';
22
import { TypeOrmModule } from '@nestjs/typeorm';
33
import { Subscription } from './subscription.entity';
44
import { SubscriptionRepository } from './subscription.repository';
55
import { SubscriptionService } from './subscription.service';
66
import { SubscriptionController } from './subscription.controller';
7+
import { TelegramModule } from 'src/grabbers/telegram';
8+
import { RedditModule } from 'src/grabbers/reddit';
79

810
@Module({
9-
imports: [TypeOrmModule.forFeature([Subscription])],
11+
imports: [
12+
TypeOrmModule.forFeature([Subscription]),
13+
forwardRef(() => TelegramModule),
14+
forwardRef(() => RedditModule),
15+
],
1016
providers: [SubscriptionRepository, SubscriptionService],
1117
controllers: [SubscriptionController],
1218
exports: [SubscriptionService],

apps/aigency-backend/src/subscription/subscription.service.ts

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1-
import { Injectable } from '@nestjs/common';
1+
import { forwardRef, Inject, Injectable } from '@nestjs/common';
22
import { SubscriptionRepository } from './subscription.repository';
3+
import { TelegramService } from 'src/grabbers/telegram/telegram.service';
4+
import { RedditService } from 'src/grabbers/reddit/reddit.service';
35

46
@Injectable()
57
export class SubscriptionService {
68
constructor(
79
private readonly subscriptionRepository: SubscriptionRepository,
10+
@Inject(forwardRef(() => TelegramService))
11+
private readonly telegramService: TelegramService,
12+
@Inject(forwardRef(() => RedditService))
13+
private readonly redditService: RedditService,
814
) {}
915

1016
async getSubscriptions(props: {
@@ -53,16 +59,33 @@ export class SubscriptionService {
5359
isByFinder: boolean;
5460
}) {
5561
const { userId, source, link, timestamp, isByFinder } = props;
62+
63+
// ToDo: hardcoded subscription checks. Move to service?
64+
let channelName: string | null | undefined = null;
65+
if (source === 'telegram') {
66+
const messages =
67+
await this.telegramService.getTelegramChannelMessages(link);
68+
console.log(messages);
69+
if (messages?.length) channelName = messages[0].source;
70+
} else if (source === 'reddit') {
71+
const messages = await this.redditService.getRedditChannelMessages(link);
72+
console.log(messages);
73+
if (messages?.length) {
74+
channelName = messages[0].category._attributes.label;
75+
}
76+
}
77+
78+
// console.log(channelName);
79+
5680
const subscription = this.subscriptionRepository.create({
5781
userId,
5882
source,
59-
link,
83+
link: channelName ?? link,
6084
isEnabled: true,
6185
lastSeenPostTimestamp: timestamp ?? null,
6286
isByFinder,
6387
});
64-
65-
// ToDo: check subscription link before save
88+
// console.log(subscription);
6689

6790
await this.subscriptionRepository.insert(subscription);
6891

0 commit comments

Comments
 (0)