From ef0b06cbd768a5ea39e47776bd1003a1a1519cd3 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Tue, 22 Jul 2025 00:03:14 +0530 Subject: [PATCH] refactor: add a migration to introduce `SavedPost#userIsAuthor` --- .../claw/database/SavedPostSerializer.kt | 5 ++++ .../claw/database/local/SavedPost.sq | 4 ++- .../core/src/main/sqldelight/migrations/7.sqm | 25 +++++++++++++++++++ .../claw/database/SavedPostSerializerTest.kt | 1 + .../core/src/test/resources/saved_post.json | 2 +- .../database/local/SavedPostQueriesTest.kt | 1 + 6 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 database/core/src/main/sqldelight/migrations/7.sqm diff --git a/database/core/src/main/kotlin/dev/msfjarvis/claw/database/SavedPostSerializer.kt b/database/core/src/main/kotlin/dev/msfjarvis/claw/database/SavedPostSerializer.kt index 481961c6..d8e7663a 100644 --- a/database/core/src/main/kotlin/dev/msfjarvis/claw/database/SavedPostSerializer.kt +++ b/database/core/src/main/kotlin/dev/msfjarvis/claw/database/SavedPostSerializer.kt @@ -34,6 +34,7 @@ object SavedPostSerializer : KSerializer { element("submitterName") element>("tags") element("description") + element("userIsAuthor") } override fun deserialize(decoder: Decoder): SavedPost { @@ -47,6 +48,7 @@ object SavedPostSerializer : KSerializer { var submitterName = "" var tags = emptyList() var description = "" + var userIsAuthor = false while (true) { when (val index = decodeElementIndex(descriptor)) { 0 -> shortId = decodeStringElement(descriptor, 0) @@ -58,6 +60,7 @@ object SavedPostSerializer : KSerializer { 6 -> submitterName = decodeStringElement(descriptor, 6) 7 -> tags = decodeSerializableElement(descriptor, 7, delegateSerializer) 8 -> description = decodeStringElement(descriptor, 8) + 9 -> userIsAuthor = decodeBooleanElement(descriptor, 9) CompositeDecoder.DECODE_DONE -> break else -> error("Unexpected index: $index") } @@ -72,6 +75,7 @@ object SavedPostSerializer : KSerializer { submitterName = submitterName, tags = tags, description = description, + userIsAuthor = userIsAuthor, ) } } @@ -87,6 +91,7 @@ object SavedPostSerializer : KSerializer { encodeStringElement(descriptor, 6, value.submitterName) encodeSerializableElement(descriptor, 7, delegateSerializer, value.tags) encodeStringElement(descriptor, 8, value.description) + encodeBooleanElement(descriptor, 9, value.userIsAuthor) } } } diff --git a/database/core/src/main/sqldelight/dev/msfjarvis/claw/database/local/SavedPost.sq b/database/core/src/main/sqldelight/dev/msfjarvis/claw/database/local/SavedPost.sq index 84dec796..ca1ef3ea 100644 --- a/database/core/src/main/sqldelight/dev/msfjarvis/claw/database/local/SavedPost.sq +++ b/database/core/src/main/sqldelight/dev/msfjarvis/claw/database/local/SavedPost.sq @@ -1,6 +1,7 @@ import kotlin.Int; import kotlin.String; import kotlin.collections.List; +import kotlin.Boolean; CREATE TABLE IF NOT EXISTS SavedPost( shortId TEXT NOT NULL PRIMARY KEY, @@ -11,7 +12,8 @@ CREATE TABLE IF NOT EXISTS SavedPost( commentsUrl TEXT NOT NULL, submitterName TEXT NOT NULL, tags TEXT AS List NOT NULL, - description TEXT NOT NULL DEFAULT "" + description TEXT NOT NULL DEFAULT "", + userIsAuthor INTEGER AS Boolean NOT NULL DEFAULT 0 ); insertOrReplacePost: diff --git a/database/core/src/main/sqldelight/migrations/7.sqm b/database/core/src/main/sqldelight/migrations/7.sqm new file mode 100644 index 00000000..9fa0b7f2 --- /dev/null +++ b/database/core/src/main/sqldelight/migrations/7.sqm @@ -0,0 +1,25 @@ +import kotlin.Int; +import kotlin.String; +import kotlin.collections.List; +import kotlin.Boolean; + +ALTER TABLE SavedPost RENAME TO SavedPost_Old; + +CREATE TABLE IF NOT EXISTS SavedPost( + shortId TEXT NOT NULL PRIMARY KEY, + title TEXT NOT NULL, + url TEXT NOT NULL, + createdAt TEXT NOT NULL, + commentCount INTEGER AS Int, + commentsUrl TEXT NOT NULL, + submitterName TEXT NOT NULL, + tags TEXT AS List NOT NULL, + description TEXT NOT NULL DEFAULT "", + userIsAuthor INTEGER AS Boolean NOT NULL DEFAULT 0 +); + +INSERT INTO SavedPost(shortId, title, url, createdAt, commentCount, commentsUrl, submitterName, tags, description, userIsAuthor) +SELECT shortId, title, url, createdAt, commentCount, commentsUrl, submitterName, tags, description, 0 +FROM SavedPost_Old; + +DROP TABLE SavedPost_Old; diff --git a/database/core/src/test/kotlin/dev/msfjarvis/claw/database/SavedPostSerializerTest.kt b/database/core/src/test/kotlin/dev/msfjarvis/claw/database/SavedPostSerializerTest.kt index 418f8463..94f6ae84 100644 --- a/database/core/src/test/kotlin/dev/msfjarvis/claw/database/SavedPostSerializerTest.kt +++ b/database/core/src/test/kotlin/dev/msfjarvis/claw/database/SavedPostSerializerTest.kt @@ -55,6 +55,7 @@ class SavedPostSerializerTest { tags = listOf("ask", "programming"), description = "

You suddenly have in your possession a super computer. What comes next? What projects are suddenly possible for you? What performance tests can you now explore?

\n", + userIsAuthor = false, ) } } diff --git a/database/core/src/test/resources/saved_post.json b/database/core/src/test/resources/saved_post.json index 469985f6..fc20f9b2 100644 --- a/database/core/src/test/resources/saved_post.json +++ b/database/core/src/test/resources/saved_post.json @@ -1 +1 @@ -{"short_id":"nbigsf","title":"Fun Format Friday: You now have a super computer. What next?","url":"","created_at":"2023-05-04T23:43:50.000-05:00","comment_count":13,"comments_url":"https://lobste.rs/s/nbigsf/fun_format_friday_you_now_have_super","submitter_name":"LenFalken","tags":["ask","programming"],"description":"

You suddenly have in your possession a super computer. What comes next? What projects are suddenly possible for you? What performance tests can you now explore?

\n"} \ No newline at end of file +{"short_id":"nbigsf","title":"Fun Format Friday: You now have a super computer. What next?","url":"","created_at":"2023-05-04T23:43:50.000-05:00","comment_count":13,"comments_url":"https://lobste.rs/s/nbigsf/fun_format_friday_you_now_have_super","submitter_name":"LenFalken","tags":["ask","programming"],"description":"

You suddenly have in your possession a super computer. What comes next? What projects are suddenly possible for you? What performance tests can you now explore?

\n","user_is_author":false} \ No newline at end of file diff --git a/database/impl/src/test/kotlin/dev/msfjarvis/claw/database/local/SavedPostQueriesTest.kt b/database/impl/src/test/kotlin/dev/msfjarvis/claw/database/local/SavedPostQueriesTest.kt index 154d5afc..d00c6ba1 100644 --- a/database/impl/src/test/kotlin/dev/msfjarvis/claw/database/local/SavedPostQueriesTest.kt +++ b/database/impl/src/test/kotlin/dev/msfjarvis/claw/database/local/SavedPostQueriesTest.kt @@ -124,6 +124,7 @@ class SavedPostQueriesTest { submitterName = "test_user_$i", tags = listOf(), description = "", + userIsAuthor = i % 2 == 0, ) posts.add(post)