feat: login and otp added

This commit is contained in:
2026-06-12 13:24:39 +03:30
parent e73269889f
commit c3496e3de4
18 changed files with 1252 additions and 49 deletions
@@ -1,13 +1,20 @@
package com.approagency.pharmacy.di
import com.approagency.pharmacy.data.billing.StubPurchaseGateway
import com.approagency.pharmacy.data.local.SessionManager
import com.approagency.pharmacy.data.local.database.LabDatabase
import com.approagency.pharmacy.data.remote.ApproApiService
import com.approagency.pharmacy.data.remote.AuthInterceptor
import com.approagency.pharmacy.data.remote.DarooyabApiService
import com.approagency.pharmacy.data.remote.DrugApiService
import com.approagency.pharmacy.data.remote.DrugDetailParser
import com.approagency.pharmacy.data.remote.DrugHtmlParser
import com.approagency.pharmacy.data.repository.AuthRepositoryImpl
import com.approagency.pharmacy.data.repository.DrugRepositoryImpl
import com.approagency.pharmacy.data.repository.LabRepositoryImpl
import com.approagency.pharmacy.domain.billing.PurchaseGateway
import com.approagency.pharmacy.domain.repository.AuthRepository
import com.approagency.pharmacy.domain.repository.DrugRepository
import com.approagency.pharmacy.domain.usecase.DrugDetailYabUseCase
import com.approagency.pharmacy.domain.usecase.GetDarmanUseCase
@@ -19,6 +26,8 @@ import com.approagency.pharmacy.domain.usecase.GetTestGroupUseCase
import com.approagency.pharmacy.domain.usecase.GetTestItemByGroupId
import com.approagency.pharmacy.domain.usecase.SearchDrugsYabUseCase
import com.approagency.pharmacy.domain.usecase.SearchTestsUseCase
import com.approagency.pharmacy.presentation.account.AccountSheetController
import com.approagency.pharmacy.presentation.viewModel.AccountViewModel
import com.approagency.pharmacy.presentation.viewModel.DrugDetailViewModel
import com.approagency.pharmacy.presentation.viewModel.HomeViewModel
import com.approagency.pharmacy.presentation.viewModel.LabViewModel
@@ -39,10 +48,14 @@ import java.net.CookiePolicy
import java.util.concurrent.TimeUnit
val jsonRetrofitQualifier = qualifier("jsonRetrofit")
val scalarRetrofitQualifier = qualifier("scalarRetrofit")
val authRetrofitQualifier = qualifier("authRetrofit")
val appModule= module {
single { LabDatabase.getInstance(androidContext()) }
// نشست کاربر روی دستگاه (توکن، موبایل، سهمیه‌ی جستجوی رایگان، وضعیت اشتراک)
single { SessionManager(androidContext()) }
single { get<LabDatabase>().testGroupDao() }
single { get<LabDatabase>().testItemDao() }
@@ -89,6 +102,35 @@ val appModule= module {
retrofit.create(DarooyabApiService::class.java)
}
// ========== Retrofit for APPROAGENCY auth/subscription backend ==========
// کلاینت مجزا با AuthInterceptor تا توکن فقط به این بک‌اند ارسال شود.
single<Retrofit>(authRetrofitQualifier) {
val authClient = OkHttpClient.Builder()
.addInterceptor(AuthInterceptor(get()))
.addInterceptor(HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
})
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build()
Retrofit.Builder()
.baseUrl(Config.AUTH_BASE_URL)
.client(authClient)
.addConverterFactory(GsonConverterFactory.create())
.build()
}
single<ApproApiService> {
val retrofit: Retrofit = get(authRetrofitQualifier)
retrofit.create(ApproApiService::class.java)
}
single<AuthRepository> { AuthRepositoryImpl(get(), get()) }
// درگاه پرداخت: روی main استاب؛ شاخه‌های myket/bazar جایگزین می‌کنند.
single<PurchaseGateway> { StubPurchaseGateway() }
factory { DrugHtmlParser() }
factory { DrugDetailParser() }
@@ -150,7 +192,14 @@ val appModule= module {
}
viewModel {
SearchViewModel(get())
SearchViewModel(get(), get(), get())
}
// کنترلر سراسری نمایش شیت حساب
single { AccountSheetController() }
viewModel {
AccountViewModel(get(), get(), get())
}
viewModel {
PharmacyViewModel(get() , get ())