mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	Merge pull request #4020 from mikiher/invalidate-count-cache-on-entity-update
Invalidate count cache on entity update
This commit is contained in:
		
						commit
						a864c6bcc6
					
				| @ -344,22 +344,28 @@ module.exports = { | |||||||
|     countCache.clear() |     countCache.clear() | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|   async findAndCountAll(findOptions, limit, offset) { |   async findAndCountAll(findOptions, limit, offset, useCountCache) { | ||||||
|     const findOptionsKey = stringifySequelizeQuery(findOptions) |     const model = Database.bookModel | ||||||
|     Logger.debug(`[LibraryItemsBookFilters] findOptionsKey: ${findOptionsKey}`) |     if (useCountCache) { | ||||||
|  |       const countCacheKey = stringifySequelizeQuery(findOptions) | ||||||
|  |       Logger.debug(`[LibraryItemsBookFilters] countCacheKey: ${countCacheKey}`) | ||||||
|  |       if (!countCache.has(countCacheKey)) { | ||||||
|  |         const count = await model.count(findOptions) | ||||||
|  |         countCache.set(countCacheKey, count) | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       findOptions.limit = limit || null | ||||||
|  |       findOptions.offset = offset | ||||||
|  | 
 | ||||||
|  |       const rows = await model.findAll(findOptions) | ||||||
|  | 
 | ||||||
|  |       return { rows, count: countCache.get(countCacheKey) } | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     findOptions.limit = limit || null |     findOptions.limit = limit || null | ||||||
|     findOptions.offset = offset |     findOptions.offset = offset | ||||||
| 
 | 
 | ||||||
|     if (countCache.has(findOptionsKey)) { |     return await model.findAndCountAll(findOptions) | ||||||
|       const rows = await Database.bookModel.findAll(findOptions) |  | ||||||
| 
 |  | ||||||
|       return { rows, count: countCache.get(findOptionsKey) } |  | ||||||
|     } else { |  | ||||||
|       const result = await Database.bookModel.findAndCountAll(findOptions) |  | ||||||
|       countCache.set(findOptionsKey, result.count) |  | ||||||
|       return result |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|   /** |   /** | ||||||
| @ -434,19 +440,17 @@ module.exports = { | |||||||
| 
 | 
 | ||||||
|     const libraryItemIncludes = [] |     const libraryItemIncludes = [] | ||||||
|     const bookIncludes = [] |     const bookIncludes = [] | ||||||
|     if (includeRSSFeed) { | 
 | ||||||
|  |     if (filterGroup === 'feed-open' || includeRSSFeed) { | ||||||
|  |       const rssFeedRequired = filterGroup === 'feed-open' | ||||||
|       libraryItemIncludes.push({ |       libraryItemIncludes.push({ | ||||||
|         model: Database.feedModel, |         model: Database.feedModel, | ||||||
|         required: filterGroup === 'feed-open', |         required: rssFeedRequired, | ||||||
|         separate: true |         separate: !rssFeedRequired | ||||||
|       }) |       }) | ||||||
|     } |     } | ||||||
|     if (filterGroup === 'feed-open' && !includeRSSFeed) { | 
 | ||||||
|       libraryItemIncludes.push({ |     if (filterGroup === 'share-open') { | ||||||
|         model: Database.feedModel, |  | ||||||
|         required: true |  | ||||||
|       }) |  | ||||||
|     } else if (filterGroup === 'share-open') { |  | ||||||
|       bookIncludes.push({ |       bookIncludes.push({ | ||||||
|         model: Database.mediaItemShareModel, |         model: Database.mediaItemShareModel, | ||||||
|         required: true |         required: true | ||||||
| @ -608,7 +612,7 @@ module.exports = { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     const findAndCountAll = process.env.QUERY_PROFILING ? profile(this.findAndCountAll) : this.findAndCountAll |     const findAndCountAll = process.env.QUERY_PROFILING ? profile(this.findAndCountAll) : this.findAndCountAll | ||||||
|     const { rows: books, count } = await findAndCountAll(findOptions, limit, offset) |     const { rows: books, count } = await findAndCountAll(findOptions, limit, offset, !filterGroup) | ||||||
| 
 | 
 | ||||||
|     const libraryItems = books.map((bookExpanded) => { |     const libraryItems = books.map((bookExpanded) => { | ||||||
|       const libraryItem = bookExpanded.libraryItem |       const libraryItem = bookExpanded.libraryItem | ||||||
|  | |||||||
| @ -105,22 +105,27 @@ module.exports = { | |||||||
|     countCache.clear() |     countCache.clear() | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|   async findAndCountAll(findOptions, model, limit, offset) { |   async findAndCountAll(findOptions, model, limit, offset, useCountCache) { | ||||||
|     const cacheKey = stringifySequelizeQuery(findOptions) |     if (useCountCache) { | ||||||
|     if (!countCache.has(cacheKey)) { |       const countCacheKey = stringifySequelizeQuery(findOptions) | ||||||
|       const count = await model.count(findOptions) |       Logger.debug(`[LibraryItemsPodcastFilters] countCacheKey: ${countCacheKey}`) | ||||||
|       countCache.set(cacheKey, count) |       if (!countCache.has(countCacheKey)) { | ||||||
|  |         const count = await model.count(findOptions) | ||||||
|  |         countCache.set(countCacheKey, count) | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       findOptions.limit = limit || null | ||||||
|  |       findOptions.offset = offset | ||||||
|  | 
 | ||||||
|  |       const rows = await model.findAll(findOptions) | ||||||
|  | 
 | ||||||
|  |       return { rows, count: countCache.get(countCacheKey) } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     findOptions.limit = limit || null |     findOptions.limit = limit || null | ||||||
|     findOptions.offset = offset |     findOptions.offset = offset | ||||||
| 
 | 
 | ||||||
|     const rows = await model.findAll(findOptions) |     return await model.findAndCountAll(findOptions) | ||||||
| 
 |  | ||||||
|     return { |  | ||||||
|       rows, |  | ||||||
|       count: countCache.get(cacheKey) |  | ||||||
|     } |  | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|   /** |   /** | ||||||
| @ -199,7 +204,7 @@ module.exports = { | |||||||
| 
 | 
 | ||||||
|     const findAndCountAll = process.env.QUERY_PROFILING ? profile(this.findAndCountAll) : this.findAndCountAll |     const findAndCountAll = process.env.QUERY_PROFILING ? profile(this.findAndCountAll) : this.findAndCountAll | ||||||
| 
 | 
 | ||||||
|     const { rows: podcasts, count } = await findAndCountAll(findOptions, Database.podcastModel, limit, offset) |     const { rows: podcasts, count } = await findAndCountAll(findOptions, Database.podcastModel, limit, offset, !filterGroup) | ||||||
| 
 | 
 | ||||||
|     const libraryItems = podcasts.map((podcastExpanded) => { |     const libraryItems = podcasts.map((podcastExpanded) => { | ||||||
|       const libraryItem = podcastExpanded.libraryItem |       const libraryItem = podcastExpanded.libraryItem | ||||||
| @ -323,7 +328,7 @@ module.exports = { | |||||||
| 
 | 
 | ||||||
|     const findAndCountAll = process.env.QUERY_PROFILING ? profile(this.findAndCountAll) : this.findAndCountAll |     const findAndCountAll = process.env.QUERY_PROFILING ? profile(this.findAndCountAll) : this.findAndCountAll | ||||||
| 
 | 
 | ||||||
|     const { rows: podcastEpisodes, count } = await findAndCountAll(findOptions, Database.podcastEpisodeModel, limit, offset) |     const { rows: podcastEpisodes, count } = await findAndCountAll(findOptions, Database.podcastEpisodeModel, limit, offset, !filterGroup) | ||||||
| 
 | 
 | ||||||
|     const libraryItems = podcastEpisodes.map((ep) => { |     const libraryItems = podcastEpisodes.map((ep) => { | ||||||
|       const libraryItem = ep.podcast.libraryItem |       const libraryItem = ep.podcast.libraryItem | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user