feature&fix: lab4 add viewmodel, fix repos
This commit is contained in:
parent
ff959a86aa
commit
f1f3dcf01f
25
.idea/workspace.xml
generated
25
.idea/workspace.xml
generated
@ -9,16 +9,13 @@
|
|||||||
<option name="autoReloadType" value="NONE" />
|
<option name="autoReloadType" value="NONE" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="7c94e195-a540-483e-9a1c-11797aeb1741" name="Changes" comment="feature: lab3 is done">
|
<list default="true" id="7c94e195-a540-483e-9a1c-11797aeb1741" name="Changes" comment="feature: lab4 add repos">
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/repository/BasketRepository.kt" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/viewmodel/OrderViewModel.kt" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/repository/OrderRepository.kt" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/viewmodel/ServiceViewModel.kt" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/repository/ServiceRepository.kt" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/viewmodel/UserViewModel.kt" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/repository/UserRepository.kt" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/dao/BasketDao.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/dao/BasketDao.kt" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/dao/OrderDao.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/dao/OrderDao.kt" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/dao/OrderDao.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/dao/OrderDao.kt" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/dao/ServiceDao.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/dao/ServiceDao.kt" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/repository/OrderRepository.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/repository/OrderRepository.kt" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/dao/UserDao.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/dao/UserDao.kt" afterDir="false" />
|
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
@ -291,7 +288,14 @@
|
|||||||
<option name="project" value="LOCAL" />
|
<option name="project" value="LOCAL" />
|
||||||
<updated>1699948377847</updated>
|
<updated>1699948377847</updated>
|
||||||
</task>
|
</task>
|
||||||
<option name="localTasksCounter" value="6" />
|
<task id="LOCAL-00006" summary="feature: lab4 add repos">
|
||||||
|
<created>1700908930838</created>
|
||||||
|
<option name="number" value="00006" />
|
||||||
|
<option name="presentableId" value="LOCAL-00006" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1700908930838</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="7" />
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="Vcs.Log.Tabs.Properties">
|
<component name="Vcs.Log.Tabs.Properties">
|
||||||
@ -309,6 +313,7 @@
|
|||||||
<MESSAGE value="empty activity test" />
|
<MESSAGE value="empty activity test" />
|
||||||
<MESSAGE value="feature: UI, lab2 maybe done" />
|
<MESSAGE value="feature: UI, lab2 maybe done" />
|
||||||
<MESSAGE value="feature: lab3 is done" />
|
<MESSAGE value="feature: lab3 is done" />
|
||||||
<option name="LAST_COMMIT_MESSAGE" value="feature: lab3 is done" />
|
<MESSAGE value="feature: lab4 add repos" />
|
||||||
|
<option name="LAST_COMMIT_MESSAGE" value="feature: lab4 add repos" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
@ -7,6 +7,7 @@ import androidx.room.Query
|
|||||||
import com.example.myapplication.model.Order
|
import com.example.myapplication.model.Order
|
||||||
import com.example.myapplication.model.OrderService
|
import com.example.myapplication.model.OrderService
|
||||||
import com.example.myapplication.model.OrderWithServices
|
import com.example.myapplication.model.OrderWithServices
|
||||||
|
import com.example.myapplication.model.UserWithOrder
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
@ -21,4 +22,6 @@ interface OrderDao {
|
|||||||
suspend fun getOrderWithServices(id: Int): Flow<OrderWithServices>
|
suspend fun getOrderWithServices(id: Int): Flow<OrderWithServices>
|
||||||
@Query("SELECT * FROM tbl_order")
|
@Query("SELECT * FROM tbl_order")
|
||||||
suspend fun getAllOrders(): Flow<List<Order>>
|
suspend fun getAllOrders(): Flow<List<Order>>
|
||||||
|
@Query("SELECT * FROM tbl_user WHERE userId =:id")
|
||||||
|
suspend fun getUserOrders(id: Int) : Flow<UserWithOrder>
|
||||||
}
|
}
|
@ -10,4 +10,5 @@ class OrderRepository(private val orderDao: OrderDao) {
|
|||||||
suspend fun delete(order: Order) = orderDao.delete(order)
|
suspend fun delete(order: Order) = orderDao.delete(order)
|
||||||
suspend fun getOrderWithServices(id: Int) = orderDao.getOrderWithServices(id)
|
suspend fun getOrderWithServices(id: Int) = orderDao.getOrderWithServices(id)
|
||||||
suspend fun getAllOrders() = orderDao.getAllOrders()
|
suspend fun getAllOrders() = orderDao.getAllOrders()
|
||||||
|
suspend fun getUserOrders(id: Int) = orderDao.getUserOrders(id)
|
||||||
}
|
}
|
@ -9,5 +9,4 @@ class UserRepository(private val userDao: UserDao) {
|
|||||||
suspend fun delete(user: User) = userDao.delete(user)
|
suspend fun delete(user: User) = userDao.delete(user)
|
||||||
suspend fun getUserById(id: Int) = userDao.getUserById(id)
|
suspend fun getUserById(id: Int) = userDao.getUserById(id)
|
||||||
suspend fun getUserByEmail(email: String) = userDao.getUserByEmail(email)
|
suspend fun getUserByEmail(email: String) = userDao.getUserByEmail(email)
|
||||||
suspend fun getUserByEmail(id: Int) = userDao.getUserOrders(id)
|
|
||||||
}
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package com.example.myapplication.viewmodel
|
||||||
|
|
||||||
|
import androidx.compose.runtime.mutableLongStateOf
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.example.myapplication.GlobalUser
|
||||||
|
import com.example.myapplication.model.Basket
|
||||||
|
import com.example.myapplication.model.BasketService
|
||||||
|
import com.example.myapplication.model.BasketWithServices
|
||||||
|
import com.example.myapplication.model.Service
|
||||||
|
import com.example.myapplication.repository.BasketRepository
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
class BasketViewModel(private val basketRepository: BasketRepository) : ViewModel() {
|
||||||
|
val date = mutableLongStateOf(0L)
|
||||||
|
private var _selectedItems = mutableStateOf<List<Service>>(emptyList())
|
||||||
|
val selectedItems get() = _selectedItems.value
|
||||||
|
|
||||||
|
fun createBasket() = viewModelScope.launch {
|
||||||
|
val basket = Basket(
|
||||||
|
date = date.value,
|
||||||
|
total = getTotal(),
|
||||||
|
creatorUserId = GlobalUser.getInstance().getUser()?.userId!!
|
||||||
|
)
|
||||||
|
|
||||||
|
var basketId = basketRepository.insert(basket)
|
||||||
|
|
||||||
|
for(service in selectedItems){
|
||||||
|
val basketService = BasketService(null, basketId.toInt(), service.serviceId!!)
|
||||||
|
basketRepository.insertBasketService(basketService)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun getBasketWithServices(id: Int) : Flow<BasketWithServices> {
|
||||||
|
return basketRepository.getBasketWithServices(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getTotal(): Double {
|
||||||
|
return selectedItems.sumOf { it.price }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
package com.example.myapplication.viewmodel
|
||||||
|
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.example.myapplication.GlobalUser
|
||||||
|
import com.example.myapplication.model.Order
|
||||||
|
import com.example.myapplication.model.OrderService
|
||||||
|
import com.example.myapplication.model.OrderWithServices
|
||||||
|
import com.example.myapplication.model.Service
|
||||||
|
import com.example.myapplication.model.UserWithOrder
|
||||||
|
import com.example.myapplication.repository.OrderRepository
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import java.util.Date
|
||||||
|
|
||||||
|
class OrderViewModel(private val orderRepository: OrderRepository) : ViewModel() {
|
||||||
|
private var _selectedItems = mutableStateOf<List<Service>>(emptyList())
|
||||||
|
val selectedItems get() = _selectedItems.value
|
||||||
|
|
||||||
|
fun createOrder() = viewModelScope.launch {
|
||||||
|
val order = Order(
|
||||||
|
date = Date().time,
|
||||||
|
total = getTotal(),
|
||||||
|
creatorUserId = GlobalUser.getInstance().getUser()?.userId!!
|
||||||
|
)
|
||||||
|
|
||||||
|
var orderId = orderRepository.insert(order)
|
||||||
|
|
||||||
|
for(service in selectedItems){
|
||||||
|
val orderService = OrderService(orderId.toInt(), service.serviceId!!)
|
||||||
|
orderRepository.insertOrderService(orderService)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun getOrderWithServices(id: Int) : Flow<OrderWithServices> {
|
||||||
|
return orderRepository.getOrderWithServices(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun getUserOrders(id: Int): Flow<UserWithOrder> {
|
||||||
|
return orderRepository.getUserOrders(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getTotal(): Double {
|
||||||
|
return selectedItems.sumOf { it.price }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package com.example.myapplication.viewmodel
|
||||||
|
|
||||||
|
import androidx.compose.runtime.mutableDoubleStateOf
|
||||||
|
import androidx.compose.runtime.mutableIntStateOf
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.example.myapplication.R
|
||||||
|
import com.example.myapplication.model.Service
|
||||||
|
import com.example.myapplication.repository.ServiceRepository
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
class ServiceViewModel(private val serviceRepository: ServiceRepository): ViewModel() {
|
||||||
|
var name = mutableStateOf("")
|
||||||
|
var price = mutableDoubleStateOf(0.00)
|
||||||
|
var photo = mutableIntStateOf(R.drawable.image_service)
|
||||||
|
var service: Service? = null
|
||||||
|
|
||||||
|
fun createService() = viewModelScope.launch {
|
||||||
|
val service = Service(
|
||||||
|
name = name.value,
|
||||||
|
price = price.doubleValue,
|
||||||
|
photo = photo.intValue
|
||||||
|
)
|
||||||
|
serviceRepository.insert(service)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updateService(service: Service) = viewModelScope.launch {
|
||||||
|
serviceRepository.update(service)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun deleteService(service: Service) = viewModelScope.launch {
|
||||||
|
serviceRepository.delete(service)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getServiceById(id: Int) = viewModelScope.launch {
|
||||||
|
serviceRepository.getServiceById(id)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getAllServices() = viewModelScope.launch {
|
||||||
|
serviceRepository.getAllServices()
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package com.example.myapplication.viewmodel
|
||||||
|
|
||||||
|
import androidx.compose.runtime.mutableIntStateOf
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.example.myapplication.GlobalUser
|
||||||
|
import com.example.myapplication.R
|
||||||
|
import com.example.myapplication.model.RoleEnum
|
||||||
|
import com.example.myapplication.model.User
|
||||||
|
import com.example.myapplication.repository.UserRepository
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
class UserViewModel(private val userRepository: UserRepository): ViewModel() {
|
||||||
|
var name = mutableStateOf("")
|
||||||
|
var surname = mutableStateOf("")
|
||||||
|
var email = mutableStateOf("")
|
||||||
|
var password = mutableStateOf("")
|
||||||
|
var photo = mutableIntStateOf(R.drawable.icon_profile)
|
||||||
|
|
||||||
|
fun createUser() = viewModelScope.launch {
|
||||||
|
val user = User(
|
||||||
|
name = name.value,
|
||||||
|
surname = surname.value,
|
||||||
|
email = email.value,
|
||||||
|
password = password.value,
|
||||||
|
role = RoleEnum.User
|
||||||
|
)
|
||||||
|
userRepository.insert(user)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun authUser() = viewModelScope.launch {
|
||||||
|
val user = userRepository.getUserByEmail(email.value)
|
||||||
|
if(!password.value.isEmpty() and (user.password == password.value)){
|
||||||
|
val globalUser = GlobalUser.getInstance()
|
||||||
|
globalUser.setUser(user)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isValidEmail(email: String): Boolean {
|
||||||
|
return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user