Initial commit2

This commit is contained in:
2025-12-13 13:11:27 +03:00
parent d0703ca008
commit 016a470680
72 changed files with 2540 additions and 157 deletions

View File

@@ -0,0 +1,57 @@
package com.novayaplaneta.di
import android.content.Context
import androidx.room.Room
import com.novayaplaneta.data.local.NewPlanetDatabase
import com.novayaplaneta.data.local.dao.ChatMessageDao
import com.novayaplaneta.data.local.dao.RewardDao
import com.novayaplaneta.data.local.dao.ScheduleDao
import com.novayaplaneta.data.local.dao.TaskDao
import com.novayaplaneta.data.local.dao.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 provideDatabase(@ApplicationContext context: Context): NewPlanetDatabase {
return Room.databaseBuilder(
context,
NewPlanetDatabase::class.java,
"newplanet_database"
).build()
}
@Provides
fun provideUserDao(database: NewPlanetDatabase): UserDao {
return database.userDao()
}
@Provides
fun provideScheduleDao(database: NewPlanetDatabase): ScheduleDao {
return database.scheduleDao()
}
@Provides
fun provideTaskDao(database: NewPlanetDatabase): TaskDao {
return database.taskDao()
}
@Provides
fun provideRewardDao(database: NewPlanetDatabase): RewardDao {
return database.rewardDao()
}
@Provides
fun provideChatMessageDao(database: NewPlanetDatabase): ChatMessageDao {
return database.chatMessageDao()
}
}

View File

@@ -0,0 +1,60 @@
package com.novayaplaneta.di
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import com.novayaplaneta.data.remote.BackendApi
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import kotlinx.serialization.json.Json
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import java.util.concurrent.TimeUnit
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
private val json = Json {
ignoreUnknownKeys = true
isLenient = true
encodeDefaults = false
}
@Provides
@Singleton
fun provideOkHttpClient(): OkHttpClient {
val loggingInterceptor = HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
}
return OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.build()
}
@Provides
@Singleton
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
val contentType = "application/json".toMediaType()
return Retrofit.Builder()
.baseUrl("https://api.novayaplaneta.ru/")
.client(okHttpClient)
.addConverterFactory(json.asConverterFactory(contentType))
.build()
}
@Provides
@Singleton
fun provideBackendApi(retrofit: Retrofit): BackendApi {
return retrofit.create(BackendApi::class.java)
}
}

View File

@@ -0,0 +1,53 @@
package com.novayaplaneta.di
import com.novayaplaneta.data.repository.AIRepositoryImpl
import com.novayaplaneta.data.repository.AuthRepositoryImpl
import com.novayaplaneta.data.repository.RewardRepositoryImpl
import com.novayaplaneta.data.repository.ScheduleRepositoryImpl
import com.novayaplaneta.data.repository.TaskRepositoryImpl
import com.novayaplaneta.domain.repository.AIRepository
import com.novayaplaneta.domain.repository.AuthRepository
import com.novayaplaneta.domain.repository.RewardRepository
import com.novayaplaneta.domain.repository.ScheduleRepository
import com.novayaplaneta.domain.repository.TaskRepository
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 RepositoryModule {
@Binds
@Singleton
abstract fun bindAuthRepository(
authRepositoryImpl: AuthRepositoryImpl
): AuthRepository
@Binds
@Singleton
abstract fun bindScheduleRepository(
scheduleRepositoryImpl: ScheduleRepositoryImpl
): ScheduleRepository
@Binds
@Singleton
abstract fun bindTaskRepository(
taskRepositoryImpl: TaskRepositoryImpl
): TaskRepository
@Binds
@Singleton
abstract fun bindRewardRepository(
rewardRepositoryImpl: RewardRepositoryImpl
): RewardRepository
@Binds
@Singleton
abstract fun bindAIRepository(
aiRepositoryImpl: AIRepositoryImpl
): AIRepository
}