From 5e3b70e6858c1c391b3a7c91d817918254caacd3 Mon Sep 17 00:00:00 2001 From: wnehdals Date: Thu, 15 Sep 2022 16:28:34 +0900 Subject: [PATCH 1/4] Add gitignore google-services.json --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f59efd2c..59ad039f 100644 --- a/.gitignore +++ b/.gitignore @@ -78,7 +78,7 @@ captures/ *.keystore # Google Services (e.g. APIs or Firebase) -# google-services.json +google-services.json # Android Patch gen-external-apklibs From 63614cfd570a7ad69db3e2a60c1694aaf3250243 Mon Sep 17 00:00:00 2001 From: wnehdals Date: Thu, 15 Sep 2022 17:04:13 +0900 Subject: [PATCH 2/4] Add Firebase Dependency --- app/build.gradle.kts | 6 ++++++ build.gradle.kts | 1 + buildSrc/src/main/java/Dependencies.kt | 6 ++++++ buildSrc/src/main/java/Versions.kt | 2 ++ 4 files changed, 15 insertions(+) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a35ce928..06019ece 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -4,6 +4,7 @@ plugins { kotlin("kapt") id("dagger.hilt.android.plugin") id("org.jlleitschuh.gradle.ktlint") version "10.3.0" + id("com.google.gms.google-services") } android { @@ -89,6 +90,11 @@ dependencies { implementation(retrofit2) implementation(retrofit2Converter) } + FirebaseDependencies.run { + implementation(platform(FirebaseDependencies.firebaseBom)) + implementation(FirebaseDependencies.firebaseAnalytics) + implementation(FirebaseDependencies.firebaseAuth) + } } ktlint { diff --git a/build.gradle.kts b/build.gradle.kts index d655a47a..42526104 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,6 +16,7 @@ plugins { id("com.android.library") version "7.2.0" apply false id("org.jetbrains.kotlin.android") version "1.7.10" apply false id("org.jetbrains.kotlin.jvm") version "1.6.10" apply false + id("com.google.gms.google-services") version "4.3.13" apply false } tasks.register("clean", Delete::class) { diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index f2342b6b..2497cc80 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -44,6 +44,12 @@ object ThirdPartyDependencies { "com.squareup.retrofit2:converter-gson:${Versions.retrofit2Version}" const val timber = "com.jakewharton.timber:timber:${Versions.timberVersion}" } +object FirebaseDependencies { + const val firebaseBom = "com.google.firebase:firebase-bom:${Versions.firebaseBomVersion}" + const val firebaseAnalytics = "com.google.firebase:firebase-analytics-ktx" + const val firebaseAuth = "com.google.firebase:firebase-auth-ktx" + +} object ClassPathPlugins { const val hilt = "com.google.dagger:hilt-android-gradle-plugin:${Versions.hiltVersion}" diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt index 6088eaf9..64cd814f 100644 --- a/buildSrc/src/main/java/Versions.kt +++ b/buildSrc/src/main/java/Versions.kt @@ -26,4 +26,6 @@ object Versions { val javaVersion = JavaVersion.VERSION_1_8 const val jvmVersion = "1.8" + + const val firebaseBomVersion = "30.2.0" } From 83e9b0b6ac45ab370d33d02300419fa39c503da3 Mon Sep 17 00:00:00 2001 From: Yang-Seungmin Date: Sat, 17 Sep 2022 18:18:54 +0900 Subject: [PATCH 3/4] Add github actions job --- .github/workflows/pr_builder.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/pr_builder.yml b/.github/workflows/pr_builder.yml index b5f9928c..28dec77f 100644 --- a/.github/workflows/pr_builder.yml +++ b/.github/workflows/pr_builder.yml @@ -28,6 +28,9 @@ jobs: java-version: '11' distribution: 'temurin' cache: gradle + + - name: Add google-services.json + run: echo '${{ secrets.GOOGLE_SERVICES_JSON }}' > ./app/google-services.json - name: Grant execute permission for gradlew run: chmod +x gradlew From 35bdd937c0e39de67ac177e4440e2676cde0d152 Mon Sep 17 00:00:00 2001 From: dongmin960903 Date: Sun, 18 Sep 2022 22:33:52 +0900 Subject: [PATCH 4/4] #12 [feat] Add Di Module --- app/build.gradle.kts | 4 + .../java/com/jjbaksa/jjbaksa/JjbaksaApp.kt | 28 ++- .../com/jjbaksa/jjbaksa/di/DataBaseModule.kt | 30 +++ .../jjbaksa/jjbaksa/di/DataSourceModule.kt | 27 +++ .../com/jjbaksa/jjbaksa/di/NetworkModule.kt | 186 ++++++++++++++++++ .../jjbaksa/jjbaksa/di/RepositoryModule.kt | 24 +++ .../com/jjbaksa/jjbaksa/di/UseCaseModule.kt | 3 + buildSrc/src/main/java/Dependencies.kt | 7 +- buildSrc/src/main/java/Versions.kt | 2 + data/build.gradle.kts | 5 + .../main/java/com/jjbaksa/data/ApiConst.kt | 3 + .../main/java/com/jjbaksa/data/api/AuthApi.kt | 3 + .../java/com/jjbaksa/data/api/NoAuthApi.kt | 14 ++ .../com/jjbaksa/data/database/AppDatabase.kt | 12 ++ .../java/com/jjbaksa/data/database/UserDao.kt | 6 + .../jjbaksa/data/datasource/UserDataSource.kt | 9 + .../datasource/local/UserLocalDataSource.kt | 16 ++ .../datasource/remote/UserRemoteDataSource.kt | 18 ++ .../com/jjbaksa/data/entity/UserEntity.kt | 10 + .../data/repository/UserRepositoryImpl.kt | 16 ++ data/src/main/res/values/strings.xml | 4 + .../main/java/com/jjbaksa/domain/MyClass.kt | 3 - .../domain/repository/UserRepository.kt | 7 + .../com/jjbaksa/domain/resp/user/SignUpReq.kt | 8 + .../jjbaksa/domain/resp/user/SignUpResp.kt | 10 + .../jjbaksa/domain/usecase/SignUpUseCase.kt | 10 + 26 files changed, 459 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/com/jjbaksa/jjbaksa/di/DataBaseModule.kt create mode 100644 app/src/main/java/com/jjbaksa/jjbaksa/di/DataSourceModule.kt create mode 100644 app/src/main/java/com/jjbaksa/jjbaksa/di/NetworkModule.kt create mode 100644 app/src/main/java/com/jjbaksa/jjbaksa/di/RepositoryModule.kt create mode 100644 app/src/main/java/com/jjbaksa/jjbaksa/di/UseCaseModule.kt create mode 100644 data/src/main/java/com/jjbaksa/data/ApiConst.kt create mode 100644 data/src/main/java/com/jjbaksa/data/api/AuthApi.kt create mode 100644 data/src/main/java/com/jjbaksa/data/api/NoAuthApi.kt create mode 100644 data/src/main/java/com/jjbaksa/data/database/AppDatabase.kt create mode 100644 data/src/main/java/com/jjbaksa/data/database/UserDao.kt create mode 100644 data/src/main/java/com/jjbaksa/data/datasource/UserDataSource.kt create mode 100644 data/src/main/java/com/jjbaksa/data/datasource/local/UserLocalDataSource.kt create mode 100644 data/src/main/java/com/jjbaksa/data/datasource/remote/UserRemoteDataSource.kt create mode 100644 data/src/main/java/com/jjbaksa/data/entity/UserEntity.kt create mode 100644 data/src/main/java/com/jjbaksa/data/repository/UserRepositoryImpl.kt create mode 100644 data/src/main/res/values/strings.xml delete mode 100644 domain/src/main/java/com/jjbaksa/domain/MyClass.kt create mode 100644 domain/src/main/java/com/jjbaksa/domain/repository/UserRepository.kt create mode 100644 domain/src/main/java/com/jjbaksa/domain/resp/user/SignUpReq.kt create mode 100644 domain/src/main/java/com/jjbaksa/domain/resp/user/SignUpResp.kt create mode 100644 domain/src/main/java/com/jjbaksa/domain/usecase/SignUpUseCase.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 06019ece..73dccd51 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -89,6 +89,10 @@ dependencies { implementation(gson) implementation(retrofit2) implementation(retrofit2Converter) + implementation(roomRuntime) + implementation(roomKtx) + annotationProcessor(roomCompiler) + kapt(roomKapComplier) } FirebaseDependencies.run { implementation(platform(FirebaseDependencies.firebaseBom)) diff --git a/app/src/main/java/com/jjbaksa/jjbaksa/JjbaksaApp.kt b/app/src/main/java/com/jjbaksa/jjbaksa/JjbaksaApp.kt index 76fd6350..fb0d757e 100644 --- a/app/src/main/java/com/jjbaksa/jjbaksa/JjbaksaApp.kt +++ b/app/src/main/java/com/jjbaksa/jjbaksa/JjbaksaApp.kt @@ -1,7 +1,33 @@ package com.jjbaksa.jjbaksa import android.app.Application +import android.content.Context +import android.content.pm.ApplicationInfo +import android.content.pm.PackageManager import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp -class JjbaksaApp : Application() +class JjbaksaApp : Application() { + val appContext: Context = this + val isDebug + get() = isDebug(appContext) + + /** + * 디버그모드인지 확인하는 함수 + */ + private fun isDebug(context: Context): Boolean { + var debuggable = false + val pm: PackageManager = context.packageManager + try { + val appinfo = pm.getApplicationInfo(context.packageName, 0) + debuggable = 0 != appinfo.flags and ApplicationInfo.FLAG_DEBUGGABLE + } catch (e: PackageManager.NameNotFoundException) { + } + + return debuggable + } + companion object { + lateinit var instance: JjbaksaApp + private set + } +} diff --git a/app/src/main/java/com/jjbaksa/jjbaksa/di/DataBaseModule.kt b/app/src/main/java/com/jjbaksa/jjbaksa/di/DataBaseModule.kt new file mode 100644 index 00000000..02e28728 --- /dev/null +++ b/app/src/main/java/com/jjbaksa/jjbaksa/di/DataBaseModule.kt @@ -0,0 +1,30 @@ +package com.jjbaksa.jjbaksa.di + +import android.content.Context +import androidx.room.Room +import com.jjbaksa.data.database.AppDatabase +import com.jjbaksa.data.database.UserDao +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object DataBaseModule { + @Provides + @Singleton + fun provideRoomDataBase(@ApplicationContext context: Context): AppDatabase { + return Room + .databaseBuilder(context, AppDatabase::class.java, "MyExoPlayer.db") + .allowMainThreadQueries() + .build() + } + @Provides + @Singleton + fun provideVideoDao(appDatabase: AppDatabase): UserDao { + return appDatabase.userDao() + } +} diff --git a/app/src/main/java/com/jjbaksa/jjbaksa/di/DataSourceModule.kt b/app/src/main/java/com/jjbaksa/jjbaksa/di/DataSourceModule.kt new file mode 100644 index 00000000..233442cf --- /dev/null +++ b/app/src/main/java/com/jjbaksa/jjbaksa/di/DataSourceModule.kt @@ -0,0 +1,27 @@ +package com.jjbaksa.jjbaksa.di + +import com.jjbaksa.data.api.AuthApi +import com.jjbaksa.data.api.NoAuthApi +import com.jjbaksa.data.database.UserDao +import com.jjbaksa.data.datasource.local.UserLocalDataSource +import com.jjbaksa.data.datasource.remote.UserRemoteDataSource +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object DataSourceModule { + @Provides + @Singleton + fun provideUserRemoteDataSource(authApi: AuthApi, noAuthApi: NoAuthApi): UserRemoteDataSource { + return UserRemoteDataSource(authApi, noAuthApi) + } + @Provides + @Singleton + fun provideLocalDataSource(userDao: UserDao): UserLocalDataSource { + return UserLocalDataSource(userDao) + } +} diff --git a/app/src/main/java/com/jjbaksa/jjbaksa/di/NetworkModule.kt b/app/src/main/java/com/jjbaksa/jjbaksa/di/NetworkModule.kt new file mode 100644 index 00000000..f16ca33f --- /dev/null +++ b/app/src/main/java/com/jjbaksa/jjbaksa/di/NetworkModule.kt @@ -0,0 +1,186 @@ +package com.jjbaksa.jjbaksa.di + +import com.jjbaksa.data.BASE_URL +import com.jjbaksa.data.api.AuthApi +import com.jjbaksa.data.api.NoAuthApi +import com.jjbaksa.jjbaksa.JjbaksaApp +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import okhttp3.Interceptor +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import java.util.concurrent.TimeUnit +import javax.inject.Qualifier +import javax.inject.Singleton + +@Qualifier +@Retention(AnnotationRetention.BINARY) +annotation class AUTH + +@Qualifier +@Retention(AnnotationRetention.BINARY) +annotation class NOAUTH + +@Qualifier +@Retention(AnnotationRetention.BINARY) +annotation class REFRESH + +@Module +@InstallIn(SingletonComponent::class) +object NetworkModule { + private val httpLoggingInterceptor = HttpLoggingInterceptor().apply { + level = if (JjbaksaApp.instance.isDebug) { + HttpLoggingInterceptor.Level.BODY + } else { + HttpLoggingInterceptor.Level.HEADERS + } + } + + @AUTH + @Provides + @Singleton + fun provideAuthInterceptor(): Interceptor { + return Interceptor { chain: Interceptor.Chain -> + // val accessToken //todo 추후 ACCESS TOKEN 추가 + val newRequest: Request = chain.request().newBuilder() + // .addHeader("Authorization", "Bearer $accessToken") + .build() + chain.proceed(newRequest) + } + } + // TODO 추후 Refresh 추가 + /* + @AUTH + @Provides + @Singleton + fun provideTokenAuthenticator(@REFRESH refreshRetrofit: Retrofit): TokenAuthenticator { + return TokenAuthenticator( + KoalaApp.instance.applicationContext, + refreshRetrofit + ) + } + + */ + // TODO 추후 Refresh 추가 + /* + @REFRESH + @Provides + @Singleton + fun provideRefreshInterceptor(): Interceptor { + return Interceptor { chain: Interceptor.Chain -> + val refreshToken = Hawk.get(REFRESH_TOKEN, "") + val newRequest: Request = chain.request().newBuilder() + .addHeader("RefreshToken", "Bearer $refreshToken") + .build() + chain.proceed(newRequest) + } + } + + */ + + @NOAUTH + @Provides + @Singleton + fun provideNoAuthOkHttpClient(): OkHttpClient { + return OkHttpClient.Builder().apply { + connectTimeout(10, TimeUnit.SECONDS) + readTimeout(30, TimeUnit.SECONDS) + writeTimeout(15, TimeUnit.SECONDS) + addInterceptor(httpLoggingInterceptor) + }.build() + } + // TODO 추후 Refresh 추가 + /* + @AUTH + @Provides + @Singleton + fun provideAuthOkHttpClient( + @AUTH authInterceptor: Interceptor, + @AUTH tokenAuthenticator: TokenAuthenticator + ): OkHttpClient { + return OkHttpClient.Builder().apply { + connectTimeout(10, TimeUnit.SECONDS) + readTimeout(30, TimeUnit.SECONDS) + writeTimeout(15, TimeUnit.SECONDS) + addInterceptor(httpLoggingInterceptor) + addInterceptor(authInterceptor) + authenticator(tokenAuthenticator) + }.build() + } + + */ + + @REFRESH + @Provides + @Singleton + fun provideRefreshOkHttpClient( + @REFRESH refreshAuthInterceptor: Interceptor + ): OkHttpClient { + return OkHttpClient.Builder().apply { + connectTimeout(10, TimeUnit.SECONDS) + readTimeout(30, TimeUnit.SECONDS) + writeTimeout(15, TimeUnit.SECONDS) + addInterceptor(httpLoggingInterceptor) + addInterceptor(refreshAuthInterceptor) + }.build() + } + + @NOAUTH + @Provides + @Singleton + fun provideNoAuthRetrofit(@NOAUTH okHttpClient: OkHttpClient): Retrofit { + return Retrofit.Builder() + .client(okHttpClient) + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } + + @AUTH + @Provides + @Singleton + fun provideAuthRetrofit(@AUTH okHttpClient: OkHttpClient): Retrofit { + return Retrofit.Builder() + .client(okHttpClient) + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } + + @REFRESH + @Provides + @Singleton + fun provideRefreshRetrofit(@REFRESH okHttpClient: OkHttpClient): Retrofit { + return Retrofit.Builder() + .client(okHttpClient) + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } + + @NOAUTH + @Provides + @Singleton + fun provideNoAuthApi(@NOAUTH retrofit: Retrofit): NoAuthApi { + return retrofit.create(NoAuthApi::class.java) + } + + @AUTH + @Provides + @Singleton + fun provideAuthApi(@AUTH retrofit: Retrofit): AuthApi { + return retrofit.create(AuthApi::class.java) + } + + @REFRESH + @Provides + @Singleton + fun provideRefreshApi(@REFRESH retrofit: Retrofit): AuthApi { + return retrofit.create(AuthApi::class.java) + } +} diff --git a/app/src/main/java/com/jjbaksa/jjbaksa/di/RepositoryModule.kt b/app/src/main/java/com/jjbaksa/jjbaksa/di/RepositoryModule.kt new file mode 100644 index 00000000..198a2d19 --- /dev/null +++ b/app/src/main/java/com/jjbaksa/jjbaksa/di/RepositoryModule.kt @@ -0,0 +1,24 @@ +package com.jjbaksa.jjbaksa.di + +import com.jjbaksa.data.datasource.local.UserLocalDataSource +import com.jjbaksa.data.datasource.remote.UserRemoteDataSource +import com.jjbaksa.domain.repository.UserRepository +import com.jjbaksa.data.repository.UserRepositoryImpl +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object RepositoryModule { + @Singleton + @Provides + fun provideUserRepository( + userRemoteDataSource: UserRemoteDataSource, + userLocalDataSource: UserLocalDataSource + ): UserRepository { + return UserRepositoryImpl(userRemoteDataSource, userLocalDataSource) + } +} diff --git a/app/src/main/java/com/jjbaksa/jjbaksa/di/UseCaseModule.kt b/app/src/main/java/com/jjbaksa/jjbaksa/di/UseCaseModule.kt new file mode 100644 index 00000000..2b0924ac --- /dev/null +++ b/app/src/main/java/com/jjbaksa/jjbaksa/di/UseCaseModule.kt @@ -0,0 +1,3 @@ +package com.jjbaksa.jjbaksa.di + +object UseCaseModule diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index 2497cc80..6a9e0df5 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -43,14 +43,17 @@ object ThirdPartyDependencies { const val retrofit2Converter = "com.squareup.retrofit2:converter-gson:${Versions.retrofit2Version}" const val timber = "com.jakewharton.timber:timber:${Versions.timberVersion}" + const val roomRuntime = "androidx.room:room-runtime:${Versions.roomVersion}" + const val roomKtx = "androidx.room:room-ktx:${Versions.roomVersion}" + const val roomCompiler = "androidx.room:room-compiler:${Versions.roomVersion}" + const val roomKapComplier = "androidx.room:room-compiler:${Versions.roomVersion}" } object FirebaseDependencies { const val firebaseBom = "com.google.firebase:firebase-bom:${Versions.firebaseBomVersion}" const val firebaseAnalytics = "com.google.firebase:firebase-analytics-ktx" const val firebaseAuth = "com.google.firebase:firebase-auth-ktx" - } object ClassPathPlugins { const val hilt = "com.google.dagger:hilt-android-gradle-plugin:${Versions.hiltVersion}" -} +} \ No newline at end of file diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt index 64cd814f..a7675440 100644 --- a/buildSrc/src/main/java/Versions.kt +++ b/buildSrc/src/main/java/Versions.kt @@ -28,4 +28,6 @@ object Versions { const val jvmVersion = "1.8" const val firebaseBomVersion = "30.2.0" + + const val roomVersion = "2.4.1" } diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 05a1df3a..8b876672 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -1,3 +1,4 @@ + plugins { id("com.android.library") kotlin("android") @@ -52,6 +53,10 @@ dependencies { implementation(gson) implementation(retrofit2) implementation(retrofit2Converter) + implementation(roomRuntime) + implementation(roomKtx) + annotationProcessor(roomCompiler) + kapt(roomKapComplier) } } diff --git a/data/src/main/java/com/jjbaksa/data/ApiConst.kt b/data/src/main/java/com/jjbaksa/data/ApiConst.kt new file mode 100644 index 00000000..bdbb15ac --- /dev/null +++ b/data/src/main/java/com/jjbaksa/data/ApiConst.kt @@ -0,0 +1,3 @@ +package com.jjbaksa.data + +const val BASE_URL = "https://api.stage.jjbaksa.com:443" diff --git a/data/src/main/java/com/jjbaksa/data/api/AuthApi.kt b/data/src/main/java/com/jjbaksa/data/api/AuthApi.kt new file mode 100644 index 00000000..c98cc9fc --- /dev/null +++ b/data/src/main/java/com/jjbaksa/data/api/AuthApi.kt @@ -0,0 +1,3 @@ +package com.jjbaksa.data.api + +interface AuthApi diff --git a/data/src/main/java/com/jjbaksa/data/api/NoAuthApi.kt b/data/src/main/java/com/jjbaksa/data/api/NoAuthApi.kt new file mode 100644 index 00000000..bc2c3fc6 --- /dev/null +++ b/data/src/main/java/com/jjbaksa/data/api/NoAuthApi.kt @@ -0,0 +1,14 @@ +package com.jjbaksa.data.api + +import com.jjbaksa.data.resp.user.SignUpReq +import com.jjbaksa.data.resp.user.SignUpResp +import retrofit2.Response +import retrofit2.http.Body +import retrofit2.http.POST + +interface NoAuthApi { + @POST("user") + suspend fun signUp( + @Body singUpReq: SignUpReq + ): Response +} diff --git a/data/src/main/java/com/jjbaksa/data/database/AppDatabase.kt b/data/src/main/java/com/jjbaksa/data/database/AppDatabase.kt new file mode 100644 index 00000000..8aa786aa --- /dev/null +++ b/data/src/main/java/com/jjbaksa/data/database/AppDatabase.kt @@ -0,0 +1,12 @@ +package com.jjbaksa.data.database + +import androidx.room.Database +import androidx.room.RoomDatabase +import com.jjbaksa.data.entity.UserEntity + +@Database( + entities = [UserEntity::class], version = 1 +) +abstract class AppDatabase : RoomDatabase() { + abstract fun userDao(): UserDao +} diff --git a/data/src/main/java/com/jjbaksa/data/database/UserDao.kt b/data/src/main/java/com/jjbaksa/data/database/UserDao.kt new file mode 100644 index 00000000..9422279c --- /dev/null +++ b/data/src/main/java/com/jjbaksa/data/database/UserDao.kt @@ -0,0 +1,6 @@ +package com.jjbaksa.data.database + +import androidx.room.Dao + +@Dao +interface UserDao diff --git a/data/src/main/java/com/jjbaksa/data/datasource/UserDataSource.kt b/data/src/main/java/com/jjbaksa/data/datasource/UserDataSource.kt new file mode 100644 index 00000000..b30da742 --- /dev/null +++ b/data/src/main/java/com/jjbaksa/data/datasource/UserDataSource.kt @@ -0,0 +1,9 @@ +package com.jjbaksa.data.datasource + +import com.jjbaksa.data.resp.user.SignUpReq +import com.jjbaksa.data.resp.user.SignUpResp +import retrofit2.Response + +interface UserDataSource { + suspend fun postSignUp(signUpReq: SignUpReq): Response? +} diff --git a/data/src/main/java/com/jjbaksa/data/datasource/local/UserLocalDataSource.kt b/data/src/main/java/com/jjbaksa/data/datasource/local/UserLocalDataSource.kt new file mode 100644 index 00000000..b2f353b7 --- /dev/null +++ b/data/src/main/java/com/jjbaksa/data/datasource/local/UserLocalDataSource.kt @@ -0,0 +1,16 @@ +package com.jjbaksa.data.datasource.local + +import com.jjbaksa.data.database.UserDao +import com.jjbaksa.data.datasource.UserDataSource +import com.jjbaksa.data.resp.user.SignUpReq +import com.jjbaksa.data.resp.user.SignUpResp +import retrofit2.Response +import javax.inject.Inject + +class UserLocalDataSource @Inject constructor( + private val userDao: UserDao +) : UserDataSource { + override suspend fun postSignUp(signUpReq: SignUpReq): Response? { + return null + } +} diff --git a/data/src/main/java/com/jjbaksa/data/datasource/remote/UserRemoteDataSource.kt b/data/src/main/java/com/jjbaksa/data/datasource/remote/UserRemoteDataSource.kt new file mode 100644 index 00000000..3e79728e --- /dev/null +++ b/data/src/main/java/com/jjbaksa/data/datasource/remote/UserRemoteDataSource.kt @@ -0,0 +1,18 @@ +package com.jjbaksa.data.datasource.remote + +import com.jjbaksa.data.api.AuthApi +import com.jjbaksa.data.api.NoAuthApi +import com.jjbaksa.data.datasource.UserDataSource +import com.jjbaksa.data.resp.user.SignUpReq +import com.jjbaksa.data.resp.user.SignUpResp +import retrofit2.Response +import javax.inject.Inject + +class UserRemoteDataSource @Inject constructor( + private val authApi: AuthApi, + private val noAuthApi: NoAuthApi +) : UserDataSource { + override suspend fun postSignUp(signUpReq: SignUpReq): Response { + return noAuthApi.signUp(signUpReq) + } +} diff --git a/data/src/main/java/com/jjbaksa/data/entity/UserEntity.kt b/data/src/main/java/com/jjbaksa/data/entity/UserEntity.kt new file mode 100644 index 00000000..fdeecf75 --- /dev/null +++ b/data/src/main/java/com/jjbaksa/data/entity/UserEntity.kt @@ -0,0 +1,10 @@ +package com.jjbaksa.data.entity + +import androidx.room.Entity +import javax.annotation.concurrent.Immutable + +@Immutable +@Entity(primaryKeys = [("id")]) +data class UserEntity( + var id: Int +) diff --git a/data/src/main/java/com/jjbaksa/data/repository/UserRepositoryImpl.kt b/data/src/main/java/com/jjbaksa/data/repository/UserRepositoryImpl.kt new file mode 100644 index 00000000..daa2b2c1 --- /dev/null +++ b/data/src/main/java/com/jjbaksa/data/repository/UserRepositoryImpl.kt @@ -0,0 +1,16 @@ +package com.jjbaksa.data.repository + +import com.jjbaksa.data.datasource.local.UserLocalDataSource +import com.jjbaksa.data.datasource.remote.UserRemoteDataSource +import com.jjbaksa.data.resp.user.SignUpReq +import com.jjbaksa.domain.repository.UserRepository +import javax.inject.Inject + +class UserRepositoryImpl @Inject constructor( + private val userRemoteDataSource: UserRemoteDataSource, + private val userLocalDataSource: UserLocalDataSource +) : UserRepository { + override suspend fun postSignUp(signUpReq: SignUpReq) { + val resp = userRemoteDataSource.postSignUp(signUpReq) + } +} diff --git a/data/src/main/res/values/strings.xml b/data/src/main/res/values/strings.xml new file mode 100644 index 00000000..0d2c4cc4 --- /dev/null +++ b/data/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/domain/src/main/java/com/jjbaksa/domain/MyClass.kt b/domain/src/main/java/com/jjbaksa/domain/MyClass.kt deleted file mode 100644 index fa99ba2e..00000000 --- a/domain/src/main/java/com/jjbaksa/domain/MyClass.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.jjbaksa.domain - -class MyClass diff --git a/domain/src/main/java/com/jjbaksa/domain/repository/UserRepository.kt b/domain/src/main/java/com/jjbaksa/domain/repository/UserRepository.kt new file mode 100644 index 00000000..d1ec353d --- /dev/null +++ b/domain/src/main/java/com/jjbaksa/domain/repository/UserRepository.kt @@ -0,0 +1,7 @@ +package com.jjbaksa.domain.repository + +import com.jjbaksa.data.resp.user.SignUpReq + +interface UserRepository { + suspend fun postSignUp(signUpReq: SignUpReq) +} diff --git a/domain/src/main/java/com/jjbaksa/domain/resp/user/SignUpReq.kt b/domain/src/main/java/com/jjbaksa/domain/resp/user/SignUpReq.kt new file mode 100644 index 00000000..dc88d939 --- /dev/null +++ b/domain/src/main/java/com/jjbaksa/domain/resp/user/SignUpReq.kt @@ -0,0 +1,8 @@ +package com.jjbaksa.data.resp.user + +data class SignUpReq( + val acctoun: String, + val email: String, + val nickname: String, + val password: String +) diff --git a/domain/src/main/java/com/jjbaksa/domain/resp/user/SignUpResp.kt b/domain/src/main/java/com/jjbaksa/domain/resp/user/SignUpResp.kt new file mode 100644 index 00000000..a012e697 --- /dev/null +++ b/domain/src/main/java/com/jjbaksa/domain/resp/user/SignUpResp.kt @@ -0,0 +1,10 @@ +package com.jjbaksa.data.resp.user + +data class SignUpResp( + val account: String, + val email: String, + val id: Long, + val nickname: String, + val oauthType: String, + val userType: String +) diff --git a/domain/src/main/java/com/jjbaksa/domain/usecase/SignUpUseCase.kt b/domain/src/main/java/com/jjbaksa/domain/usecase/SignUpUseCase.kt new file mode 100644 index 00000000..63af5a20 --- /dev/null +++ b/domain/src/main/java/com/jjbaksa/domain/usecase/SignUpUseCase.kt @@ -0,0 +1,10 @@ +package com.jjbaksa.domain.usecase + +import com.jjbaksa.domain.repository.UserRepository +import javax.inject.Inject + +class SignUpUseCase @Inject constructor( + private val userRepository: UserRepository +) { + operator fun invoke() {} +}