avoid adding duplicate feed/saved search

This commit is contained in:
Cuong-Tran 2024-08-05 17:52:45 +07:00 committed by Tran M. Cuong
parent c43015439d
commit 2a77232d80
3 changed files with 49 additions and 15 deletions

View file

@ -49,13 +49,27 @@ class FeedSavedSearchRepositoryImpl(
}
override suspend fun insert(feedSavedSearch: FeedSavedSearch): Long {
return handler.awaitOneExecutable(true) {
feed_saved_searchQueries.insert(
feedSavedSearch.source,
feedSavedSearch.savedSearch,
feedSavedSearch.global,
)
feed_saved_searchQueries.selectLastInsertedRowId()
// KMK -->
return handler.await(true) {
val currentFeeds = handler.awaitList {
feed_saved_searchQueries.selectAll(FeedSavedSearchMapper::map)
}
val existedFeedId = currentFeeds.find { currentFeed ->
currentFeed.source == feedSavedSearch.source &&
currentFeed.savedSearch == feedSavedSearch.savedSearch &&
currentFeed.global == feedSavedSearch.global
}?.id
existedFeedId
// KMK <--
?: handler.awaitOneExecutable(true) {
feed_saved_searchQueries.insert(
feedSavedSearch.source,
feedSavedSearch.savedSearch,
feedSavedSearch.global,
)
feed_saved_searchQueries.selectLastInsertedRowId()
}
}
}

View file

@ -26,14 +26,29 @@ class SavedSearchRepositoryImpl(
}
override suspend fun insert(savedSearch: SavedSearch): Long {
return handler.awaitOneExecutable(true) {
saved_searchQueries.insert(
savedSearch.source,
savedSearch.name,
savedSearch.query,
savedSearch.filtersJson,
)
saved_searchQueries.selectLastInsertedRowId()
// KMK -->
return handler.await(true) {
val currentSavedSearches = handler.awaitList {
saved_searchQueries.selectAll(SavedSearchMapper::map)
}
val existedSavedSearchId = currentSavedSearches.find { currentSavedSearch ->
currentSavedSearch.source == savedSearch.source &&
currentSavedSearch.name == savedSearch.name &&
currentSavedSearch.query == savedSearch.query &&
currentSavedSearch.filtersJson == savedSearch.filtersJson
}?.id
existedSavedSearchId
// KMK <--
?: handler.awaitOneExecutable(true) {
saved_searchQueries.insert(
savedSearch.source,
savedSearch.name,
savedSearch.query,
savedSearch.filtersJson,
)
saved_searchQueries.selectLastInsertedRowId()
}
}
}

View file

@ -12,6 +12,11 @@ CREATE TABLE feed_saved_search (
CREATE INDEX feed_saved_search_saved_search_index ON feed_saved_search(saved_search);
-- KMK -->
selectAll:
SELECT * FROM feed_saved_search ORDER BY feed_order;
-- KMK <--
selectAllGlobal:
SELECT * FROM feed_saved_search WHERE global = 1 ORDER BY feed_order;