Add delete account feature to mobile app

- DELETE /api/auth/account/ API call in AuthApi + APILayer
- authProvider field on User model for email vs social auth detection
- DeleteAccountDialog with password (email) or "type DELETE" (social) confirmation
- Red "Delete Account" card on ProfileScreen
- Navigation wired in App.kt (clears data, returns to login)
- 10 i18n strings in strings.xml
- ViewModel unit tests for delete account state
This commit is contained in:
Trey T
2026-03-26 10:41:17 -05:00
parent 2e5dbaea50
commit af45588503
9 changed files with 352 additions and 0 deletions
@@ -58,6 +58,9 @@ class AuthViewModel : ViewModel() {
private val _googleSignInState = MutableStateFlow<ApiResult<GoogleSignInResponse>>(ApiResult.Idle)
val googleSignInState: StateFlow<ApiResult<GoogleSignInResponse>> = _googleSignInState
private val _deleteAccountState = MutableStateFlow<ApiResult<Unit>>(ApiResult.Idle)
val deleteAccountState: StateFlow<ApiResult<Unit>> = _deleteAccountState
fun login(username: String, password: String) {
viewModelScope.launch {
_loginState.value = ApiResult.Loading
@@ -271,4 +274,20 @@ class AuthViewModel : ViewModel() {
APILayer.logout()
}
}
fun deleteAccount(password: String?, confirmation: String?) {
viewModelScope.launch {
_deleteAccountState.value = ApiResult.Loading
val result = APILayer.deleteAccount(password = password, confirmation = confirmation)
_deleteAccountState.value = when (result) {
is ApiResult.Success -> ApiResult.Success(result.data)
is ApiResult.Error -> result
else -> ApiResult.Error("Unknown error")
}
}
}
fun resetDeleteAccountState() {
_deleteAccountState.value = ApiResult.Idle
}
}