Skip to content

Commit

Permalink
feat: 検索結果を保存する DB を実装 (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
kokoichi206 committed Dec 5, 2022
1 parent f28a00e commit 74f54f7
Show file tree
Hide file tree
Showing 7 changed files with 112 additions and 0 deletions.
5 changes: 5 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,9 @@ dependencies {

// System UI
implementation "com.google.accompanist:accompanist-systemuicontroller:0.28.0"

// Database
implementation 'androidx.room:room-runtime:2.4.3'
implementation 'androidx.room:room-ktx:2.4.3'
kapt "androidx.room:room-compiler:2.4.3"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package jp.co.yumemi.android.code_check.data.local

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import jp.co.yumemi.android.code_check.data.local.model.SearchEntity

@Dao
interface SearchDao {

@Query(
value = """
SELECT `query` FROM SearchEntity
WHERE `result` == 1
GROUP BY `query`
ORDER BY COUNT(`query`) DESC
LIMIT 10
"""
)
suspend fun topSearched(): List<String>

@Insert
suspend fun insertSearchResult(entity: SearchEntity)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package jp.co.yumemi.android.code_check.data.local

import androidx.room.Database
import androidx.room.RoomDatabase
import jp.co.yumemi.android.code_check.data.local.model.SearchEntity

@Database(
entities = [SearchEntity::class],
version = 1,
)
abstract class SearchDatabase: RoomDatabase() {

abstract val searchDao: SearchDao

companion object {
const val DATABASE_NAME = "search_result_db"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package jp.co.yumemi.android.code_check.data.local.model

import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity
data class SearchEntity(
val query: String,
val result: Boolean,
val searchedAt: Long,
@PrimaryKey val id: Int? = null
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package jp.co.yumemi.android.code_check.data.repository

interface SearchResultRepository {

suspend fun getTopSearched(): List<String>

suspend fun insertRecord(query: String, result: Boolean)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package jp.co.yumemi.android.code_check.data.repository

import jp.co.yumemi.android.code_check.data.local.SearchDao
import jp.co.yumemi.android.code_check.data.local.model.SearchEntity
import java.util.*

class SearchResultRepositoryImpl(
private val searchDao: SearchDao,
) : SearchResultRepository {

override suspend fun getTopSearched(): List<String> {
return searchDao.topSearched()
}

override suspend fun insertRecord(query: String, result: Boolean) {
return searchDao.insertSearchResult(
SearchEntity(
query = query,
result = result,
searchedAt = Calendar.getInstance().time.time,
)
)
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package jp.co.yumemi.android.code_check.di

import android.app.Application
import androidx.room.Room
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import jp.co.yumemi.android.code_check.data.local.SearchDatabase
import jp.co.yumemi.android.code_check.data.remote.GitHubAPI
import jp.co.yumemi.android.code_check.data.repository.GitHubRepository
import jp.co.yumemi.android.code_check.data.repository.GitHubRepositoryImpl
import jp.co.yumemi.android.code_check.data.repository.SearchResultRepository
import jp.co.yumemi.android.code_check.data.repository.SearchResultRepositoryImpl
import javax.inject.Singleton

@Module
Expand All @@ -19,4 +24,20 @@ object AppModule {
val api = GitHubAPI()
return GitHubRepositoryImpl(api)
}

@Provides
@Singleton
fun provideSearchDatabase(app: Application): SearchDatabase {
return Room.databaseBuilder(
app,
SearchDatabase::class.java,
SearchDatabase.DATABASE_NAME
).build()
}

@Provides
@Singleton
fun provideSearchResultRepository(db: SearchDatabase): SearchResultRepository {
return SearchResultRepositoryImpl(db.searchDao)
}
}

0 comments on commit 74f54f7

Please sign in to comment.