diff --git a/packages/api/src/generated/graphql.ts b/packages/api/src/generated/graphql.ts index 2c6f4fa11..fd24070f3 100644 --- a/packages/api/src/generated/graphql.ts +++ b/packages/api/src/generated/graphql.ts @@ -2839,8 +2839,10 @@ export type Subscription = { id: Scalars['ID']; isPrivate?: Maybe; lastFetchedAt?: Maybe; + mostRecentItemDate?: Maybe; name: Scalars['String']; newsletterEmail?: Maybe; + refreshedAt?: Maybe; status: SubscriptionStatus; type: SubscriptionType; unsubscribeHttpUrl?: Maybe; @@ -3210,9 +3212,10 @@ export type UpdateSubscriptionInput = { folder?: InputMaybe; id: Scalars['ID']; isPrivate?: InputMaybe; - lastFetchedAt?: InputMaybe; lastFetchedChecksum?: InputMaybe; + mostRecentItemDate?: InputMaybe; name?: InputMaybe; + refreshedAt?: InputMaybe; scheduledAt?: InputMaybe; status?: InputMaybe; }; @@ -6193,8 +6196,10 @@ export type SubscriptionResolvers; isPrivate?: SubscriptionResolver, "isPrivate", ParentType, ContextType>; lastFetchedAt?: SubscriptionResolver, "lastFetchedAt", ParentType, ContextType>; + mostRecentItemDate?: SubscriptionResolver, "mostRecentItemDate", ParentType, ContextType>; name?: SubscriptionResolver; newsletterEmail?: SubscriptionResolver, "newsletterEmail", ParentType, ContextType>; + refreshedAt?: SubscriptionResolver, "refreshedAt", ParentType, ContextType>; status?: SubscriptionResolver; type?: SubscriptionResolver; unsubscribeHttpUrl?: SubscriptionResolver, "unsubscribeHttpUrl", ParentType, ContextType>; diff --git a/packages/api/src/generated/schema.graphql b/packages/api/src/generated/schema.graphql index a4ea6802d..e81e604d9 100644 --- a/packages/api/src/generated/schema.graphql +++ b/packages/api/src/generated/schema.graphql @@ -2235,8 +2235,10 @@ type Subscription { id: ID! isPrivate: Boolean lastFetchedAt: Date + mostRecentItemDate: Date name: String! newsletterEmail: String + refreshedAt: Date status: SubscriptionStatus! type: SubscriptionType! unsubscribeHttpUrl: String @@ -2577,9 +2579,10 @@ input UpdateSubscriptionInput { folder: String id: ID! isPrivate: Boolean - lastFetchedAt: Date lastFetchedChecksum: String + mostRecentItemDate: Date name: String + refreshedAt: Date scheduledAt: Date status: SubscriptionStatus } diff --git a/packages/api/src/jobs/rss/refreshFeed.ts b/packages/api/src/jobs/rss/refreshFeed.ts index 86579476c..496d1e4c3 100644 --- a/packages/api/src/jobs/rss/refreshFeed.ts +++ b/packages/api/src/jobs/rss/refreshFeed.ts @@ -6,9 +6,9 @@ import Parser, { Item } from 'rss-parser' import { promisify } from 'util' import { env } from '../../env' import { redisDataSource } from '../../redis_data_source' +import { updateSubscription } from '../../services/update_subscription' import createHttpTaskWithToken from '../../utils/createTask' import { RSSRefreshContext } from './refreshAllFeeds' -import { updateSubscription } from '../../services/update_subscription' type FolderType = 'following' | 'inbox' @@ -429,6 +429,8 @@ const processSubscription = async ( folder: FolderType, feed: RssFeed ) => { + const refreshedAt = new Date() + let lastItemFetchedAt: Date | null = null let lastValidItem: RssFeedItem | null = null @@ -549,11 +551,12 @@ const processSubscription = async ( const updatePeriodInMs = getUpdatePeriodInHours(feed) * 60 * 60 * 1000 const nextScheduledAt = scheduledAt + updatePeriodInMs * updateFrequency - // update subscription lastFetchedAt + // update subscription mostRecentItemDate and refreshedAt const updatedSubscription = await updateSubscription(userId, subscriptionId, { - lastFetchedAt: lastItemFetchedAt, + mostRecentItemDate: lastItemFetchedAt, lastFetchedChecksum: updatedLastFetchedChecksum, scheduledAt: new Date(nextScheduledAt), + refreshedAt, }) console.log('Updated subscription', updatedSubscription) } diff --git a/packages/api/src/schema.ts b/packages/api/src/schema.ts index 60e88f7bc..298904d62 100755 --- a/packages/api/src/schema.ts +++ b/packages/api/src/schema.ts @@ -2600,7 +2600,6 @@ const schema = gql` id: ID! name: String description: String - lastFetchedAt: Date lastFetchedChecksum: String status: SubscriptionStatus scheduledAt: Date @@ -2608,6 +2607,8 @@ const schema = gql` autoAddToLibrary: Boolean fetchContent: Boolean folder: String + refreshedAt: Date + mostRecentItemDate: Date } union UpdateSubscriptionResult = diff --git a/packages/api/src/services/update_subscription.ts b/packages/api/src/services/update_subscription.ts index 1106e3043..c74b43f48 100644 --- a/packages/api/src/services/update_subscription.ts +++ b/packages/api/src/services/update_subscription.ts @@ -1,8 +1,4 @@ -import { Subscription } from '../entity/subscription' -import { - SubscriptionStatus, - UpdateSubscriptionInput, -} from '../generated/graphql' +import { Subscription, SubscriptionStatus } from '../entity/subscription' import { getRepository } from '../repository' const ensureOwns = async (userId: string, subscriptionId: string) => { @@ -23,11 +19,12 @@ type UpdateSubscriptionData = { fetchContent?: boolean | null folder?: string | null isPrivate?: boolean | null - lastFetchedAt?: Date | null + mostRecentItemDate?: Date | null lastFetchedChecksum?: string | null name?: string | null scheduledAt?: Date | null status?: SubscriptionStatus | null + refreshedAt?: Date | null } export const updateSubscription = async ( @@ -42,9 +39,8 @@ export const updateSubscription = async ( id: subscriptionId, name: newData.name || undefined, description: newData.description || undefined, - lastFetchedAt: newData.lastFetchedAt - ? new Date(newData.lastFetchedAt) - : undefined, + mostRecentItemDate: newData.mostRecentItemDate || undefined, + refreshedAt: newData.refreshedAt || undefined, lastFetchedChecksum: newData.lastFetchedChecksum || undefined, status: newData.status || undefined, scheduledAt: newData.scheduledAt