Skip to content

Commit

Permalink
Clean up categories id import
Browse files Browse the repository at this point in the history
  • Loading branch information
prof18 committed Jun 4, 2024
1 parent f7f7a6e commit 7e39f4f
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ data class ParsedFeedSource(
val id: String,
val url: String,
val title: String,
val categoryName: CategoryName?,
val category: FeedSourceCategory?,
val logoUrl: String?,
) {
data class Builder(
Expand Down Expand Up @@ -33,10 +33,11 @@ data class ParsedFeedSource(
id = url.hashCode().toString(),
url = url!!,
title = title!!,
categoryName = if (category != null) {
CategoryName(requireNotNull(category))
} else {
null
category = category?.let { categoryName ->
FeedSourceCategory(
id = categoryName.hashCode().toString(),
title = categoryName,
)
},
logoUrl = logoUrl,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import app.cash.sqldelight.coroutines.mapToList
import app.cash.sqldelight.coroutines.mapToOneOrDefault
import app.cash.sqldelight.db.SqlDriver
import co.touchlab.kermit.Logger
import com.prof18.feedflow.core.model.CategoryName
import com.prof18.feedflow.core.model.FeedFilter
import com.prof18.feedflow.core.model.FeedItem
import com.prof18.feedflow.core.model.FeedItemId
Expand Down Expand Up @@ -71,25 +70,25 @@ class DatabaseHelper(
.executeAsList()
}

suspend fun insertCategories(categories: List<CategoryName>) =
suspend fun insertCategories(categories: List<FeedSourceCategory>) =
dbRef.transactionWithContext(backgroundDispatcher) {
categories.forEach { category ->
dbRef.feedSourceCategoryQueries.insertFeedSourceCategory(
id = category.name.hashCode().toString(),
title = category.name,
id = category.id,
title = category.title,
)
}
}

suspend fun insertFeedSource(feedSource: List<ParsedFeedSource>) {
dbRef.transactionWithContext(backgroundDispatcher) {
feedSource.forEach { feedSource ->
if (feedSource.categoryName != null) {
if (feedSource.category != null) {
dbRef.feedSourceQueries.insertFeedSource(
url_hash = feedSource.hashCode().toString(),
url = feedSource.url,
title = feedSource.title,
title_ = feedSource.categoryName?.name.toString(),
category_id = feedSource.category?.id,
logo_url = feedSource.logoUrl,
)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ CREATE TABLE feed_source (

insertFeedSource:
INSERT OR IGNORE INTO feed_source(url_hash, url, title, category_id, logo_url)
VALUES (?,?,?,(SELECT id FROM feed_source_category WHERE title = ?), ?);
VALUES (?,?,?,?, ?);

insertFeedSourceWithNoCategory:
INSERT OR IGNORE INTO feed_source(url_hash, url, title, logo_url)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ class OPMLFeedParserTest {
fun `The number of feed in category are correct`() = runTest {
val feedSources = parser.generateFeedSources(opmlInput)

val techFeeds = feedSources.filter { it.categoryName?.name == "Tech" }
val basketFeeds = feedSources.filter { it.categoryName?.name == "Basket" }
val newsFeeds = feedSources.filter { it.categoryName?.name == "News" }
val techFeeds = feedSources.filter { it.category?.title == "Tech" }
val basketFeeds = feedSources.filter { it.category?.title == "Basket" }
val newsFeeds = feedSources.filter { it.category?.title == "News" }

assertTrue(techFeeds.size == 3)
assertTrue(basketFeeds.size == 2)
Expand All @@ -47,27 +47,27 @@ class OPMLFeedParserTest {

assertEquals("Hacker News", feedSources[0].title)
assertEquals("https://news.ycombinator.com/rss", feedSources[0].url)
assertEquals("Tech", feedSources[0].categoryName?.name)
assertEquals("Tech", feedSources[0].category?.title)

assertEquals("Android Police - Feed", feedSources[1].title)
assertEquals("https://www.androidpolice.com/feed/", feedSources[1].url)
assertEquals("Tech", feedSources[1].categoryName?.name)
assertEquals("Tech", feedSources[1].category?.title)

assertEquals("TechCrunch", feedSources[2].title)
assertEquals("https://techcrunch.com/feed/", feedSources[2].url)
assertEquals("Tech", feedSources[2].categoryName?.name)
assertEquals("Tech", feedSources[2].category?.title)

assertEquals("Pianeta Basket", feedSources[3].title)
assertEquals("https://www.pianetabasket.com/rss/", feedSources[3].url)
assertEquals("Basket", feedSources[3].categoryName?.name)
assertEquals("Basket", feedSources[3].category?.title)

assertEquals("Overtime", feedSources[4].title)
assertEquals("https://www.overtimebasket.com/feed/", feedSources[4].url)
assertEquals("Basket", feedSources[4].categoryName?.name)
assertEquals("Basket", feedSources[4].category?.title)

assertEquals("Il Post", feedSources[5].title)
assertEquals("https://feeds.ilpost.it/ilpost", feedSources[5].url)
assertEquals("News", feedSources[5].categoryName?.name)
assertEquals("News", feedSources[5].category?.title)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@ internal class FeedManagerRepository(
) {
suspend fun addFeedsFromFile(opmlInput: OpmlInput): NotValidFeedSources = withContext(dispatcherProvider.io) {
val feeds = opmlFeedHandler.generateFeedSources(opmlInput)
val categories = feeds.mapNotNull { it.categoryName }.distinct()
val categories = feeds.mapNotNull { it.category }.distinct()

val validatedFeeds = validateFeeds(feeds)

val validFeedSources = validatedFeeds
val validFeedSources: List<ParsedFeedSource> = validatedFeeds
.filter { it.isValid }
.map { it.parsedFeedSource }

Expand Down Expand Up @@ -100,7 +100,12 @@ internal class FeedManagerRepository(

suspend fun createCategory(categoryName: CategoryName) =
databaseHelper.insertCategories(
listOf(categoryName),
listOf(
FeedSourceCategory(
id = categoryName.name.hashCode().toString(),
title = categoryName.name,
),
),
)

fun deleteAllFeeds() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.prof18.feedflow.shared.domain.feed.retriever

import co.touchlab.kermit.Logger
import com.prof18.feedflow.core.model.CategoryName
import com.prof18.feedflow.core.model.FeedFilter
import com.prof18.feedflow.core.model.FeedItem
import com.prof18.feedflow.core.model.FeedItemId
Expand Down Expand Up @@ -231,9 +230,7 @@ internal class FeedRetrieverRepository(
id = urlToSave.hashCode().toString(),
url = urlToSave,
title = title,
categoryName = category?.title?.let {
CategoryName(it)
},
category = category,
logoUrl = logoUrl,
)

Expand All @@ -255,12 +252,7 @@ internal class FeedRetrieverRepository(
url = parsedFeedSource.url,
title = parsedFeedSource.title,
lastSyncTimestamp = currentTimestamp,
category = parsedFeedSource.categoryName?.let { categoryName ->
FeedSourceCategory(
id = categoryName.name.hashCode().toString(),
title = categoryName.name,
)
},
category = parsedFeedSource.category,
logoUrl = parsedFeedSource.logoUrl,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,14 +180,14 @@ val importExportStates = listOf(
id = "1",
url = "https://www.ilpost.it",
title = "Il Post",
categoryName = null,
category = null,
logoUrl = null,
),
ParsedFeedSource(
id = "1",
url = "https://www.techcrunch.it",
title = "Tech Crunch",
categoryName = null,
category = null,
logoUrl = null,
),
),
Expand Down Expand Up @@ -332,14 +332,14 @@ val feedImportSuccessWithErrorState = FeedImportExportState.ImportSuccess(
id = "1",
url = "https://www.ilpost.it",
title = "Il Post",
categoryName = null,
category = null,
logoUrl = null,
),
ParsedFeedSource(
id = "2",
url = "https://www.techcrunch.it",
title = "Tech Crunch",
categoryName = null,
category = null,
logoUrl = null,
),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ class OPMLFeedParserTest {
fun `The number of feed in category are correct`() = runTest {
val feedSources = parser.generateFeedSources(opmlInput)

val techFeeds = feedSources.filter { it.categoryName?.name == "Tech" }
val basketFeeds = feedSources.filter { it.categoryName?.name == "Basket" }
val newsFeeds = feedSources.filter { it.categoryName?.name == "News" }
val techFeeds = feedSources.filter { it.category?.title == "Tech" }
val basketFeeds = feedSources.filter { it.category?.title == "Basket" }
val newsFeeds = feedSources.filter { it.category?.title == "News" }

assertTrue(techFeeds.size == 3)
assertTrue(basketFeeds.size == 2)
Expand All @@ -48,27 +48,27 @@ class OPMLFeedParserTest {

assertEquals("Hacker News", feedSources[0].title)
assertEquals("https://news.ycombinator.com/rss", feedSources[0].url)
assertEquals("Tech", feedSources[0].categoryName?.name)
assertEquals("Tech", feedSources[0].category?.title)

assertEquals("Android Police - Feed", feedSources[1].title)
assertEquals("https://www.androidpolice.com/feed/", feedSources[1].url)
assertEquals("Tech", feedSources[1].categoryName?.name)
assertEquals("Tech", feedSources[1].category?.title)

assertEquals("TechCrunch", feedSources[2].title)
assertEquals("https://techcrunch.com/feed/", feedSources[2].url)
assertEquals("Tech", feedSources[2].categoryName?.name)
assertEquals("Tech", feedSources[2].category?.title)

assertEquals("Pianeta Basket", feedSources[3].title)
assertEquals("https://www.pianetabasket.com/rss/", feedSources[3].url)
assertEquals("Basket", feedSources[3].categoryName?.name)
assertEquals("Basket", feedSources[3].category?.title)

assertEquals("Overtime", feedSources[4].title)
assertEquals("https://www.overtimebasket.com/feed/", feedSources[4].url)
assertEquals("Basket", feedSources[4].categoryName?.name)
assertEquals("Basket", feedSources[4].category?.title)

assertEquals("Il Post", feedSources[5].title)
assertEquals("https://feeds.ilpost.it/ilpost", feedSources[5].url)
assertEquals("News", feedSources[5].categoryName?.name)
assertEquals("News", feedSources[5].category?.title)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ class OPMLFeedParserTest {
fun `The number of feed in category are correct`() = runTest {
val feedSources = parser.generateFeedSources(opmlInput)

val techFeeds = feedSources.filter { it.categoryName?.name == "Tech" }
val basketFeeds = feedSources.filter { it.categoryName?.name == "Basket" }
val newsFeeds = feedSources.filter { it.categoryName?.name == "News" }
val techFeeds = feedSources.filter { it.category?.title == "Tech" }
val basketFeeds = feedSources.filter { it.category?.title == "Basket" }
val newsFeeds = feedSources.filter { it.category?.title == "News" }

assertTrue(techFeeds.size == 3)
assertTrue(basketFeeds.size == 2)
Expand All @@ -51,27 +51,27 @@ class OPMLFeedParserTest {

assertEquals("Hacker News", feedSources[0].title)
assertEquals("https://news.ycombinator.com/rss", feedSources[0].url)
assertEquals("Tech", feedSources[0].categoryName?.name)
assertEquals("Tech", feedSources[0].category?.title)

assertEquals("Android Police - Feed", feedSources[1].title)
assertEquals("https://www.androidpolice.com/feed/", feedSources[1].url)
assertEquals("Tech", feedSources[1].categoryName?.name)
assertEquals("Tech", feedSources[1].category?.title)

assertEquals("TechCrunch", feedSources[2].title)
assertEquals("https://techcrunch.com/feed/", feedSources[2].url)
assertEquals("Tech", feedSources[2].categoryName?.name)
assertEquals("Tech", feedSources[2].category?.title)

assertEquals("Pianeta Basket", feedSources[3].title)
assertEquals("https://www.pianetabasket.com/rss/", feedSources[3].url)
assertEquals("Basket", feedSources[3].categoryName?.name)
assertEquals("Basket", feedSources[3].category?.title)

assertEquals("Overtime", feedSources[4].title)
assertEquals("https://www.overtimebasket.com/feed/", feedSources[4].url)
assertEquals("Basket", feedSources[4].categoryName?.name)
assertEquals("Basket", feedSources[4].category?.title)

assertEquals("Il Post", feedSources[5].title)
assertEquals("https://feeds.ilpost.it/ilpost", feedSources[5].url)
assertEquals("News", feedSources[5].categoryName?.name)
assertEquals("News", feedSources[5].category?.title)
}

@Test
Expand Down

0 comments on commit 7e39f4f

Please sign in to comment.