From f61608f10fd085d902afe72f388cdd0a68ac3a7f Mon Sep 17 00:00:00 2001 From: ArtemEmelyanov Date: Fri, 10 Nov 2023 16:34:42 +0400 Subject: [PATCH] Feature: di --- .idea/deploymentTargetDropDown.xml | 4 ++-- .../com/example/android_programming/App.kt | 7 ++---- .../android_programming/AppContainer.kt | 11 ++++++++++ .../android_programming/AppDataContainer.kt | 22 +++++++++++++++++++ .../repository/OrderRepoImpl.kt | 20 +++++++++++++++++ .../repository/OrderRepository.kt | 14 ++++++++++++ .../repository/SneakerRepoImpl.kt | 18 +++++++++++++++ .../repository/SneakerRepository.kt | 12 ++++++++++ .../repository/UserRepoImpl.kt | 21 ++++++++++++++++++ .../repository/UserRepository.kt | 14 ++++++++++++ 10 files changed, 136 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/com/example/android_programming/AppContainer.kt create mode 100644 app/src/main/java/com/example/android_programming/AppDataContainer.kt create mode 100644 app/src/main/java/com/example/android_programming/repository/OrderRepoImpl.kt create mode 100644 app/src/main/java/com/example/android_programming/repository/OrderRepository.kt create mode 100644 app/src/main/java/com/example/android_programming/repository/SneakerRepoImpl.kt create mode 100644 app/src/main/java/com/example/android_programming/repository/SneakerRepository.kt create mode 100644 app/src/main/java/com/example/android_programming/repository/UserRepoImpl.kt create mode 100644 app/src/main/java/com/example/android_programming/repository/UserRepository.kt diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 26e1ab7..7f8a351 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -7,11 +7,11 @@ - + - + \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/App.kt b/app/src/main/java/com/example/android_programming/App.kt index 3cb42ef..27af2b2 100644 --- a/app/src/main/java/com/example/android_programming/App.kt +++ b/app/src/main/java/com/example/android_programming/App.kt @@ -7,13 +7,10 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch class App : Application() { - val database by lazy { AppDatabase.getInstance(this)} + lateinit var container: AppContainer override fun onCreate() { super.onCreate() -// this.deleteDatabase("my-db") - CoroutineScope(Dispatchers.IO).launch { - AppDatabase.populateDatabase() - } + container = AppDataContainer(this) } } \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/AppContainer.kt b/app/src/main/java/com/example/android_programming/AppContainer.kt new file mode 100644 index 0000000..e7372a6 --- /dev/null +++ b/app/src/main/java/com/example/android_programming/AppContainer.kt @@ -0,0 +1,11 @@ +package com.example.android_programming + +import com.example.android_programming.repository.OrderRepository +import com.example.android_programming.repository.SneakerRepository +import com.example.android_programming.repository.UserRepository + +interface AppContainer { + val sneakerRepo: SneakerRepository + val userRepo: UserRepository + val orderRepo: OrderRepository +} \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/AppDataContainer.kt b/app/src/main/java/com/example/android_programming/AppDataContainer.kt new file mode 100644 index 0000000..8db3a7c --- /dev/null +++ b/app/src/main/java/com/example/android_programming/AppDataContainer.kt @@ -0,0 +1,22 @@ +package com.example.android_programming + +import android.content.Context +import com.example.android_programming.database.AppDatabase +import com.example.android_programming.repository.OrderRepoImpl +import com.example.android_programming.repository.OrderRepository +import com.example.android_programming.repository.SneakerRepoImpl +import com.example.android_programming.repository.SneakerRepository +import com.example.android_programming.repository.UserRepoImpl +import com.example.android_programming.repository.UserRepository + +class AppDataContainer(private val context: Context) : AppContainer { + override val sneakerRepo: SneakerRepository by lazy { + SneakerRepoImpl(AppDatabase.getInstance(context).sneakerDao()) + } + override val userRepo: UserRepository by lazy { + UserRepoImpl(AppDatabase.getInstance(context).userDao()) + } + override val orderRepo: OrderRepository by lazy { + OrderRepoImpl(AppDatabase.getInstance(context).orderDao()) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/repository/OrderRepoImpl.kt b/app/src/main/java/com/example/android_programming/repository/OrderRepoImpl.kt new file mode 100644 index 0000000..a1e5e13 --- /dev/null +++ b/app/src/main/java/com/example/android_programming/repository/OrderRepoImpl.kt @@ -0,0 +1,20 @@ +package com.example.android_programming.repository + +import com.example.android_programming.dao.OrderDao +import com.example.android_programming.model.Order +import com.example.android_programming.model.OrderSneaker +import com.example.android_programming.model.OrderWithSneakers +import kotlinx.coroutines.flow.Flow + +class OrderRepoImpl(private val orderDao: OrderDao) : OrderRepository { + + override suspend fun createOrder(order: Order): Long = orderDao.createOrder(order) + + override suspend fun insertOrderSneaker(orderSneaker: OrderSneaker) = orderDao.insertOrderSneaker(orderSneaker) + + override suspend fun delete(order: Order) = orderDao.delete(order) + + override fun getOrderWithSneakers(id: Int): Flow = orderDao.getOrderWithSneakers(id) + + override fun getAllOrder(): Flow> = orderDao.getAllOrder() +} \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/repository/OrderRepository.kt b/app/src/main/java/com/example/android_programming/repository/OrderRepository.kt new file mode 100644 index 0000000..6f7b760 --- /dev/null +++ b/app/src/main/java/com/example/android_programming/repository/OrderRepository.kt @@ -0,0 +1,14 @@ +package com.example.android_programming.repository + +import com.example.android_programming.model.Order +import com.example.android_programming.model.OrderSneaker +import com.example.android_programming.model.OrderWithSneakers +import kotlinx.coroutines.flow.Flow + +interface OrderRepository { + suspend fun createOrder(order: Order): Long + suspend fun insertOrderSneaker(orderSneaker: OrderSneaker) + suspend fun delete(order: Order) + fun getOrderWithSneakers(id: Int): Flow + fun getAllOrder(): Flow> +} \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/repository/SneakerRepoImpl.kt b/app/src/main/java/com/example/android_programming/repository/SneakerRepoImpl.kt new file mode 100644 index 0000000..11e97d1 --- /dev/null +++ b/app/src/main/java/com/example/android_programming/repository/SneakerRepoImpl.kt @@ -0,0 +1,18 @@ +package com.example.android_programming.repository + +import com.example.android_programming.dao.SneakerDao +import com.example.android_programming.model.Sneaker +import kotlinx.coroutines.flow.Flow + +class SneakerRepoImpl(private val sneakerDao: SneakerDao) : SneakerRepository { + + override suspend fun insertSneaker(sneaker: Sneaker) = sneakerDao.insert(sneaker) + + override suspend fun updateSneaker(sneaker: Sneaker) = sneakerDao.update(sneaker) + + override suspend fun deleteSneaker(sneaker: Sneaker) = sneakerDao.delete(sneaker) + + override suspend fun getSneakerById(id: Int): Sneaker = sneakerDao.getSneakerById(id) + + override fun getAllSneakers(): Flow> = sneakerDao.getAllSneakers() +} \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/repository/SneakerRepository.kt b/app/src/main/java/com/example/android_programming/repository/SneakerRepository.kt new file mode 100644 index 0000000..5d099ee --- /dev/null +++ b/app/src/main/java/com/example/android_programming/repository/SneakerRepository.kt @@ -0,0 +1,12 @@ +package com.example.android_programming.repository + +import com.example.android_programming.model.Sneaker +import kotlinx.coroutines.flow.Flow + +interface SneakerRepository { + suspend fun insertSneaker(sneaker: Sneaker) + suspend fun updateSneaker(sneaker: Sneaker) + suspend fun deleteSneaker(sneaker: Sneaker) + suspend fun getSneakerById(id: Int): Sneaker + fun getAllSneakers(): Flow> +} \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/repository/UserRepoImpl.kt b/app/src/main/java/com/example/android_programming/repository/UserRepoImpl.kt new file mode 100644 index 0000000..d210b13 --- /dev/null +++ b/app/src/main/java/com/example/android_programming/repository/UserRepoImpl.kt @@ -0,0 +1,21 @@ +package com.example.android_programming.repository + +import com.example.android_programming.dao.UserDao +import com.example.android_programming.model.User +import com.example.android_programming.model.UserWithOrder +import kotlinx.coroutines.flow.Flow + +class UserRepoImpl(private val userDao: UserDao) : UserRepository { + + override suspend fun createUser(user: User) = userDao.createUser(user) + + override suspend fun updateUser(user: User) = userDao.updateUser(user) + + override suspend fun deleteUser(user: User) = userDao.deleteUser(user) + + override suspend fun getUserById(id: Int): User = userDao.getUserById(id) + + override suspend fun getUserByEmail(email: String): User = userDao.getUserByEmail(email) + + override fun getUserOrders(id: Int): Flow = userDao.getUserOrders(id) +} \ No newline at end of file diff --git a/app/src/main/java/com/example/android_programming/repository/UserRepository.kt b/app/src/main/java/com/example/android_programming/repository/UserRepository.kt new file mode 100644 index 0000000..6bfcf0b --- /dev/null +++ b/app/src/main/java/com/example/android_programming/repository/UserRepository.kt @@ -0,0 +1,14 @@ +package com.example.android_programming.repository + +import com.example.android_programming.model.User +import com.example.android_programming.model.UserWithOrder +import kotlinx.coroutines.flow.Flow + +interface UserRepository { + suspend fun createUser(user: User) + suspend fun updateUser(user: User) + suspend fun deleteUser(user: User) + suspend fun getUserById(id: Int): User + suspend fun getUserByEmail(email: String): User + fun getUserOrders(id: Int) : Flow +} \ No newline at end of file