Zentralisiere Parse-Abfragen im ParseController
parent
c98d5d0b96
commit
8e6293b53e
@ -0,0 +1,157 @@
|
||||
package com.cyb3rko.techniklogger.data
|
||||
|
||||
import com.cyb3rko.techniklogger.*
|
||||
import com.cyb3rko.techniklogger.COLUMN_EINSATZ_DATUM
|
||||
import com.cyb3rko.techniklogger.COLUMN_EINSATZ_DAUER
|
||||
import com.cyb3rko.techniklogger.COLUMN_EINSATZ_JAHR
|
||||
import com.cyb3rko.techniklogger.COLUMN_EINSATZ_NAME
|
||||
import com.cyb3rko.techniklogger.COLUMN_EINSATZ_ORT
|
||||
import com.parse.ParseException
|
||||
import com.parse.ParseObject
|
||||
import com.parse.ParseQuery
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
object ParseController {
|
||||
|
||||
private fun <T : ParseObject>getQuery(
|
||||
className: String,
|
||||
allowCache: Boolean = true
|
||||
): ParseQuery<T> {
|
||||
return ParseQuery<T>(className).apply {
|
||||
limit = -1
|
||||
cachePolicy = if (allowCache) {
|
||||
ParseQuery.CachePolicy.CACHE_THEN_NETWORK
|
||||
} else ParseQuery.CachePolicy.NETWORK_ONLY
|
||||
}
|
||||
}
|
||||
|
||||
internal fun fetchAdminStatus(
|
||||
userName: String?,
|
||||
action: (objectId: String?, admin: Boolean?, e: ParseException?) -> Unit
|
||||
) {
|
||||
val query = getQuery<ParseObject>("Techniker", false)
|
||||
query.whereEqualTo("name", userName)
|
||||
query.getFirstInBackground { techniker, e ->
|
||||
if (e == null) {
|
||||
action(techniker.objectId, techniker.getBoolean("admin"), e)
|
||||
} else {
|
||||
action(null, null, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun fetchYears(action: (entries: List<ParseObject>, e: ParseException?) -> Unit) {
|
||||
val query = getQuery<ParseObject>("Jahr")
|
||||
query.orderByDescending(COLUMN_JAHR_NAME)
|
||||
query.findInBackground { entries, e ->
|
||||
if (e == null) {
|
||||
action(entries, null)
|
||||
} else action(listOf(), e)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun fetchProjects(
|
||||
year: String?,
|
||||
action: (projects: List<ProjectEntry>, e: ParseException?) -> Unit
|
||||
) {
|
||||
val query = getQuery<ParseObject>("Einsatz")
|
||||
query.orderByDescending(COLUMN_EINSATZ_DATUM)
|
||||
query.whereEqualTo(
|
||||
COLUMN_EINSATZ_JAHR,
|
||||
ParseObject.createWithoutData(
|
||||
"Jahr",
|
||||
year
|
||||
)
|
||||
)
|
||||
query.findInBackground { objects, e ->
|
||||
if (e == null) {
|
||||
val data = mutableListOf<ProjectEntry>()
|
||||
objects.forEach {
|
||||
val dates = it.getString(COLUMN_EINSATZ_DATUM)!!.split(",")
|
||||
val time = if (dates.size > 1) dates[1] else ""
|
||||
data.add(
|
||||
ProjectEntry(
|
||||
SimpleDateFormat("yyyy.MM.dd", Locale.GERMANY).parse(dates[0])!!,
|
||||
it.getInt(COLUMN_EINSATZ_DAUER).toString(),
|
||||
it.getString(COLUMN_EINSATZ_ORT)!!,
|
||||
it.getString(COLUMN_EINSATZ_NAME)!!,
|
||||
it.objectId,
|
||||
time
|
||||
)
|
||||
)
|
||||
}
|
||||
action(data, null)
|
||||
} else {
|
||||
action(listOf(), e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun fetchProject(
|
||||
objectId: String?,
|
||||
action: (project: ParseObject?, e: ParseException?) -> Unit
|
||||
) {
|
||||
val query = getQuery<ParseObject>(CLASS_EINSATZ)
|
||||
query.getInBackground(objectId) { entry, e ->
|
||||
if (e == null) {
|
||||
action(entry, null)
|
||||
} else {
|
||||
action(null, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun fetchSingleTeilnahme(
|
||||
projectId: String,
|
||||
technikerId: String,
|
||||
action: (entry: ParseObject?, e: ParseException?) -> Unit
|
||||
) {
|
||||
val query = getQuery<ParseObject>(CLASS_TEILNAHME, false)
|
||||
query.whereEqualTo(COLUMN_TEILNAHME_AN, ParseObject.createWithoutData(CLASS_EINSATZ, projectId))
|
||||
query.whereEqualTo(COLUMN_TEILNAHME_VON, ParseObject.createWithoutData(CLASS_EINSATZ, technikerId))
|
||||
query.getFirstInBackground { entry, e ->
|
||||
if (e == null) {
|
||||
action(entry, null)
|
||||
} else action(null, e)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun fetchTeilnahmen(
|
||||
projectId: String,
|
||||
includeTechniker: Boolean,
|
||||
action: (entries: List<ParseObject>, e: ParseException?) -> Unit
|
||||
) {
|
||||
val query = getQuery<ParseObject>(CLASS_TEILNAHME, false)
|
||||
query.whereEqualTo("an", ParseObject.createWithoutData(CLASS_EINSATZ, projectId))
|
||||
if (includeTechniker) query.include("von")
|
||||
query.findInBackground { entries, e ->
|
||||
if (e == null) {
|
||||
action(entries, null)
|
||||
} else action(listOf(), e)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun fetchTechniker(
|
||||
action: (
|
||||
techniker: List<ParseObject>,
|
||||
technikerNames: List<String>,
|
||||
e: ParseException?
|
||||
) -> Unit
|
||||
) {
|
||||
val query = getQuery<ParseObject>(CLASS_TECHNIKER, false)
|
||||
query.whereEqualTo(COLUMN_TECHNIKER_ENTLASSEN, false)
|
||||
query.orderByAscending(COLUMN_TECHNIKER_NAME)
|
||||
query.findInBackground { objects, e ->
|
||||
if (e == null) {
|
||||
val techniker = mutableListOf<String>()
|
||||
objects.forEach {
|
||||
techniker.add(it.getString(COLUMN_TECHNIKER_NAME)!!)
|
||||
}
|
||||
action(objects, techniker, null)
|
||||
} else {
|
||||
action(listOf(), listOf(), e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.cyb3rko.techniklogger.recycler
|
||||
package com.cyb3rko.techniklogger.data
|
||||
|
||||
import java.util.*
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.cyb3rko.techniklogger.recycler
|
||||
package com.cyb3rko.techniklogger.data
|
||||
|
||||
data class ProjectTechniker(
|
||||
var dauer: String,
|
||||
@ -0,0 +1,6 @@
|
||||
package com.cyb3rko.techniklogger.data
|
||||
|
||||
data class Year(
|
||||
val name: String,
|
||||
val objectId: String
|
||||
)
|
||||
Loading…
Reference in New Issue