Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ dependencies {
implementation(projects.core.network)
implementation(projects.core.ui)
implementation(projects.core.model)
implementation(projects.core.di)
implementation(projects.core.data)
implementation(projects.core.domain)

// Feature — presentation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,9 @@ package com.afternote.afternote_fe.test

import com.afternote.afternote_fe.reporting.ErrorReportingModule
import com.afternote.core.common.reporting.ErrorReporter
import com.afternote.core.data.repoimpl.PhotoUploadRepositoryImpl
import com.afternote.core.data.repoimpl.UserProfileRepositoryImpl
import com.afternote.core.data.repoimpl.VideoUploadRepositoryImpl
import com.afternote.core.data.repoimpl.account.AccountRepositoryImpl
import com.afternote.core.di.CoreRepositoryModule
import com.afternote.core.domain.repository.PhotoUploadRepository
import com.afternote.core.data.di.CoreUserRepositoryModule
import com.afternote.core.domain.repository.UserProfileRepository
import com.afternote.core.domain.repository.UserRepository
import com.afternote.core.domain.repository.VideoUploadRepository
import com.afternote.core.domain.repository.account.AccountRepository
import com.afternote.core.domain.repository.auth.AuthRepository
import com.afternote.feature.mindrecord.data.di.MindRecordRepositoryModule
import com.afternote.feature.mindrecord.data.repositoryimpl.MindRecordReceiverRepositoryImpl
Expand All @@ -29,9 +22,9 @@ import javax.inject.Singleton
@Module
@TestInstallIn(
components = [SingletonComponent::class],
replaces = [CoreRepositoryModule::class],
replaces = [CoreUserRepositoryModule::class],
)
object TestCoreRepositoryModule {
object TestCoreUserRepositoryModule {
@Provides
@Singleton
fun provideAuthRepository(): AuthRepository = FakeAuthRepository(loggedIn = false)
Expand All @@ -43,18 +36,6 @@ object TestCoreRepositoryModule {
@Provides
@Singleton
fun provideUserProfileRepository(): UserProfileRepository = FakeUserProfileRepository()

@Provides
@Singleton
fun provideAccountRepository(impl: AccountRepositoryImpl): AccountRepository = impl

@Provides
@Singleton
fun providePhotoUploadRepository(impl: PhotoUploadRepositoryImpl): PhotoUploadRepository = impl

@Provides
@Singleton
fun provideVideoUploadRepository(impl: VideoUploadRepositoryImpl): VideoUploadRepository = impl
}

@Module
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.afternote.core.di
package com.afternote.core.common.di

import com.afternote.core.common.di.IoDispatcher
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.afternote.core.data.di

import com.afternote.core.data.repoimpl.account.AccountRepositoryImpl
import com.afternote.core.domain.repository.account.AccountRepository
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

/** 구현체와 같은 모듈에 있으므로 `internal` 로 닫는다 — 바깥에서 impl 을 만질 수 없다. */
@InstallIn(SingletonComponent::class)
@Module
internal interface CoreAccountRepositoryModule {
@Binds
@Singleton
fun bindAccountRepository(impl: AccountRepositoryImpl): AccountRepository
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.afternote.core.data.di

import com.afternote.core.data.repoimpl.PhotoUploadRepositoryImpl
import com.afternote.core.data.repoimpl.VideoUploadRepositoryImpl
import com.afternote.core.domain.repository.PhotoUploadRepository
import com.afternote.core.domain.repository.VideoUploadRepository
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

/** 구현체와 같은 모듈에 있으므로 `internal` 로 닫는다 — 바깥에서 impl 을 만질 수 없다. */
@InstallIn(SingletonComponent::class)
@Module
internal interface CoreUploadRepositoryModule {
@Binds
@Singleton
fun bindPhotoUploadRepository(impl: PhotoUploadRepositoryImpl): PhotoUploadRepository

@Binds
@Singleton
fun bindVideoUploadRepository(impl: VideoUploadRepositoryImpl): VideoUploadRepository
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.afternote.core.data.di

import com.afternote.core.data.repoimpl.UserProfileRepositoryImpl
import com.afternote.core.data.repoimpl.UserRepositoryImpl
import com.afternote.core.data.repoimpl.auth.AuthRepositoryImpl
import com.afternote.core.domain.repository.UserProfileRepository
import com.afternote.core.domain.repository.UserRepository
import com.afternote.core.domain.repository.auth.AuthRepository
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

/**
* 세션·사용자 저장소 바인딩.
*
* 이 모듈만 `public` 인 이유 — `app` 의 androidTest 가
* `@TestInstallIn(replaces = [CoreUserRepositoryModule::class])` 로 이 셋을 페이크로 갈아끼운다.
* `replaces` 는 모듈 클래스를 참조하므로 `internal` 로 닫을 수 없다.
*
* 그래서 형제 모듈들과 달리 `interface` 가 아니라 `abstract class` 다. 바인딩 메서드가 `public` 이면
* `'public' function exposes its 'internal' parameter type` 으로 컴파일되지 않는데, interface 멤버에는
* 가시성을 줄 수 없다. abstract class 라야 클래스는 열어 두고 메서드만 `internal` 로 닫는다.
*/
@InstallIn(SingletonComponent::class)
@Module
abstract class CoreUserRepositoryModule {
@Binds
@Singleton
internal abstract fun bindAuthRepository(impl: AuthRepositoryImpl): AuthRepository

@Binds
@Singleton
internal abstract fun bindUserRepository(impl: UserRepositoryImpl): UserRepository

@Binds
@Singleton
internal abstract fun bindUserProfileRepository(impl: UserProfileRepositoryImpl): UserProfileRepository
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ private fun resolveExtension(mime: String?): String {
return resolved?.takeIf { it in ALLOWED_EXTENSIONS } ?: DEFAULT_EXTENSION
}

class PhotoUploadRepositoryImpl
internal class PhotoUploadRepositoryImpl
@Inject
constructor(
@param:ApplicationContext private val context: Context,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import com.afternote.core.domain.repository.UserProfileRepository
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject

class UserProfileRepositoryImpl
internal class UserProfileRepositoryImpl
@Inject
constructor(
private val dataSource: UserProfileDataSource,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ import kotlinx.coroutines.flow.update
import javax.inject.Inject
import com.afternote.core.data.mapper.delivery.toDomain as toDeliveryConditionsDomain

// `app` 의 androidTest(SettingCompletionAndroidTest)가 Hilt 를 우회해 이 구현을 직접 조립하므로
// 형제 구현체들과 달리 `internal` 로 닫지 못한다. 닫으려면 그 테스트의 페이크 기반 개조가 선행돼야 한다 (#930).
class UserRepositoryImpl
@Inject
constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import javax.inject.Named
/** MIME 타입에서 확장자를 못 뽑았을 때 폴백. 대부분의 안드로이드 영상이 mp4 라 합리적 디폴트. */
private const val DEFAULT_VIDEO_EXTENSION = "mp4"

class VideoUploadRepositoryImpl
internal class VideoUploadRepositoryImpl
@Inject
constructor(
@param:ApplicationContext private val context: Context,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import com.afternote.core.network.model.requireStatus
import com.afternote.core.network.service.AccountApiService
import javax.inject.Inject

class AccountRepositoryImpl
internal class AccountRepositoryImpl
@Inject
constructor(
private val accountApiService: AccountApiService,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import kotlinx.coroutines.flow.Flow
import java.io.IOException
import javax.inject.Inject

class AuthRepositoryImpl
internal class AuthRepositoryImpl
@Inject
constructor(
private val tokenDataSource: TokenDataSource,
Expand Down
1 change: 0 additions & 1 deletion core/di/.gitignore

This file was deleted.

16 changes: 0 additions & 16 deletions core/di/build.gradle.kts

This file was deleted.

Empty file removed core/di/consumer-rules.pro
Empty file.
21 changes: 0 additions & 21 deletions core/di/proguard-rules.pro

This file was deleted.

4 changes: 0 additions & 4 deletions core/di/src/main/AndroidManifest.xml

This file was deleted.

This file was deleted.

1 change: 0 additions & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ include(":app")
include(":core:common")
include(":core:data")
include(":core:datastore")
include(":core:di")
include(":core:domain")
include(":core:model")
include(":core:network")
Expand Down
Loading