From 674b6964219ae448bcf874e578f970c6bd375da4 Mon Sep 17 00:00:00 2001 From: sanjeok77 Date: Wed, 11 Mar 2026 21:35:16 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9D=B8=EA=B8=B0=20=EA=B2=8C=EC=8B=9C?= =?UTF-8?q?=EB=AC=BC=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80=20(?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EB=A0=88=EC=9D=B4=EC=96=B4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - HotDeal 도메인 모델에 isPopular 필드 추가 - HotDealEntity에 isPopular 컬럼 추가 - Migration 4->5 추가 (isPopular 컬럼) - DatabaseModule에 Migration 4_5 등록 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus --- .../alarm/data/local/db/AppDatabase.kt | 11 ++++- .../data/local/db/entity/HotDealEntity.kt | 45 ++++++++++++++++++- .../com/hotdeal/alarm/di/DatabaseModule.kt | 5 +++ .../com/hotdeal/alarm/domain/model/HotDeal.kt | 12 +++++ 4 files changed, 70 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/hotdeal/alarm/data/local/db/AppDatabase.kt b/app/src/main/java/com/hotdeal/alarm/data/local/db/AppDatabase.kt index ebcfad3..e6f9de4 100644 --- a/app/src/main/java/com/hotdeal/alarm/data/local/db/AppDatabase.kt +++ b/app/src/main/java/com/hotdeal/alarm/data/local/db/AppDatabase.kt @@ -21,7 +21,7 @@ import com.hotdeal.alarm.data.local.db.entity.SiteConfigEntity SiteConfigEntity::class, KeywordEntity::class ], - version = 4, + version = 5, exportSchema = false ) @TypeConverters(Converters::class) @@ -61,5 +61,14 @@ abstract class AppDatabase : RoomDatabase() { db.execSQL("ALTER TABLE hot_deals ADD COLUMN isFavorite INTEGER NOT NULL DEFAULT 0") } } + + /** + * Migration 4 -> 5: 인기 게시물 필드 추가 + */ + val MIGRATION_4_5 = object : Migration(4, 5) { + override fun migrate(db: SupportSQLiteDatabase) { + db.execSQL("ALTER TABLE hot_deals ADD COLUMN isPopular INTEGER NOT NULL DEFAULT 0") + } + } } } diff --git a/app/src/main/java/com/hotdeal/alarm/data/local/db/entity/HotDealEntity.kt b/app/src/main/java/com/hotdeal/alarm/data/local/db/entity/HotDealEntity.kt index a68a7b3..bddc19b 100644 --- a/app/src/main/java/com/hotdeal/alarm/data/local/db/entity/HotDealEntity.kt +++ b/app/src/main/java/com/hotdeal/alarm/data/local/db/entity/HotDealEntity.kt @@ -16,6 +16,19 @@ import com.hotdeal.alarm.domain.model.HotDeal ] ) data class HotDealEntity( + @PrimaryKey + val id: String, + val siteName: String, + val boardName: String, + val title: String, + val url: String, + val mallUrl: String?, + val createdAt: Long, + val isNotified: Boolean = false, + val isKeywordMatch: Boolean = false, + val isFavorite: Boolean = false, // 즐겨찾기 여부 + val isPopular: Boolean = false // 인기/핫 게시물 여부 +) { @PrimaryKey val id: String, val siteName: String, @@ -31,7 +44,21 @@ data class HotDealEntity( /** * Domain 모델로 변환 */ - fun toDomain(): HotDeal { + fun toDomain(): HotDeal { + return HotDeal( + id = id, + siteName = siteName, + boardName = boardName, + title = title, + url = url, + mallUrl = mallUrl, + createdAt = createdAt, + isNotified = isNotified, + isKeywordMatch = isKeywordMatch, + isFavorite = isFavorite, + isPopular = isPopular + ) + } return HotDeal( id = id, siteName = siteName, @@ -50,7 +77,21 @@ data class HotDealEntity( /** * Domain 모델에서 Entity 생성 */ - fun fromDomain(domain: HotDeal): HotDealEntity { + fun fromDomain(domain: HotDeal): HotDealEntity { + return HotDealEntity( + id = domain.id, + siteName = domain.siteName, + boardName = domain.boardName, + title = domain.title, + url = domain.url, + mallUrl = domain.mallUrl, + createdAt = domain.createdAt, + isNotified = domain.isNotified, + isKeywordMatch = domain.isKeywordMatch, + isFavorite = domain.isFavorite, + isPopular = domain.isPopular + ) + } return HotDealEntity( id = domain.id, siteName = domain.siteName, diff --git a/app/src/main/java/com/hotdeal/alarm/di/DatabaseModule.kt b/app/src/main/java/com/hotdeal/alarm/di/DatabaseModule.kt index 116eccf..24d7b75 100644 --- a/app/src/main/java/com/hotdeal/alarm/di/DatabaseModule.kt +++ b/app/src/main/java/com/hotdeal/alarm/di/DatabaseModule.kt @@ -34,6 +34,11 @@ object DatabaseModule { .addMigrations( AppDatabase.MIGRATION_1_2, AppDatabase.MIGRATION_2_3, + AppDatabase.MIGRATION_3_4, + AppDatabase.MIGRATION_4_5 + ) + AppDatabase.MIGRATION_1_2, + AppDatabase.MIGRATION_2_3, AppDatabase.MIGRATION_3_4 ) .fallbackToDestructiveMigration() diff --git a/app/src/main/java/com/hotdeal/alarm/domain/model/HotDeal.kt b/app/src/main/java/com/hotdeal/alarm/domain/model/HotDeal.kt index f5385b0..8b801a5 100644 --- a/app/src/main/java/com/hotdeal/alarm/domain/model/HotDeal.kt +++ b/app/src/main/java/com/hotdeal/alarm/domain/model/HotDeal.kt @@ -4,6 +4,18 @@ package com.hotdeal.alarm.domain.model * 핫딜 도메인 모델 */ data class HotDeal( + val id: String, // siteName + "_" + postId + val siteName: String, // ppomppu, clien, ruriweb, coolenjoy, quasarzone + val boardName: String, // ppomppu, ppomppu4, allsell, jirum, etc. + val title: String, // 게시글 제목 + val url: String, // 게시글 URL + val mallUrl: String? = null, // 쇼핑몰 URL (추출된 경우) + val createdAt: Long, // 수집 시간 (timestamp) + val isNotified: Boolean = false, + val isKeywordMatch: Boolean = false, + val isFavorite: Boolean = false, // 즐겨찾기 여부 + val isPopular: Boolean = false // 인기/핫 게시물 여부 +) { val id: String, // siteName + "_" + postId val siteName: String, // ppomppu, clien, ruriweb, coolenjoy, quasarzone val boardName: String, // ppomppu, ppomppu4, allsell, jirum, etc.