mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 02:34:39 +00:00
feat: Add the ability to save search queries
I got tired of putting the same tag over and over, so...
This commit is contained in:
parent
7a08ca294a
commit
f13f98f19a
26 changed files with 880 additions and 80 deletions
|
@ -10,6 +10,7 @@ kotlin {
|
|||
sourceSets {
|
||||
val commonMain by getting {
|
||||
dependencies {
|
||||
api(projects.domain)
|
||||
api(libs.bundles.db)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
package yokai.data.source.browse.filter
|
||||
|
||||
import yokai.data.DatabaseHandler
|
||||
import yokai.domain.source.browse.filter.SavedSearchRepository
|
||||
import yokai.domain.source.browse.filter.models.RawSavedSearch
|
||||
|
||||
class SavedSearchRepositoryImpl(private val handler: DatabaseHandler) : SavedSearchRepository {
|
||||
override suspend fun findAll(): List<RawSavedSearch> = handler.awaitList {
|
||||
saved_searchQueries.findAll(RawSavedSearch::mapper)
|
||||
}
|
||||
|
||||
override fun subscribeAllBySourceId(sourceId: Long) = handler.subscribeToList {
|
||||
saved_searchQueries.findBySourceId(sourceId, RawSavedSearch::mapper)
|
||||
}
|
||||
|
||||
override suspend fun findAllBySourceId(sourceId: Long) = handler.awaitList {
|
||||
saved_searchQueries.findBySourceId(sourceId, RawSavedSearch::mapper)
|
||||
}
|
||||
|
||||
override suspend fun findOneBySourceIdAndName(sourceId: Long, name: String): RawSavedSearch? = handler.awaitFirstOrNull {
|
||||
saved_searchQueries.findBySourceIdAndName(sourceId, name, RawSavedSearch::mapper)
|
||||
}
|
||||
|
||||
override suspend fun findById(id: Long): RawSavedSearch? = handler.awaitFirstOrNull {
|
||||
saved_searchQueries.findById(id, RawSavedSearch::mapper)
|
||||
}
|
||||
|
||||
override suspend fun deleteById(id: Long) = handler.await {
|
||||
saved_searchQueries.deleteById(id)
|
||||
}
|
||||
|
||||
override suspend fun insert(sourceId: Long, name: String, query: String?, filtersJson: String?) =
|
||||
handler.awaitOneOrNullExecutable(inTransaction = true) {
|
||||
saved_searchQueries.insert(sourceId, name, query, filtersJson)
|
||||
saved_searchQueries.selectLastInsertedRowId()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
CREATE TABLE saved_search(
|
||||
-- TODO: Migrate the other tables to use 'id' instead of '_id'
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
source_id INTEGER NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
query TEXT,
|
||||
filters_json TEXT,
|
||||
UNIQUE (source_id, name)
|
||||
);
|
||||
|
||||
findAll:
|
||||
SELECT * FROM saved_search
|
||||
ORDER BY name COLLATE NOCASE ASC;
|
||||
|
||||
findBySourceId:
|
||||
SELECT * FROM saved_search WHERE source_id = :sourceId
|
||||
ORDER BY name COLLATE NOCASE ASC;
|
||||
|
||||
findBySourceIdAndName:
|
||||
SELECT * FROM saved_search WHERE source_id = :sourceId AND name = :name
|
||||
ORDER BY name COLLATE NOCASE ASC;
|
||||
|
||||
findById:
|
||||
SELECT * FROM saved_search WHERE id = :id
|
||||
ORDER BY name COLLATE NOCASE ASC;
|
||||
|
||||
deleteById:
|
||||
DELETE FROM saved_search WHERE id = :id;
|
||||
|
||||
insert:
|
||||
INSERT INTO saved_search(source_id, name, query, filters_json)
|
||||
VALUES (:sourceId, :name, :query, :filtersJson);
|
||||
|
||||
selectLastInsertedRowId:
|
||||
SELECT last_insert_rowid();
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE saved_search(
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
source_id INTEGER NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
query TEXT,
|
||||
filters_json TEXT,
|
||||
UNIQUE (source_id, name)
|
||||
);
|
Loading…
Add table
Add a link
Reference in a new issue