Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

- #27

Closed
Closed

- #27

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
7d6206d
[CT-3] chore: buildSrc 상수 분류
nosorae May 15, 2024
069524e
[CT-3] BuildConfig 활성화, Retrofit, Gson, OkHttp 의존성 추가
nosorae May 15, 2024
57834a2
[CT-3] 인터넷 접근 권한 추가
nosorae May 15, 2024
329ee13
[CT-3] retrofit gson converter 추가, BuildConfig 에 로컬프로퍼티로 API_KEY 추가, …
nosorae May 15, 2024
5164c93
[CT-3] Tick 에 불필요 데이터 제거
nosorae May 15, 2024
3c42606
[CT-3] DataSource 추가, Polygon.io API 호출 코드 추가
nosorae May 15, 2024
20ea98f
Merge branch 'feature/ct-3-chart-game-data' into feature/ct-3-chart-g…
nosorae May 17, 2024
1ab5335
[CT-4] chore: ktlintFormat
nosorae May 17, 2024
69897ba
[CT-3-database] Room Database 의존성 추가
nosorae May 17, 2024
5da6e04
[CT-3-database] Table 추가
nosorae May 17, 2024
31ad21a
[CT-3-database] RoomDatabase 추가
nosorae May 17, 2024
f576d36
[CT-3-database] Dao 추가 (Dao 쿼리 메소드는 Repository 작성 구현과 함께 작성 예정)
nosorae May 17, 2024
fa0942d
Merge branch 'feature/ct-3-chart-game-data' into feature/ct-3-chart-g…
nosorae May 17, 2024
d291ea1
Merge branch 'feature/ct-3-chart-game-data-network-source' into featu…
nosorae May 17, 2024
566c103
[CT-3-database] ChartGameTable 에 Entity 어노테이션 누락된 것 추가, asDto 맵핑 추가
nosorae May 18, 2024
6747d33
[CT-17] refactor: common 패키지 이름변경, 힐트모듈 이름변경, ktlintFormat
nosorae May 18, 2024
4d317dc
[CT-3] refactor: common 패키지 이름변경, 힐트모듈 이름변경, ktlintFormat
nosorae May 18, 2024
660bff1
[CT-3] 차트 요청 인자 만들어주는 클래스 추가, UtilModule.kt 추가
nosorae May 18, 2024
7c14b37
Merge remote-tracking branch 'origin/feature/ct-3-chart-game-data-net…
nosorae May 18, 2024
bbdfc2f
Merge branch 'feature/ct-3-chart-game-data-network-source' into featu…
nosorae May 18, 2024
8a3b9f4
[CT-3-local] Room Database 코드 작성 (Database, Entity, Dao, Converter)
nosorae May 18, 2024
cdd3a14
[CT-3-local] Room Database 코드 작성 (Database, Entity, Dao, Converter)
nosorae May 18, 2024
ea4fbfc
[CT-3] datastore 의존성 추가
nosorae May 18, 2024
a5fc11f
[CT-3] ChartTrainerPreferencesDataSource 작성
nosorae May 18, 2024
d5375f8
Merge remote-tracking branch 'origin/feature/ct-3-chart-game-data-loc…
nosorae May 18, 2024
3cf9c3d
[CT-3] 불필요 코드 제거
nosorae May 18, 2024
6c9f514
[CT-3] 불필요 상수 제거
nosorae May 18, 2024
582d414
[CT-3] 불필요 주석 제거
nosorae May 18, 2024
2fe043f
[CT-3] 불필요 주석 제거
nosorae May 18, 2024
b060272
Merge branch 'feature/ct-3-chart-game-data-network-source' into featu…
nosorae May 18, 2024
e87ca7d
[CT-3] TradeRepository.kt 삭제. 불필요.
nosorae May 18, 2024
b209658
[CT-3] Dispatcher 모듈 추가
nosorae May 18, 2024
6cf0101
[CT-3] ChartGameRepository 구현 (+ 메소드 이름 변경)
nosorae May 18, 2024
cbaa2de
[CT-3] ChartRepository 구현
nosorae May 18, 2024
99dba4b
[CT-3] UserRepository 구현
nosorae May 18, 2024
2c144cb
[CT-3] 리뷰 반영 - buildSrc 디펜던시 상수 Version 분리.
nosorae May 20, 2024
3ae885a
Merge branch 'feature/ct-3-chart-game-data-network-source' into featu…
nosorae May 20, 2024
2142c0e
[CT-3] 리뷰 반영 - 데이터베이스 이름 상수화
nosorae May 20, 2024
802e006
[CT-3] 리뷰 반영 - Dao 컨벤션 적용 누락 추가
nosorae May 20, 2024
d3f1408
[CT-3] 리뷰 반영 - Module 통폐합
nosorae May 20, 2024
e9a06bf
Merge branch 'feature/ct-3-chart-game-data-local-source' into feature…
nosorae May 20, 2024
85ad5d1
Merge pull request #19 from f-lab-edu/feature/ct-3-chart-game-data-ne…
f-lab-nathan May 20, 2024
4fe4bd1
Merge branch 'feature/ct-3-chart-game-data' into feature/ct-3-chart-g…
nosorae May 20, 2024
9118e30
[CT-3] 세 개 테이블 동시에 업데이트하는 Transaction 적용
nosorae May 21, 2024
eb30457
[CT-3] launch 리스트와 joinAll 제거
nosorae May 22, 2024
9b109b0
[CT-3] launch 리스트와 joinAll 제거
nosorae May 22, 2024
9670c94
Merge remote-tracking branch 'origin/feature/ct-3-chart-game-data-rep…
nosorae May 22, 2024
4afa81a
[CT-3] LocalDataSource 인터페이스화 하여 Repository가 Database에 직접적으로 의존하지 않게 하기
nosorae May 22, 2024
ab6f833
[CT-2-1] 차트게임 화면 모델 정의
nosorae May 23, 2024
5bb2f9d
[CT-2-1] ChartTrainerLogger 추가 (CEH로 잡은 예외 기록하려다가 추가)
nosorae May 25, 2024
f6617d2
[CT-2-1] VICO 의존성 추가
nosorae May 25, 2024
66b7273
[CT-2-1] 도메인 모델 수정 (Tick 의 가격들 타입 Money로 변경)
nosorae May 26, 2024
d0d5cce
[CT-2-1] 도메인 모델 수정 (ChartGame 에 생성자 필드로 부터 이끌어지는 프로퍼티 추가)
nosorae May 26, 2024
b443aca
[CT-2-1] UseCase invoke 함수에 suspend 예약어 제거 (Flow 반환으로 변경하여 불필요)
nosorae May 26, 2024
47296a6
[CT-2-1] 화면 모델 정의 (수정 및 추가)
nosorae May 26, 2024
506b035
[CT-2-1] ViewModel 작성
nosorae May 26, 2024
c81a456
[CT-2-1] chore: ktlintFormat
nosorae May 26, 2024
0e5f0bd
[CT-2-1] 화면 뒤로가기 이벤트 이름 변경
nosorae May 26, 2024
db60f99
[CT-2-1] 빌드에러 수정 (클래스-생성 바인딩, Tick 필드 타입 수정한 것 반영)
nosorae May 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,12 @@ dependencies {
implementation(project(path = ":domain"))
implementation(project(path = ":presentation"))

implementation(Dependency.HILT)
kapt(Dependency.HILT_COMPILER)
implementation(Dependency.Common.HILT)
kapt(Dependency.Common.HILT_COMPILER)

implementation(Dependency.ANDROIDX_CORE)
testImplementation(Dependency.Test.JUNIT)
androidTestImplementation(Dependency.Test.JUNIT_EXT)
implementation(Dependency.Common.ANDROIDX_CORE)
testImplementation(Dependency.Common.JUNIT)
androidTestImplementation(Dependency.Common.JUNIT_EXT)
}

configure<org.jlleitschuh.gradle.ktlint.KtlintExtension> {
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.INTERNET"/>

<application
android:name=".CharTrainerApplication"
android:allowBackup="true"
Expand Down
73 changes: 60 additions & 13 deletions buildSrc/src/main/kotlin/Dependency.kt
Original file line number Diff line number Diff line change
@@ -1,28 +1,75 @@
object Dependency {
const val HILT = "com.google.dagger:hilt-android:2.44"
const val HILT_COMPILER = "com.google.dagger:hilt-android-compiler:2.44"
const val JAVAX_INJECT = "javax.inject:javax.inject:1"
const val KOTLINX_COROUTINSE = "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1"
object Common {
const val HILT = "com.google.dagger:hilt-android:${Version.HILT}"
const val HILT_COMPILER = "com.google.dagger:hilt-android-compiler:${Version.HILT}"

const val ANDROIDX_CORE = "androidx.core:core-ktx:1.9.0" // 1.13.1
const val ANDROIDX_CORE = "androidx.core:core-ktx:${Version.ANDROIDX_CORE}" // 1.13.1

object Compose {
const val BOM = "androidx.compose:compose-bom:2023.03.00"
const val JUNIT = "junit:junit:${Version.JUNIT}"
const val JUNIT_EXT = "androidx.test.ext:junit:${Version.JUNIT_EXT}"

object Version {
const val HILT = "2.44"
const val ANDROIDX_CORE = "1.9.0"
const val JUNIT = "4.13.2"
const val JUNIT_EXT = "1.1.5"
}
}

object PlatformIndependent {
const val JAVAX_INJECT = "javax.inject:javax.inject:${Version.JAVAX_INJECT}"
const val KOTLINX_COROUTINSE =
"org.jetbrains.kotlinx:kotlinx-coroutines-core:${Version.KOTLINX_COROUTINSE}"

object Version {
const val JAVAX_INJECT = "1"
const val KOTLINX_COROUTINSE = "1.8.1"
}
}

object Data {
const val DATA_STORE = "androidx.datastore:datastore-preferences:${Version.DATA_STORE}"
const val ROOM_RUNTIME = "androidx.room:room-runtime:${Version.ROOM}"
const val ROOM_COMPILER = "androidx.room:room-compiler:${Version.ROOM}"
const val ROOM_KAPT = "androidx.room:room-compiler:${Version.ROOM}"
const val ROOM_COROUTINE = "androidx.room:room-ktx:${Version.ROOM}"
const val RETROFIT = "com.squareup.retrofit2:retrofit:${Version.RETROFIT}"
const val RETROFIT_GSON_CONVERTER =
"com.squareup.retrofit2:converter-gson:${Version.RETROFIT}"
const val OK_HTTP_3 = "com.squareup.okhttp3:logging-interceptor:${Version.OK_HTTP_3}"

object Version {
const val DATA_STORE = "1.1.1"
const val ROOM = "2.6.1"
const val RETROFIT = "2.11.0"
const val OK_HTTP_3 = "4.12.0"
}
}

object Presentation {
const val BOM = "androidx.compose:compose-bom:${Version.BOM}"
const val UI = "androidx.compose.ui:ui"
const val UI_GRAPHICS = "androidx.compose.ui:ui-graphics"
const val MATERIAL_3 = "androidx.compose.material3:material3"
const val LIFECYCLE_RUNTIME = "androidx.lifecycle:lifecycle-runtime-ktx:2.7.0"
const val ACTIVITY_COMPOSE = "androidx.activity:activity-compose:1.8.2"
const val LIFECYCLE_RUNTIME =
"androidx.lifecycle:lifecycle-runtime-ktx:${Version.LIFECYCLE_RUNTIME}"
const val ACTIVITY_COMPOSE =
"androidx.activity:activity-compose:${Version.ACTIVITY_COMPOSE}"

const val VICO_COMPOSE = "com.patrykandpatrick.vico:compose:${Version.VICO}"
const val VICO_COMPOSE_M3 = "com.patrykandpatrick.vico:compose-m3:${Version.VICO}"
const val VICO_CORE = "com.patrykandpatrick.vico:core:${Version.VICO}"
const val UI_TOOLING = "androidx.compose.ui:ui-tooling"
const val UI_TOOLING_PREVIEW = "androidx.compose.ui:ui-tooling-preview"
const val JUNIT = "androidx.compose.ui:ui-test-junit4"
const val UI_TEST_MANIFEST = "androidx.compose.ui:ui-test-manifest"
}

object Test {
const val JUNIT = "junit:junit:4.13.2"
const val JUNIT_EXT = "androidx.test.ext:junit:1.1.5"
object Version {
const val BOM = "2023.03.00"
const val LIFECYCLE_RUNTIME = "2.7.0"
const val ACTIVITY_COMPOSE = "1.8.2"
const val VICO = "2.0.0-alpha.19"// "1.14.0"
}
}
}

41 changes: 37 additions & 4 deletions data/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import java.util.Properties

plugins {
id(Plugin.ANDROID_LIBRARY)
id(Plugin.KOTLIN_ANDROID)
Expand All @@ -6,6 +8,11 @@ plugins {
kotlin(Plugin.KAPT)
}

val properties = Properties()
val localPropertiesFile = rootProject.file("local.properties").inputStream()
properties.load(localPropertiesFile)
localPropertiesFile.close()

android {
namespace = "com.yessorae.data"
compileSdk = 34
Expand All @@ -18,6 +25,14 @@ android {
}

buildTypes {
defaultConfig {
buildConfigField(
"String",
"POLYGON_API_KEY",
"${properties["POLYGON_API_KEY"]}"
)
}

release {
isMinifyEnabled = false
proguardFiles(
Expand All @@ -26,21 +41,39 @@ android {
)
}
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
isCoreLibraryDesugaringEnabled = true
}

kotlinOptions {
jvmTarget = "17"
}

buildFeatures {
buildConfig = true
}
}

dependencies {
implementation(project(path = ":domain"))

implementation(Dependency.HILT)
kapt(Dependency.HILT_COMPILER)
implementation(Dependency.Data.DATA_STORE)

implementation(Dependency.Data.ROOM_RUNTIME)
annotationProcessor(Dependency.Data.ROOM_COMPILER)
kapt(Dependency.Data.ROOM_KAPT)
implementation(Dependency.Data.ROOM_COROUTINE)

implementation(Dependency.Data.RETROFIT)
implementation(Dependency.Data.RETROFIT_GSON_CONVERTER)
implementation(Dependency.Data.OK_HTTP_3)

implementation(Dependency.Common.HILT)
kapt(Dependency.Common.HILT_COMPILER)

testImplementation(Dependency.Test.JUNIT)
androidTestImplementation(Dependency.Test.JUNIT_EXT)
testImplementation(Dependency.Common.JUNIT)
androidTestImplementation(Dependency.Common.JUNIT_EXT)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.yessorae.data.di

import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Qualifier
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers

// TODO::Later common 모듈 만들고 이동

@Qualifier
@Retention(AnnotationRetention.RUNTIME)
annotation class Dispatcher(val dispatcher: ChartTrainerDispatcher)

enum class ChartTrainerDispatcher {
Default,
IO
}

@Module
@InstallIn(SingletonComponent::class)
object CoroutineDispatcherModule {
@Provides
@Dispatcher(ChartTrainerDispatcher.IO)
fun providesIODispatcher(): CoroutineDispatcher = Dispatchers.IO

@Provides
@Dispatcher(ChartTrainerDispatcher.Default)
fun providesDefaultDispatcher(): CoroutineDispatcher = Dispatchers.Default
}
27 changes: 27 additions & 0 deletions data/src/main/java/com/yessorae/data/di/DataSourceModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.yessorae.data.di

import com.yessorae.data.source.ChartNetworkDataSource
import com.yessorae.data.source.ChartTrainerLocalDBDataSource
import com.yessorae.data.source.local.database.ChartTrainerLocalDBDataSourceImpl
import com.yessorae.data.source.network.polygon.PolygonChartNetworkDataSource
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
abstract class DataSourceModule {
@Binds
@Singleton
abstract fun bindsChartNetworkDataSource(
polygonChartNetworkDataSource: PolygonChartNetworkDataSource
): ChartNetworkDataSource

@Binds
@Singleton
abstract fun bindsChartTrainerLocalDBDataSource(
chartTrainerLocalDBDataSource: ChartTrainerLocalDBDataSourceImpl
): ChartTrainerLocalDBDataSource
}
26 changes: 26 additions & 0 deletions data/src/main/java/com/yessorae/data/di/DataStoreModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.yessorae.data.di

import android.content.Context
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.preferencesDataStore
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 DataStoreModule {
private val Context.appDatastore: DataStore<Preferences> by preferencesDataStore(
name = "chart_trainer_app_preference"
)

@Provides
@Singleton
fun providesAppPreferencesDataStore(
@ApplicationContext context: Context
): DataStore<Preferences> = context.appDatastore
}
41 changes: 41 additions & 0 deletions data/src/main/java/com/yessorae/data/di/DatabaseModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.yessorae.data.di

import android.content.Context
import androidx.room.Room
import com.yessorae.data.source.local.database.ChartTrainerDatabase
import com.yessorae.data.source.local.database.dao.ChartDao
import com.yessorae.data.source.local.database.dao.ChartGameDao
import com.yessorae.data.source.local.database.dao.TickDao
import com.yessorae.data.source.local.database.dao.TradeDao
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 providesChartTrainerDatabase(@ApplicationContext context: Context): ChartTrainerDatabase =
Room.databaseBuilder(
context = context,
klass = ChartTrainerDatabase::class.java,
name = ChartTrainerDatabase.NAME
).build()

@Provides
fun providesChartDao(database: ChartTrainerDatabase): ChartDao = database.getChartDao()

@Provides
fun provideChartGameDao(database: ChartTrainerDatabase): ChartGameDao =
database.getChartGameDao()

@Provides
fun provideTickDao(database: ChartTrainerDatabase): TickDao = database.getTickDao()

@Provides
fun provideTradeDao(database: ChartTrainerDatabase): TradeDao = database.getTradeDao()
}
47 changes: 47 additions & 0 deletions data/src/main/java/com/yessorae/data/di/NetworkModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.yessorae.data.di

import com.yessorae.data.BuildConfig
import com.yessorae.data.source.network.polygon.api.PolygonChartApi
import com.yessorae.data.source.network.polygon.common.PolygonConstant
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
import okhttp3.Call
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
@Provides
@Singleton
fun provideOkHttpCallFactory(): Call.Factory =
OkHttpClient.Builder()
.addInterceptor(
HttpLoggingInterceptor()
.apply {
if (BuildConfig.DEBUG) {
setLevel(HttpLoggingInterceptor.Level.BODY)
}
}
)
.build()

@Provides
@Singleton
fun providePolygonRetrofit(okhttpCallFactory: Call.Factory): Retrofit =
Retrofit.Builder()
.baseUrl(PolygonConstant.BASE_URL)
.callFactory(okhttpCallFactory)
.addConverterFactory(GsonConverterFactory.create())
.build()

@Provides
@Singleton
fun providePolygonChartApi(retrofit: Retrofit): PolygonChartApi =
retrofit.create(PolygonChartApi::class.java)
}
Loading
Loading