Commit 81792b36 by Paktalin

Refactoring in FirestoreManager

parent f3574940
<component name="ProjectDictionaryState">
<dictionary name="Paktalin">
<words>
<w>firebase</w>
<w>firestore</w>
</words>
</dictionary>
</component>
\ No newline at end of file
......@@ -7,9 +7,6 @@ class Vocabulary(words: MutableList<WordItem>) {
private const val SORT_BY_TIME = 0
private const val SORT_BY_WORD = 1
private const val SORT_BY_TRANSLATION = 2
const val WORDS = "words"
const val VOCABULARIES = "vocabularies"
}
var pojo:Pojo
......
......@@ -67,7 +67,7 @@ class LogInActivity : AppCompatActivity() {
private fun createRandomUser() {
etEmail.setText("random@gmail.com")
etPassword.setText("123456")
processUser { com.paktalin.vocabularynotebook.utils.signUp(this@LogInActivity, email!!, password!!) }
processUser { signUp(this@LogInActivity, email!!, password!!) }
}
companion object { private val TAG = "VN/" + LogInActivity::class.simpleName }
......
......@@ -2,10 +2,8 @@ package com.paktalin.vocabularynotebook.ui.activities
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.util.Log
import kotlinx.android.synthetic.main.activity_main.*
import android.view.WindowManager
import android.app.Activity
import android.view.Menu
import android.view.MenuItem
......@@ -13,12 +11,10 @@ import android.view.View
import android.view.inputmethod.InputMethodManager
import kotlinx.android.synthetic.main.fragment_vocabulary.*
import android.support.v7.widget.SearchView
import android.view.WindowManager
import com.paktalin.vocabularynotebook.*
import com.paktalin.vocabularynotebook.ui.fragments.VocabularyFragment
import com.paktalin.vocabularynotebook.utils.addFragment
import com.paktalin.vocabularynotebook.utils.extractVocabularyData
import com.paktalin.vocabularynotebook.utils.shortToast
import com.paktalin.vocabularynotebook.utils.startActivity
import com.paktalin.vocabularynotebook.utils.*
class MainActivity : AppCompatActivity() {
......@@ -64,7 +60,7 @@ class MainActivity : AppCompatActivity() {
private fun extractVocabularyData() {
addProgressBar()
extractVocabularyData(
FirestoreManager().extractVocabularyData(
{ id-> addVocabularyFragment(id) },
{ showToastNoWords() },
{ removeProgressBar() })
......
......@@ -12,53 +12,66 @@ import com.paktalin.vocabularynotebook.firestoreitems.Vocabulary
import com.paktalin.vocabularynotebook.ui.activities.LogInActivity
import java.util.*
private const val USERS = "users"
private const val TAG = "VN/FirestoreManager"
class FirestoreManager {
fun extractVocabularyData(onSuccess: (vocabularyId: String) -> Unit,
showToastNoWords: () -> Unit, removeProgressBar: () -> Unit) {
val userId = FirebaseAuth.getInstance()!!.currentUser!!.uid
val db = ConfiguredFirestore.instance
private val db: FirebaseFirestore = ConfiguredFirestore.instance
val userDocument = db.collection(USERS).document(userId)
userDocument.get()
.addOnSuccessListener { task ->
removeProgressBar()
if (task.get(Vocabulary.VOCABULARIES) != null) {
val vocabularyId = retrieveVocabularyID(task, db)
onSuccess(vocabularyId)
} else {
Log.w(TAG, "There's no collection \"vocabularies\"")
showToastNoWords() } }
}
fun extractVocabularyData(onSuccess: (vocabularyId: String) -> Unit,
showToastNoWords: () -> Unit, removeProgressBar: () -> Unit) {
val userId = FirebaseAuth.getInstance()!!.currentUser!!.uid
userDocument(userId).get()
.addOnSuccessListener { task ->
removeProgressBar()
if (task.get(VOCABULARIES) != null) {
val vocabularyId = retrieveVocabularyID(task, db)
onSuccess(vocabularyId)
} else {
Log.w(TAG, "There's no collection \"vocabularies\"")
showToastNoWords() } }
}
private fun retrieveVocabularyID(task: DocumentSnapshot, db: FirebaseFirestore): String {
val vocabularies: List<DocumentReference> = task.get(Vocabulary.VOCABULARIES) as List<DocumentReference>
val vocabulary = db.collection(Vocabulary.VOCABULARIES).document(vocabularies[0].id)
return vocabulary.id
}
fun addNewUserToDb(firebaseUser: FirebaseUser, logInActivity: LogInActivity) {
//todo add condition to writing to the db in Firebase Console (request.auth.uid)
db.collection(VOCABULARIES).add(Vocabulary.Pojo(null))
.addOnSuccessListener { firstVocabularyRef ->
Log.d(TAG, "VocabularyPojo successfully created: " + firstVocabularyRef.path)
setNewUserWithVocabularyData(firebaseUser, firstVocabularyRef, logInActivity)
}
.addOnFailureListener {
Log.w(TAG, "Couldn't add user to the database", it.cause)
deleteUser(firebaseUser)
}
}
fun addNewUserToDb(newUser: FirebaseUser, logInActivity: LogInActivity) {
//todo add condition to writing to the db in Firebase Console (request.auth.uid)
val db = ConfiguredFirestore.instance
val user = UserPojo(newUser.email)
private fun userDocument(userId: String): DocumentReference {
return db.collection(USERS).document(userId)
}
db.collection(Vocabulary.VOCABULARIES).add(Vocabulary.Pojo(null))
.addOnSuccessListener { firstVocabularyRef ->
Log.d(TAG, "VocabularyPojo successfully created: " + firstVocabularyRef.path)
user.vocabularies = Collections.singletonList(firstVocabularyRef)
private fun setNewUserWithVocabularyData(firebaseUser: FirebaseUser,
firstVocabularyRef: DocumentReference,
logInActivity: LogInActivity) {
val user = UserPojo(firebaseUser.email)
user.vocabularies = Collections.singletonList(firstVocabularyRef)
userDocument(firebaseUser.uid).set(user)
.addOnSuccessListener {
Log.i(TAG, "Successfully added user to the collection")
logInActivity.startUserActivity()
}
.addOnFailureListener { exception ->
Log.w(TAG, "addUser:failure", exception)
}
}
db.collection("users").document(newUser.uid).set(user)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
Log.i(TAG, "Successfully added user to the collection")
logInActivity.startUserActivity()
} else Log.w(TAG, "addUser:failure", task.exception)
}
}
.addOnFailureListener {
Log.w(TAG, "Couldn't add user to the database", it.cause)
deleteUser(newUser)
}
}
private fun retrieveVocabularyID(task: DocumentSnapshot, db: FirebaseFirestore): String {
val vocabularies: List<DocumentReference> = task.get(VOCABULARIES) as List<DocumentReference>
val vocabulary = db.collection(VOCABULARIES).document(vocabularies[0].id)
return vocabulary.id
}
companion object {
private const val USERS = "users"
private const val WORDS = "words"
private const val VOCABULARIES = "vocabularies"
private const val TAG = "VN/FirestoreManager"
}
}
\ No newline at end of file
......@@ -33,7 +33,7 @@ fun signUp(activity: LogInActivity, email: String, password: String) {
.addOnCompleteListener { removeProgressBar(activity.supportFragmentManager) }
.addOnSuccessListener {
Log.d(TAG, "Successfully signed up a new user")
addNewUserToDb(mAuth!!.currentUser!!, activity)
FirestoreManager().addNewUserToDb(mAuth!!.currentUser!!, activity)
activity.login()
}
.addOnFailureListener {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment