Skip to content

Commit 6f6ee2b

Browse files
setup clean architecture
1 parent 2fa2c21 commit 6f6ee2b

67 files changed

Lines changed: 438 additions & 127 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.idea/gradle.xml

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle.kts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,18 @@ dependencies {
5959
implementation(project(":ui:view"))
6060
implementation(project(":ui:viewModel"))
6161
implementation(project(":data:api"))
62-
implementation(project(":data:entity"))
6362
implementation(project(":data:repository"))
64-
implementation(project(":data:usecase"))
63+
implementation(project(":domain:usecase"))
64+
implementation(project(":domain:entity"))
65+
implementation(project(":domain:repository"))
66+
6567

6668
implementation("androidx.core:core-ktx:1.7.0")
6769
implementation("androidx.appcompat:appcompat:1.4.1")
6870
implementation("com.google.android.material:material:1.5.0")
6971
implementation("androidx.constraintlayout:constraintlayout:2.1.3")
7072

73+
implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0")
7174
// Compose
7275
val composeVersion = "1.1.1"
7376
implementation("androidx.compose.ui:ui:$composeVersion")

app/src/main/java/jp/dosukoi/githubclientforjetpackcompose/AppModule.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package jp.dosukoi.githubclientforjetpackcompose
22

33
import android.content.Context
44
import androidx.room.Room
5+
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
56
import dagger.Module
67
import dagger.Provides
78
import dagger.hilt.InstallIn
@@ -10,14 +11,14 @@ import dagger.hilt.components.SingletonComponent
1011
import jp.dosukoi.data.api.common.AccessTokenProvider
1112
import jp.dosukoi.data.api.common.IApiType
1213
import jp.dosukoi.data.api.common.IAuthApiType
13-
import jp.dosukoi.data.entity.auth.AuthDao
14-
import jp.dosukoi.data.entity.common.JsonConverter
1514
import jp.dosukoi.data.repository.common.AppDatabase
15+
import jp.dosukoi.githubclient.domain.entity.auth.AuthDao
1616
import kotlinx.serialization.ExperimentalSerializationApi
17+
import kotlinx.serialization.json.Json
18+
import okhttp3.MediaType.Companion.toMediaType
1719
import okhttp3.OkHttpClient
1820
import okhttp3.logging.HttpLoggingInterceptor
1921
import retrofit2.Retrofit
20-
import retrofit2.converter.gson.GsonConverterFactory
2122
import javax.inject.Named
2223
import javax.inject.Singleton
2324

@@ -32,10 +33,12 @@ object AppModule {
3233
fun provideRetrofit(
3334
okHttpClient: OkHttpClient
3435
): Retrofit {
36+
val contentType = "application/json".toMediaType()
37+
val format = Json { ignoreUnknownKeys = true }
3538
return Retrofit.Builder()
3639
.baseUrl("https://api.github.com")
3740
.client(okHttpClient)
38-
.addConverterFactory(GsonConverterFactory.create(JsonConverter.gson))
41+
.addConverterFactory(format.asConverterFactory(contentType))
3942
.build()
4043
}
4144

@@ -46,10 +49,12 @@ object AppModule {
4649
fun provideAuthRetrofit(
4750
okHttpClient: OkHttpClient
4851
): Retrofit {
52+
val contentType = "application/json".toMediaType()
53+
val format = Json { ignoreUnknownKeys = true }
4954
return Retrofit.Builder()
5055
.baseUrl("https://github.com")
5156
.client(okHttpClient)
52-
.addConverterFactory(GsonConverterFactory.create(JsonConverter.gson))
57+
.addConverterFactory(format.asConverterFactory(contentType))
5358
.build()
5459
}
5560

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package jp.dosukoi.githubclientforjetpackcompose
2+
3+
import dagger.Module
4+
import dagger.Provides
5+
import dagger.hilt.InstallIn
6+
import dagger.hilt.components.SingletonComponent
7+
import jp.dosukoi.data.api.common.IApiType
8+
import jp.dosukoi.data.api.common.IAuthApiType
9+
import jp.dosukoi.data.repository.auth.AuthRepositoryImpl
10+
import jp.dosukoi.data.repository.myPage.ReposRepositoryImpl
11+
import jp.dosukoi.data.repository.myPage.UserRepositoryImpl
12+
import jp.dosukoi.data.repository.search.SearchRepositoryImpl
13+
import jp.dosukoi.githubclient.domain.entity.auth.AuthDao
14+
import jp.dosukoi.githubclient.domain.repository.auth.AuthRepository
15+
import jp.dosukoi.githubclient.domain.repository.myPage.ReposRepository
16+
import jp.dosukoi.githubclient.domain.repository.myPage.UserRepository
17+
import jp.dosukoi.githubclient.domain.repository.search.SearchRepository
18+
import javax.inject.Named
19+
import javax.inject.Singleton
20+
21+
@InstallIn(SingletonComponent::class)
22+
@Module
23+
object RepositoryModule {
24+
@Singleton
25+
@Provides
26+
fun provideAuthRepository(
27+
@Named("clientId") clientId: String,
28+
@Named("clientSecret") clientSecret: String,
29+
api: IAuthApiType,
30+
authDao: AuthDao
31+
): AuthRepository = AuthRepositoryImpl(clientId, clientSecret, api, authDao)
32+
33+
@Singleton
34+
@Provides
35+
fun provideReposRepository(api: IApiType): ReposRepository = ReposRepositoryImpl(api)
36+
37+
@Singleton
38+
@Provides
39+
fun provideUserRepository(api: IApiType): UserRepository = UserRepositoryImpl(api)
40+
41+
@Singleton
42+
@Provides
43+
fun provideSearchRepository(api: IApiType): SearchRepository = SearchRepositoryImpl(api)
44+
}

data/api/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ android {
1212

1313
dependencies {
1414

15-
api(project(":data:entity"))
15+
api(project(":domain:entity"))
1616

1717
// Hilt
1818
val hiltVersion = "2.41"
@@ -42,4 +42,4 @@ dependencies {
4242
testImplementation("junit:junit:4.13.2")
4343

4444
testImplementation("com.google.truth:truth:1.1.3")
45-
}
45+
}

data/api/src/main/java/jp/dosukoi/data/api/common/AccessTokenProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package jp.dosukoi.data.api.common
22

3-
import jp.dosukoi.data.entity.auth.AuthDao
3+
import jp.dosukoi.githubclient.domain.entity.auth.AuthDao
44
import javax.inject.Inject
55
import javax.inject.Singleton
66

data/api/src/main/java/jp/dosukoi/data/api/common/IApiType.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package jp.dosukoi.data.api.common
22

3-
import jp.dosukoi.data.entity.myPage.Repository
4-
import jp.dosukoi.data.entity.myPage.User
5-
import jp.dosukoi.data.entity.search.Search
3+
import jp.dosukoi.githubclient.domain.entity.myPage.Repository
4+
import jp.dosukoi.githubclient.domain.entity.myPage.User
5+
import jp.dosukoi.githubclient.domain.entity.search.Search
66
import retrofit2.Response
77
import retrofit2.http.GET
88
import retrofit2.http.Query

data/api/src/main/java/jp/dosukoi/data/api/common/IAuthApiType.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package jp.dosukoi.data.api.common
22

3-
import jp.dosukoi.data.entity.auth.Auth
3+
import jp.dosukoi.githubclient.domain.entity.auth.Auth
44
import retrofit2.Response
55
import retrofit2.http.POST
66
import retrofit2.http.Query

data/entity/src/main/java/jp/dosukoi/data/entity/common/ErrorResponse.kt

Lines changed: 0 additions & 3 deletions
This file was deleted.

data/entity/src/main/java/jp/dosukoi/data/entity/common/JsonConverter.kt

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)