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" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="7c94e195-a540-483e-9a1c-11797aeb1741" name="Changes" comment="feature: lab3 is done">
|
||||
<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/repository/OrderRepository.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/repository/UserRepository.kt" afterDir="false" />
|
||||
<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/viewmodel/OrderViewModel.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/viewmodel/UserViewModel.kt" 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/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/dao/UserDao.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/dao/UserDao.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" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
@ -291,7 +288,14 @@
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1699948377847</updated>
|
||||
</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 />
|
||||
</component>
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
@ -309,6 +313,7 @@
|
||||
<MESSAGE value="empty activity test" />
|
||||
<MESSAGE value="feature: UI, lab2 maybe 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>
|
||||
</project>
|
@ -7,6 +7,7 @@ import androidx.room.Query
|
||||
import com.example.myapplication.model.Order
|
||||
import com.example.myapplication.model.OrderService
|
||||
import com.example.myapplication.model.OrderWithServices
|
||||
import com.example.myapplication.model.UserWithOrder
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
@ -21,4 +22,6 @@ interface OrderDao {
|
||||
suspend fun getOrderWithServices(id: Int): Flow<OrderWithServices>
|
||||
@Query("SELECT * FROM tbl_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 getOrderWithServices(id: Int) = orderDao.getOrderWithServices(id)
|
||||
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 getUserById(id: Int) = userDao.getUserById(id)
|
||||
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