diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index b42850d..5faa713 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -4,18 +4,18 @@ - + - + - - + + - - + + diff --git a/app/src/main/java/com/zyzf/coffeepreorder/api/MyServerService.kt b/app/src/main/java/com/zyzf/coffeepreorder/api/MyServerService.kt index c7decca..ad5ebca 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/api/MyServerService.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/api/MyServerService.kt @@ -23,7 +23,7 @@ interface MyServerService { @Query("pageSize") limit: Int, ): List - @GET("user/{id}/") + @GET("user/{id}") suspend fun getUser( @Path("id") id: Int, ): UserRemote @@ -78,7 +78,7 @@ interface MyServerService { ): CoffeeRemote companion object { - private const val BASE_URL = "http://192.168.42.143:8080/api/" + private const val BASE_URL = "http://192.168.0.100:8080/api/" @Volatile private var INSTANCE: MyServerService? = null diff --git a/app/src/main/java/com/zyzf/coffeepreorder/api/user/RestUserRepository.kt b/app/src/main/java/com/zyzf/coffeepreorder/api/user/RestUserRepository.kt index 03a1ecd..c8be0aa 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/api/user/RestUserRepository.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/api/user/RestUserRepository.kt @@ -44,18 +44,18 @@ class RestUserRepository( } override suspend fun getByUid(uid: Int): User = - service.getUser(uid).toUser() + service.getUser(uid).toUser()!! - override suspend fun tryLogin(login: String, password: String): User = + override suspend fun tryLogin(login: String, password: String): User? = service.tryLogin(login, password).toUser() override suspend fun insert(user: User): Long { - return service.createUser(user.toUserRemote()).toUser().uid.toLong() + return service.createUser(user.toUserRemote()).toUser()?.uid?.toLong()!! } override suspend fun update(user: User): Int { - return service.updateUser(user.uid, user.toUserRemote()).toUser().uid + return service.updateUser(user.uid, user.toUserRemote()).toUser()?.uid!! } override suspend fun delete(user: User) { diff --git a/app/src/main/java/com/zyzf/coffeepreorder/ui/AppViewModelProvider.kt b/app/src/main/java/com/zyzf/coffeepreorder/ui/AppViewModelProvider.kt index af065b2..c3aee76 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/ui/AppViewModelProvider.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/ui/AppViewModelProvider.kt @@ -8,6 +8,7 @@ import com.zyzf.coffeepreorder.CoffeeApplication import com.zyzf.coffeepreorder.ui.cart.CartViewModel import com.zyzf.coffeepreorder.ui.coffee.CoffeeListViewModel import com.zyzf.coffeepreorder.ui.login.LoginViewModel +import com.zyzf.coffeepreorder.ui.profile.ProfileViewModel import com.zyzf.coffeepreorder.ui.register.RegisterViewModel object AppViewModelProvider { @@ -24,6 +25,9 @@ object AppViewModelProvider { initializer { RegisterViewModel(coffeeApplication().container.userRestRepository) } + initializer { + ProfileViewModel(coffeeApplication().container.userRestRepository) + } } } diff --git a/app/src/main/java/com/zyzf/coffeepreorder/ui/coffee/CoffeeListViewModel.kt b/app/src/main/java/com/zyzf/coffeepreorder/ui/coffee/CoffeeListViewModel.kt index d1eace2..20d12c9 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/ui/coffee/CoffeeListViewModel.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/ui/coffee/CoffeeListViewModel.kt @@ -52,11 +52,9 @@ class CoffeeListViewModel( copyFileToSftp(f, "/mnt/nextcloud/data/Zyzf/files/Images") } - suspend fun editCoffee(coffee: Coffee, imageUri: Uri?, context: Context) { + suspend fun editCoffee(coffee: Coffee, imageUri: Any?, context: Context) { val editedCoffee: Int = coffeeRepository.update(coffee) - if (imageUri == null) { - return - } + if (imageUri !is Uri) return val inputStream = context.contentResolver.openInputStream(imageUri) val bitmap = BitmapFactory.decodeStream(inputStream) diff --git a/app/src/main/java/com/zyzf/coffeepreorder/ui/login/LoginViewModel.kt b/app/src/main/java/com/zyzf/coffeepreorder/ui/login/LoginViewModel.kt index 5e2bcff..f511795 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/ui/login/LoginViewModel.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/ui/login/LoginViewModel.kt @@ -8,6 +8,11 @@ class LoginViewModel( private val userRepository: UserRepository ) : ViewModel() { suspend fun tryLogin(login: String, password: String): User? { - return userRepository.tryLogin(login, password) + val user: User? = userRepository.tryLogin(login, password) + return if (user?.uid == 0) { + null + } else { + user + } } } diff --git a/app/src/main/java/com/zyzf/coffeepreorder/ui/profile/Profile.kt b/app/src/main/java/com/zyzf/coffeepreorder/ui/profile/Profile.kt index 6e03c48..7240ac6 100644 --- a/app/src/main/java/com/zyzf/coffeepreorder/ui/profile/Profile.kt +++ b/app/src/main/java/com/zyzf/coffeepreorder/ui/profile/Profile.kt @@ -29,6 +29,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -39,13 +40,17 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController import com.zyzf.coffeepreorder.CoffeeApplication import com.zyzf.coffeepreorder.R import com.zyzf.coffeepreorder.database.AppDatabase import com.zyzf.coffeepreorder.database.model.User +import com.zyzf.coffeepreorder.ui.AppViewModelProvider +import com.zyzf.coffeepreorder.ui.login.LoginViewModel import com.zyzf.coffeepreorder.ui.navigation.Screen import com.zyzf.coffeepreorder.ui.theme.CoffeePreorderTheme +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope @@ -54,10 +59,14 @@ import kotlinx.coroutines.withContext @OptIn(DelicateCoroutinesApi::class) @Composable -fun Profile(navController: NavController?) { +fun Profile( + navController: NavController?, + viewModel: ProfileViewModel = viewModel(factory = AppViewModelProvider.Factory) +) { val openDialogEdit = remember { mutableStateOf(false) } val openDialogExit = remember { mutableStateOf(false) } val openDialogDelete = remember { mutableStateOf(false) } + val coroutineScope = rememberCoroutineScope() val context = LocalContext.current var user: User by remember { mutableStateOf(User("", "", "", "", "")) } var userLogin by remember { mutableStateOf("") } @@ -193,13 +202,10 @@ fun Profile(navController: NavController?) { confirmButton = { TextButton( onClick = { - GlobalScope.launch (Dispatchers.Main) { - if (userOldPsswd.value == user.password && userNewPsswd.value == userNewPsswdConf.value) { - val userUid: Int? = AppDatabase.getInstance(context).userDao().update(User( - user.uid, userLogin, userFIO, userPhone, userNewPsswd.value, user.role)) - user = AppDatabase.getInstance(context).userDao().getByUid(userUid!!)!! - CoffeeApplication.currentUser = user - } + coroutineScope.launch { + val user: User = viewModel.changeUser(user.password, userOldPsswd.value, userNewPsswd.value, userNewPsswd.value, + user.uid, userLogin, userFIO, userPhone, user.role) + CoffeeApplication.currentUser = user } openDialogEdit.value = false } diff --git a/app/src/main/java/com/zyzf/coffeepreorder/ui/profile/ProfileViewModel.kt b/app/src/main/java/com/zyzf/coffeepreorder/ui/profile/ProfileViewModel.kt new file mode 100644 index 0000000..7dfbc79 --- /dev/null +++ b/app/src/main/java/com/zyzf/coffeepreorder/ui/profile/ProfileViewModel.kt @@ -0,0 +1,30 @@ +package com.zyzf.coffeepreorder.ui.profile + +import androidx.lifecycle.ViewModel +import com.zyzf.coffeepreorder.CoffeeApplication +import com.zyzf.coffeepreorder.database.AppDatabase +import com.zyzf.coffeepreorder.database.model.User +import com.zyzf.coffeepreorder.database.repository.UserRepository + +class ProfileViewModel( + private val userRepository: UserRepository +) : ViewModel() { + suspend fun changeUser(currentUserPassw: String, + userOldPsswd: String, + userNewPsswd: String, + userNewPsswdConf: String, + userUid: Int, + userLogin: String, + userFIO: String, + userPhone: String, + userRole: String): User { + if (userOldPsswd == currentUserPassw && userNewPsswd == userNewPsswdConf) { + val userUid: Int? = userRepository.update(User( + userUid, userLogin, userFIO, userPhone, userNewPsswd, userRole)) + } else { + val userUid: Int? = userRepository.update(User( + userUid, userLogin, userFIO, userPhone, currentUserPassw, userRole)) + } + return userRepository.getByUid(userUid!!)!! + } +} diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml index d9d7aab..d5d65db 100644 --- a/app/src/main/res/xml/network_security_config.xml +++ b/app/src/main/res/xml/network_security_config.xml @@ -1,6 +1,6 @@ - 192.168.42.143 + 192.168.0.100 \ No newline at end of file diff --git a/backend/src/main/java/com/kalyshev/yan/coffee/service/CoffeeService.java b/backend/src/main/java/com/kalyshev/yan/coffee/service/CoffeeService.java index 66077ae..00459a0 100644 --- a/backend/src/main/java/com/kalyshev/yan/coffee/service/CoffeeService.java +++ b/backend/src/main/java/com/kalyshev/yan/coffee/service/CoffeeService.java @@ -2,6 +2,7 @@ package com.kalyshev.yan.coffee.service; import com.kalyshev.yan.coffee.controller.CoffeeDto; import com.kalyshev.yan.coffee.model.Coffee; +import com.kalyshev.yan.coffee.repository.CoffeeNotFoundException; import com.kalyshev.yan.coffee.repository.CoffeeRepository; import com.kalyshev.yan.user.repository.UserNotFoundException; import com.kalyshev.yan.util.validation.ValidatorUtil; @@ -40,7 +41,7 @@ public class CoffeeService { @Transactional(readOnly = true) public Coffee findCoffee(Long id) { final Optional coffee = coffeeRepository.findById(id); - return coffee.orElseThrow(() -> new UserNotFoundException(id)); + return coffee.orElseThrow(() -> new CoffeeNotFoundException(id)); } @Transactional(readOnly = true) public List findAllCoffees(int pageNo, int pageSize, String sortBy, String sortDir) { diff --git a/backend/src/main/java/com/kalyshev/yan/user/controller/UserController.java b/backend/src/main/java/com/kalyshev/yan/user/controller/UserController.java index 8ce8cc5..0ee9465 100644 --- a/backend/src/main/java/com/kalyshev/yan/user/controller/UserController.java +++ b/backend/src/main/java/com/kalyshev/yan/user/controller/UserController.java @@ -30,7 +30,7 @@ public class UserController { return userService.findAllUsers(pageNo, pageSize, sortBy, sortDir); } @GetMapping("/tryLogin") - public Optional tryLogin( + public User tryLogin( @RequestParam(value = "login") String login, @RequestParam(value = "password") String password ){ diff --git a/backend/src/main/java/com/kalyshev/yan/user/model/User.java b/backend/src/main/java/com/kalyshev/yan/user/model/User.java index f6dc7b3..19be0d2 100644 --- a/backend/src/main/java/com/kalyshev/yan/user/model/User.java +++ b/backend/src/main/java/com/kalyshev/yan/user/model/User.java @@ -27,6 +27,14 @@ public class User { this.password = password; this.role = role; } + public User(Long id, String login, String fio, String phone, String password, String role) { + this.id = id; + this.login = login; + this.fio = fio; + this.phone = phone; + this.password = password; + this.role = role; + } public Long getId() { return id; diff --git a/backend/src/main/java/com/kalyshev/yan/user/service/UserService.java b/backend/src/main/java/com/kalyshev/yan/user/service/UserService.java index 077676f..9ba3461 100644 --- a/backend/src/main/java/com/kalyshev/yan/user/service/UserService.java +++ b/backend/src/main/java/com/kalyshev/yan/user/service/UserService.java @@ -1,5 +1,6 @@ package com.kalyshev.yan.user.service; +import com.kalyshev.yan.coffee.repository.CoffeeNotFoundException; import com.kalyshev.yan.user.controller.UserDto; import com.kalyshev.yan.user.model.User; import com.kalyshev.yan.user.repository.UserNotFoundException; @@ -52,8 +53,14 @@ public class UserService { return user.orElseThrow(() -> new UserNotFoundException(id)); } @Transactional(readOnly = true) - public Optional tryLogin(String login, String password) { - return userRepository.tryLogin(login, password); + public User tryLogin(String login, String password) { + Optional user = userRepository.tryLogin(login, password); + if (user.isPresent()) { + return user.orElseThrow((() -> new UserNotFoundException((long)0))) ; + } else { + return new User((long)0,"", "", "", "", ""); + } + } @Transactional(readOnly = true) public List findAllUsers(int pageNo, int pageSize, String sortBy, String sortDir) {