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() | ||||
|   }, | ||||
| 
 | ||||
|   async findAndCountAll(findOptions, limit, offset) { | ||||
|     const findOptionsKey = stringifySequelizeQuery(findOptions) | ||||
|     Logger.debug(`[LibraryItemsBookFilters] findOptionsKey: ${findOptionsKey}`) | ||||
|   async findAndCountAll(findOptions, limit, offset, useCountCache) { | ||||
|     const model = Database.bookModel | ||||
|     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.offset = offset | ||||
| 
 | ||||
|     if (countCache.has(findOptionsKey)) { | ||||
|       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 | ||||
|     } | ||||
|     return await model.findAndCountAll(findOptions) | ||||
|   }, | ||||
| 
 | ||||
|   /** | ||||
| @ -434,19 +440,17 @@ module.exports = { | ||||
| 
 | ||||
|     const libraryItemIncludes = [] | ||||
|     const bookIncludes = [] | ||||
|     if (includeRSSFeed) { | ||||
| 
 | ||||
|     if (filterGroup === 'feed-open' || includeRSSFeed) { | ||||
|       const rssFeedRequired = filterGroup === 'feed-open' | ||||
|       libraryItemIncludes.push({ | ||||
|         model: Database.feedModel, | ||||
|         required: filterGroup === 'feed-open', | ||||
|         separate: true | ||||
|         required: rssFeedRequired, | ||||
|         separate: !rssFeedRequired | ||||
|       }) | ||||
|     } | ||||
|     if (filterGroup === 'feed-open' && !includeRSSFeed) { | ||||
|       libraryItemIncludes.push({ | ||||
|         model: Database.feedModel, | ||||
|         required: true | ||||
|       }) | ||||
|     } else if (filterGroup === 'share-open') { | ||||
| 
 | ||||
|     if (filterGroup === 'share-open') { | ||||
|       bookIncludes.push({ | ||||
|         model: Database.mediaItemShareModel, | ||||
|         required: true | ||||
| @ -608,7 +612,7 @@ module.exports = { | ||||
|     } | ||||
| 
 | ||||
|     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 libraryItem = bookExpanded.libraryItem | ||||
|  | ||||
| @ -105,22 +105,27 @@ module.exports = { | ||||
|     countCache.clear() | ||||
|   }, | ||||
| 
 | ||||
|   async findAndCountAll(findOptions, model, limit, offset) { | ||||
|     const cacheKey = stringifySequelizeQuery(findOptions) | ||||
|     if (!countCache.has(cacheKey)) { | ||||
|       const count = await model.count(findOptions) | ||||
|       countCache.set(cacheKey, count) | ||||
|   async findAndCountAll(findOptions, model, limit, offset, useCountCache) { | ||||
|     if (useCountCache) { | ||||
|       const countCacheKey = stringifySequelizeQuery(findOptions) | ||||
|       Logger.debug(`[LibraryItemsPodcastFilters] 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.offset = offset | ||||
| 
 | ||||
|     const rows = await model.findAll(findOptions) | ||||
| 
 | ||||
|     return { | ||||
|       rows, | ||||
|       count: countCache.get(cacheKey) | ||||
|     } | ||||
|     return await model.findAndCountAll(findOptions) | ||||
|   }, | ||||
| 
 | ||||
|   /** | ||||
| @ -199,7 +204,7 @@ module.exports = { | ||||
| 
 | ||||
|     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 libraryItem = podcastExpanded.libraryItem | ||||
| @ -323,7 +328,7 @@ module.exports = { | ||||
| 
 | ||||
|     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 libraryItem = ep.podcast.libraryItem | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user