package mx.trackermap.TrackerMap.controllers import mx.trackermap.TrackerMap.client.apis.AttributesApi import mx.trackermap.TrackerMap.client.models.Attribute import mx.trackermap.TrackerMap.client.models.Device class AttributesController( private val attributesApi: AttributesApi, private val sessionController: SessionController) { var userAttributes = emptyArray() val deviceAttributes = mutableMapOf>() /** userAttributes **/ suspend fun getUserAttributes() { userAttributes = attributesApi.attributesComputedGet(userId = sessionController.user?.id) } fun getUserAttribute(attribute: String) = userAttributes.find { it.attribute == attribute } suspend fun createUserAttribute(attribute: Attribute) { userAttributes += attributesApi.attributesComputedPost(attribute) } suspend fun updateUserAttribute(attribute: Attribute) { userAttributes = userAttributes.map { if (attribute.id != null && it.id == attribute.id) { attributesApi.attributesComputedIdPut(attribute, attribute.id) } else it }.toTypedArray() } suspend fun deleteUserAttribute(attribute: String) { userAttributes.find { it.attribute == attribute }?.id?.let { id -> attributesApi.attributesComputedIdDelete(id) userAttributes = userAttributes.filter { it.id != id }.toTypedArray() } } /** deviceAttributes **/ suspend fun getDeviceAttributes(device: Device) { device.id?.let { deviceAttributes[it] = attributesApi.attributesComputedGet(deviceId = device.id) } } fun getDeviceAttribute(device: Device, attribute: String) = deviceAttributes[device.id]?.find { it.attribute == attribute } }