fedicrawl/application/src/Storage/Feeds/createFeed.ts

42 wiersze
1.5 KiB
TypeScript

import StorageFeedData from './StorageFeedData'
import { ElasticClient } from '../ElasticClient'
import feedIndex from '../Definitions/feedIndex'
import getFeed from './getFeed'
import Feed from '../Definitions/Feed'
import Node from '../Definitions/Node'
export const createFeed = async (elastic: ElasticClient, feedData: StorageFeedData, node: Node): Promise<Feed> => {
const fullName = `${feedData.name}@${node.domain}`
await elastic.create<Feed>({
index: feedIndex,
id: fullName,
document: {
fullName,
domain: node.domain,
url: feedData.url,
name: feedData.name,
bot: feedData.bot,
avatar: feedData.avatar,
followersCount: feedData.followersCount,
followingCount: feedData.followingCount,
statusesCount: feedData.statusesCount,
lastStatusAt: feedData.lastStatusAt?.getTime(),
description: feedData.description,
displayName: feedData.displayName,
locked: feedData.locked,
createdAt: feedData.createdAt.getTime(),
foundAt: (new Date()).getTime(),
fields: feedData.fields.map(field => {
return { name: field.name, value: field.value }
}),
extractedEmails: feedData.extractedEmails,
extractedTags: feedData.extractedTags,
parentFeedName: feedData.parentFeed?.name,
parentFeedDomain: feedData.parentFeed?.hostDomain,
type: feedData.type
}
})
console.info('Created new feed', { feedName: feedData.name, nodeDomain: node.domain })
return getFeed(elastic, fullName)
}