I am building an Android application in which I would like to fetch the list of active devices under the project manager.
Trying to put it in different way for better understanding
- Project Manager table has list of employees
- Employee table has list of devices
Now, we need the list of Project Managers with list of employees with device status either with 1 or 0 based on UI selection.
Entities
@Entity(tableName = TABLE_PROJECT_MANAGER)
data class ProjectManager(
@PrimaryKey
val id: String,
val firstName: String?,
val middleName: String?,
val lastName: String?,
@TypeConverters(EmployeesConverter::class)
var employees: List<Employee>
)
@Parcelize
data class Employee(
val id: String,
val name: String?,
@TypeConverters(DeviceListTypeConverter::class)
val devices : List<Device>? = null
)
@Parcelize
data class Device(
@ColumnInfo(name = "device_id")
@SerializedName("id")
val id: String,
val manufacturer: String?,
val model: String?,
val status: Int,
) : Parcelable
Type Converters:
EmployeesConverter
class EmployeesConverter {
private val moshi = Moshi.Builder().build()
private val membersType = Types.newParameterizedType(List::class.java, Employee::class.java)
private val membersAdapter = moshi.adapter<List<Employee>>(membersType)
@TypeConverter
fun stringToMembers(member: String?): List<Employee>? {
return member?.let {
membersAdapter.fromJson(member)
}
}
@TypeConverter
fun membersToString(members: List<Employee>?): String? {
return members?.let {
membersAdapter.toJson(members)
}
}
}
DeviceListTypeConverter
class DeviceListTypeConverter {
private val moshi = Moshi.Builder().build()
private val membersType = Types.newParameterizedType(List::class.java, Device::class.java)
private val membersAdapter = moshi.adapter<List<Device>>(membersType)
@TypeConverter
fun stringToMembers(member: String?): List<Device>? {
return member?.let {
membersAdapter.fromJson(member)
}
}
@TypeConverter
fun membersToString(members: List<Device>?): String? {
return members?.let {
membersAdapter.toJson(members)
}
}
}
I am little confused on how to achieve this. Please help me out on this.