Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
kimhyebeen committed Nov 22, 2020
2 parents bcb9480 + 9186d8c commit 2b48823
Show file tree
Hide file tree
Showing 29 changed files with 323 additions and 72 deletions.
14 changes: 14 additions & 0 deletions Picon/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'koin'

android {
compileSdkVersion 29
Expand Down Expand Up @@ -94,4 +95,17 @@ dependencies {
// linear graph view
// https://github.com/swapnil1104/LinearGraphView?utm_source=android-arsenal.com&utm_medium=referral&utm_campaign=7928
implementation 'com.github.swapnil1104:LinearGraphView:0.0.1'

// Koin
// https://github.com/InsertKoinIO/koin
// Koin for Kotlin
implementation "org.koin:koin-core:$koin_version"
// Koin for Unit tests
testImplementation "org.koin:koin-test:$koin_version"
// Koin AndroidX Scope features
implementation "org.koin:koin-androidx-scope:$koin_version"
// Koin AndroidX ViewModel features
implementation "org.koin:koin-androidx-viewmodel:$koin_version"
// Koin AndroidX Fragment features
implementation "org.koin:koin-androidx-fragment:$koin_version"
}
9 changes: 5 additions & 4 deletions Picon/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application
android:name=".MainApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
Expand All @@ -28,15 +29,15 @@
</intent-filter>
</activity>

<activity android:name=".presentation.nav.NavActivity"
android:parentActivityName=".presentation.map.MapActivity"/>
<activity
android:name=".presentation.nav.NavActivity"
android:parentActivityName=".presentation.map.MapActivity" />

<activity
android:name=".presentation.search.SearchActivity"
android:theme="@style/SearchActivity" />

<activity
android:name=".presentation.post.PostActivity" />
<activity android:name=".presentation.post.PostActivity" />

</application>

Expand Down
30 changes: 30 additions & 0 deletions Picon/app/src/main/java/com/yapp/picon/MainApplication.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.yapp.picon

import android.app.Application
import com.yapp.picon.data.di.*
import com.yapp.picon.domain.di.useCaseModule
import com.yapp.picon.presentation.di.viewModelModule
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.startKoin

class MainApplication : Application() {

override fun onCreate() {
super.onCreate()

startKoin {
androidContext(this@MainApplication)
modules(
listOf(
networkModule,
databaseModule,
repositoryModule,
localModule,
remoteModule,
useCaseModule,
viewModelModule
)
)
}
}
}
6 changes: 6 additions & 0 deletions Picon/app/src/main/java/com/yapp/picon/data/api/NaverApi.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
package com.yapp.picon.data.api

import com.yapp.picon.SecretKeySet
import com.yapp.picon.data.model.LocalResult
import retrofit2.http.GET
import retrofit2.http.Headers
import retrofit2.http.Query

interface NaverApi {
@Headers(
"X-Naver-Client-Id: ${SecretKeySet.X_Naver_Client_Id}",
"X-Naver-Client-Secret: ${SecretKeySet.X_Naver_Client_Secret}"
)
@GET("v1/search/local.json")
suspend fun requestLocal(
@Query("query") searchWord: String,
Expand Down
18 changes: 18 additions & 0 deletions Picon/app/src/main/java/com/yapp/picon/data/di/DatabaseModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.yapp.picon.data.di

import androidx.room.Room
import com.yapp.picon.data.source.searched.local.SearchedDatabase
import org.koin.android.ext.koin.androidContext
import org.koin.dsl.module

val databaseModule = module {
single {
Room.databaseBuilder(
androidContext(),
SearchedDatabase::class.java,
"searched.db"
)
.fallbackToDestructiveMigration()
.build()
}
}
11 changes: 11 additions & 0 deletions Picon/app/src/main/java/com/yapp/picon/data/di/LocalModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.yapp.picon.data.di

import com.yapp.picon.data.source.searched.SearchedDataSource
import com.yapp.picon.data.source.searched.local.SearchedDatabase
import com.yapp.picon.data.source.searched.local.SearchedLocalDataSource
import org.koin.dsl.module

val localModule = module {
single { get<SearchedDatabase>().searchedDao() }
single<SearchedDataSource> { SearchedLocalDataSource(get()) }
}
33 changes: 12 additions & 21 deletions Picon/app/src/main/java/com/yapp/picon/data/di/NetworkModule.kt
Original file line number Diff line number Diff line change
@@ -1,28 +1,19 @@
package com.yapp.picon.data.di

import com.yapp.picon.data.api.NaverApi
import okhttp3.OkHttpClient
import org.koin.dsl.module
import retrofit2.Converter
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

object NetworkModule {
private const val NAVER_URL = "https://openapi.naver.com"
val networkModule = module {
factory { (baseUrl: String) ->
Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(get())
.build()
}

private val okHttpClient: OkHttpClient = OkHttpClient.Builder()
.addInterceptor {
it.proceed(
it.request().newBuilder()
.header("X-Naver-Client-Id", "MB0QmA3dWk5pHT2Mbz7_")
.header("X-Naver-Client-Secret", "jgCRJfYDDT")
.build()
)
}
.build()

val naverApi: NaverApi = Retrofit.Builder()
.baseUrl(NAVER_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
.create(NaverApi::class.java)
single {
GsonConverterFactory.create() as Converter.Factory
}
}
13 changes: 13 additions & 0 deletions Picon/app/src/main/java/com/yapp/picon/data/di/RemoteModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.yapp.picon.data.di

import com.yapp.picon.data.api.NaverApi
import com.yapp.picon.data.source.searched.NaverDataSource
import com.yapp.picon.data.source.searched.remote.NaverRemoteDataSource
import org.koin.core.parameter.parametersOf
import org.koin.dsl.module
import retrofit2.Retrofit

val remoteModule = module {
single<NaverApi> { get<Retrofit> { parametersOf("https://openapi.naver.com") }.create(NaverApi::class.java) }
single<NaverDataSource> { NaverRemoteDataSource(get()) }
}
21 changes: 21 additions & 0 deletions Picon/app/src/main/java/com/yapp/picon/data/di/RepositoryModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.yapp.picon.data.di

import com.yapp.picon.data.source.searched.NaverRepository
import com.yapp.picon.data.source.searched.NaverRepositoryImpl
import com.yapp.picon.data.source.searched.SearchedRepository
import com.yapp.picon.data.source.searched.SearchedRepositoryImpl
import org.koin.dsl.module

val repositoryModule = module {
single<NaverRepository> {
NaverRepositoryImpl(
get()
)
}

single<SearchedRepository> {
SearchedRepositoryImpl(
get()
)
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.yapp.picon.data.source.searched

import com.yapp.picon.data.model.LocalResult

interface NaverDataSource {
suspend fun requestLocal(searchWord: String): LocalResult
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.yapp.picon.data.source.searched

import com.yapp.picon.data.model.LocalResult

interface NaverRepository {
suspend fun requestLocal(searchWord: String): LocalResult
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.yapp.picon.data.source.searched

class NaverRepositoryImpl(
private val remoteDataSource: NaverDataSource
) : NaverRepository {

override suspend fun requestLocal(searchWord: String) =
remoteDataSource.requestLocal(searchWord)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.yapp.picon.data.source.searched.remote

import com.yapp.picon.data.api.NaverApi
import com.yapp.picon.data.model.LocalResult
import com.yapp.picon.data.source.searched.NaverDataSource

class NaverRemoteDataSource(
private val retrofitService: NaverApi
) : NaverDataSource {

override suspend fun requestLocal(searchWord: String): LocalResult =
retrofitService.requestLocal(searchWord)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.yapp.picon.data.source.searched

import com.yapp.picon.domain.entity.SearchedEntity

interface SearchedDataSource {
suspend fun selectAll(): List<SearchedEntity>
suspend fun insert(searchedEntity: SearchedEntity)
suspend fun delete(title: String, mapX: String, mapY: String)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.yapp.picon.data.source.searched

import com.yapp.picon.domain.entity.SearchedEntity

interface SearchedRepository {
suspend fun selectAll(): List<SearchedEntity>
suspend fun insert(searchedEntity: SearchedEntity)
suspend fun delete(title: String, mapX: String, mapY: String)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.yapp.picon.data.source.searched

import com.yapp.picon.domain.entity.SearchedEntity

class SearchedRepositoryImpl(
private val localDataSource: SearchedDataSource,
) : SearchedRepository {

override suspend fun selectAll(): List<SearchedEntity> =
localDataSource.selectAll()

override suspend fun insert(searchedEntity: SearchedEntity) =
localDataSource.insert(searchedEntity)

override suspend fun delete(title: String, mapX: String, mapY: String) =
localDataSource.delete(title, mapX, mapY)
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.yapp.picon.data.source.dao
package com.yapp.picon.data.source.searched.local

import androidx.room.Dao
import androidx.room.Insert
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.yapp.picon.data.source.searched.local

import androidx.room.Database
import androidx.room.RoomDatabase
import com.yapp.picon.domain.entity.SearchedEntity

@Database(entities = [SearchedEntity::class], version = 1, exportSchema = false)
abstract class SearchedDatabase : RoomDatabase() {
abstract fun searchedDao(): SearchedDao
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.yapp.picon.data.source.searched.local

import com.yapp.picon.data.source.searched.SearchedDataSource
import com.yapp.picon.domain.entity.SearchedEntity

class SearchedLocalDataSource(
private val dao: SearchedDao
) : SearchedDataSource {

override suspend fun selectAll(): List<SearchedEntity> =
dao.selectAll()

override suspend fun insert(searchedEntity: SearchedEntity) =
dao.insert(searchedEntity)

override suspend fun delete(title: String, mapX: String, mapY: String) =
dao.delete(title, mapX, mapY)
}
22 changes: 22 additions & 0 deletions Picon/app/src/main/java/com/yapp/picon/domain/di/UseCaseModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.yapp.picon.domain.di

import com.yapp.picon.domain.usecase.*
import org.koin.dsl.module

val useCaseModule = module {
single {
SimpleJoinUseCase(get())
}
single {
GetLocalUseCase(get())
}
single {
GetAllSearedUseCase(get())
}
single {
InsertSearedUseCase(get())
}
single {
DeleteSearedUseCase(get())
}
}
Loading

0 comments on commit 2b48823

Please sign in to comment.