fix subscription and public item orders too
This commit is contained in:
@ -40,7 +40,7 @@ import {
|
||||
countDailyServiceUsage,
|
||||
createServiceUsage,
|
||||
} from './services/service_usage'
|
||||
import { findSubscriptionsByNames } from './services/subscriptions'
|
||||
import { batchGetSubscriptionsByNames } from './services/subscriptions'
|
||||
import { batchGetUploadFilesByIds } from './services/upload_file'
|
||||
import { tracer } from './tracing'
|
||||
import { getClaimsByToken, setAuthInCookie } from './utils/auth'
|
||||
@ -122,7 +122,7 @@ const contextFunc: ContextFunction<ExpressContext, ResolverContext> = async ({
|
||||
throw new Error('No user id found in claims')
|
||||
}
|
||||
|
||||
return findSubscriptionsByNames(claims?.uid || '', names as string[])
|
||||
return batchGetSubscriptionsByNames(claims.uid, names as string[])
|
||||
}),
|
||||
},
|
||||
}
|
||||
|
||||
@ -640,13 +640,16 @@ export const functionResolvers = {
|
||||
ctx: WithDataSourcesContext
|
||||
) {
|
||||
const items = section.items
|
||||
console.log('items', items)
|
||||
|
||||
const libraryItemIds = items
|
||||
.filter((item) => item.type === 'library_item')
|
||||
.map((item) => item.id)
|
||||
console.log('libraryItemIds', libraryItemIds)
|
||||
const libraryItems = (
|
||||
await ctx.dataLoaders.libraryItems.loadMany(libraryItemIds)
|
||||
).filter((libraryItem) => !isError(libraryItem)) as Array<LibraryItem>
|
||||
console.log('libraryItems', libraryItems)
|
||||
|
||||
const publicItemIds = section.items
|
||||
.filter((item) => item.type === 'public_item')
|
||||
@ -657,9 +660,11 @@ export const functionResolvers = {
|
||||
|
||||
return items
|
||||
.map((item) => {
|
||||
console.log('item', item)
|
||||
const libraryItem = libraryItems.find(
|
||||
(libraryItem) => item.id === libraryItem.id
|
||||
)
|
||||
console.log('libraryItem', libraryItem)
|
||||
if (libraryItem) {
|
||||
return {
|
||||
id: libraryItem.id,
|
||||
@ -736,6 +741,13 @@ export const functionResolvers = {
|
||||
const subscription = await ctx.dataLoaders.subscriptions.load(
|
||||
item.subscription
|
||||
)
|
||||
if (!subscription) {
|
||||
return {
|
||||
name: item.siteName,
|
||||
icon: item.siteIcon,
|
||||
type: HomeItemSourceType.Library,
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
id: subscription.id,
|
||||
|
||||
@ -57,7 +57,7 @@ export interface RequestContext {
|
||||
uploadFiles: DataLoader<string, UploadFile | undefined>
|
||||
libraryItems: DataLoader<string, LibraryItem | undefined>
|
||||
publicItems: DataLoader<string, PublicItem | undefined>
|
||||
subscriptions: DataLoader<string, Subscription>
|
||||
subscriptions: DataLoader<string, Subscription | undefined>
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,77 +1,18 @@
|
||||
import { PublicItem } from '../entity/public_item'
|
||||
import { HomeItem } from '../generated/graphql'
|
||||
import { authTrx } from '../repository'
|
||||
import { findLibraryItemsByIds } from './library_item'
|
||||
|
||||
export const batchGetPublicItems = async (
|
||||
ids: readonly string[]
|
||||
): Promise<Array<PublicItem>> => {
|
||||
return authTrx(async (tx) =>
|
||||
tx
|
||||
.getRepository(PublicItem)
|
||||
.createQueryBuilder('public_item')
|
||||
.where('public_item.id IN (:...ids)', { ids })
|
||||
.getMany()
|
||||
)
|
||||
}
|
||||
|
||||
export const batchGetHomeItems = async (
|
||||
ids: readonly string[]
|
||||
): Promise<Array<HomeItem>> => {
|
||||
const libraryItems = await findLibraryItemsByIds(ids as string[])
|
||||
|
||||
): Promise<Array<PublicItem | undefined>> => {
|
||||
const publicItems = await authTrx(async (tx) =>
|
||||
tx
|
||||
.getRepository(PublicItem)
|
||||
.createQueryBuilder('public_item')
|
||||
.innerJoin(
|
||||
'public_item_stats',
|
||||
'stats',
|
||||
'stats.public_item_id = public_item.id'
|
||||
)
|
||||
.innerJoin(
|
||||
'public_item_source',
|
||||
'source',
|
||||
'source.id = public_item.source_id'
|
||||
)
|
||||
.where('public_item.id IN (:...ids)', { ids })
|
||||
.getMany()
|
||||
)
|
||||
|
||||
return ids
|
||||
.map((id) => {
|
||||
const libraryItem = libraryItems.find((li) => li.id === id)
|
||||
if (libraryItem) {
|
||||
return {
|
||||
...libraryItem,
|
||||
date: libraryItem.savedAt,
|
||||
url: libraryItem.originalUrl,
|
||||
canArchive: !libraryItem.archivedAt,
|
||||
canDelete: !libraryItem.deletedAt,
|
||||
canSave: false,
|
||||
dir: libraryItem.directionality,
|
||||
subscription: null,
|
||||
previewContent: libraryItem.description,
|
||||
} as HomeItem
|
||||
} else {
|
||||
const publicItem = publicItems.find((pi) => pi.id === id)
|
||||
return publicItem
|
||||
? ({
|
||||
...publicItem,
|
||||
date: publicItem.createdAt,
|
||||
url: publicItem.url,
|
||||
canArchive: false,
|
||||
canDelete: false,
|
||||
canSave: true,
|
||||
broadcastCount: publicItem.stats.broadcastCount,
|
||||
likeCount: publicItem.stats.likeCount,
|
||||
saveCount: publicItem.stats.saveCount,
|
||||
subscription: publicItem.source,
|
||||
} as HomeItem)
|
||||
: undefined
|
||||
}
|
||||
})
|
||||
.filter((item) => item !== undefined) as Array<HomeItem>
|
||||
return ids.map((id) => publicItems.find((pi) => pi.id === id))
|
||||
}
|
||||
|
||||
export const findUnseenPublicItems = async (
|
||||
|
||||
@ -21,6 +21,17 @@ interface SaveSubscriptionInput {
|
||||
export const UNSUBSCRIBE_EMAIL_TEXT =
|
||||
'This message was automatically generated by Omnivore.'
|
||||
|
||||
export const batchGetSubscriptionsByNames = async (
|
||||
userId: string,
|
||||
names: string[]
|
||||
) => {
|
||||
const subscriptions = await findSubscriptionsByNames(userId, names)
|
||||
|
||||
return names.map((name) =>
|
||||
subscriptions.find((s) => s?.name === name || s?.url === name)
|
||||
)
|
||||
}
|
||||
|
||||
export const parseUnsubscribeMailTo = (unsubscribeMailTo: string) => {
|
||||
const parsed = new URL(`mailto://${unsubscribeMailTo}`)
|
||||
const subject = parsed.searchParams.get('subject') || 'Unsubscribe'
|
||||
|
||||
Reference in New Issue
Block a user