From d1591949df32c7e0e408665b87d9ac9e728f5975 Mon Sep 17 00:00:00 2001 From: ChanHHOO Date: Mon, 27 Oct 2025 23:38:32 +0900 Subject: [PATCH 1/2] feat : Add column for fallback --- src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt | 9 +++++---- .../repository/impl/FailureReadingsRepositoryImpl.kt | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt b/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt index 037a118..a6398f5 100644 --- a/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt +++ b/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt @@ -30,16 +30,17 @@ object DatabaseConfig { CREATE TABLE IF NOT EXISTS failure_reading ( id TEXT PRIMARY KEY, line_number INTEGER NOT NULL, - nmi TEXT, + nmi TEXT, interval_index INTEGER, raw_value TEXT NOT NULL, failure_reason TEXT NOT NULL, - timestamp TIMESTAMP + timestamp TIMESTAMP, + is_processed BOOLEAN NOT NULL DEFAULT 0 ) """ const val INSERT_FAILED_READING_SQL = """ - INSERT INTO failure_reading (id, line_number, nmi, interval_index, raw_value, failure_reason, timestamp) - VALUES (?, ?, ?, ?, ?, ?, ?) + INSERT INTO failure_reading (id, line_number, nmi, interval_index, raw_value, failure_reason, timestamp, is_processed) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) """ } diff --git a/src/main/kotlin/com/flo/nem12/repository/impl/FailureReadingsRepositoryImpl.kt b/src/main/kotlin/com/flo/nem12/repository/impl/FailureReadingsRepositoryImpl.kt index 5ba4af6..2251030 100644 --- a/src/main/kotlin/com/flo/nem12/repository/impl/FailureReadingsRepositoryImpl.kt +++ b/src/main/kotlin/com/flo/nem12/repository/impl/FailureReadingsRepositoryImpl.kt @@ -52,6 +52,9 @@ class FailureReadingsRepositoryImpl( val utcTimestamp = entity.timestamp?.let { aestToUtc(it) } statement.setString(7, utcTimestamp?.format(timestampFormatter)) + // Set is_processed to false (will be managed by separate failure processing system) + statement.setBoolean(8, false) + // Update statistics statistics[entity.reason] = statistics.getOrDefault(entity.reason, 0) + 1 } From 3409c9705f5ec2f6dc5afa7c69886636e674a242 Mon Sep 17 00:00:00 2001 From: ChanHHOO Date: Tue, 28 Oct 2025 00:08:59 +0900 Subject: [PATCH 2/2] fix : Add test cod --- .../FailureReadingsRepositoryTest.kt | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/test/kotlin/com/flo/nem12/repository/FailureReadingsRepositoryTest.kt b/src/test/kotlin/com/flo/nem12/repository/FailureReadingsRepositoryTest.kt index 09d9c58..0e74953 100644 --- a/src/test/kotlin/com/flo/nem12/repository/FailureReadingsRepositoryTest.kt +++ b/src/test/kotlin/com/flo/nem12/repository/FailureReadingsRepositoryTest.kt @@ -11,6 +11,7 @@ import java.sql.DriverManager import java.time.LocalDateTime import kotlin.io.path.deleteIfExists import kotlin.test.assertEquals +import kotlin.test.assertFalse import kotlin.test.assertTrue class FailureReadingsRepositoryTest { @@ -264,4 +265,31 @@ class FailureReadingsRepositoryTest { assertEquals(5, resultSet.getInt("cnt")) connection.close() } + + @Test + fun `should insert failure record with is_processed set to false`() { + // Given + val dbPath = testDbPath + val failure = FailureRecord( + lineNumber = 1, + nmi = "1234567890", + intervalIndex = 0, + rawValue = "invalid", + reason = FailureReason.EMPTY_VALUE, + timestamp = LocalDateTime.of(2024, 1, 1, 0, 0) + ) + val connection = DriverManager.getConnection("jdbc:sqlite:$dbPath") + + // When + FailureReadingsRepositoryImpl(connection, 10).use { repository -> + repository.save(failure) + } + + // Then + val resultSet = connection.createStatement() + .executeQuery("SELECT is_processed FROM failure_reading") + assertTrue(resultSet.next()) + assertFalse(resultSet.getBoolean("is_processed")) + connection.close() + } }