Skip to content

Commit

Permalink
[EKA-042] implments consent artifact API
Browse files Browse the repository at this point in the history
  • Loading branch information
mahabaleshwarhnr committed May 13, 2020
1 parent b24dde2 commit ea37c1e
Show file tree
Hide file tree
Showing 22 changed files with 182 additions and 184 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,4 @@ fun <T> PayloadLiveData<T>.fetch(call: Call<T>): PayloadLiveData<T> {
loading(true)
}
return this
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ interface ConsentApis {
@GET("consent-requests")
fun getConsents(@Query("limit")limit: Int,
@Query("offset") offset: Int,
@Query("filters", encoded = true) filters: String?): Call<ConsentsListResponse>
@Query("status") status: String?): Call<ConsentsListResponse>

@GET("consent-artefacts")
fun getConsentsArtifactList(@Query("limit")limit: Int,
@Query("offset") offset: Int,
@Query("status", encoded = true) status: String): Call<ConsentArtifactResponse>
@Query("status") status: String): Call<ConsentArtifactResponse>

@GET("patients/links")
fun getLinkedAccounts(): Call<LinkedAccountsResponse>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@ package `in`.projecteka.jataayu.consent.repository
import `in`.projecteka.jataayu.consent.model.ConsentsListResponse
import `in`.projecteka.jataayu.consent.model.RevokeConsentRequest
import `in`.projecteka.jataayu.consent.remote.ConsentApis
import `in`.projecteka.jataayu.core.model.HipHiuIdentifiable
import `in`.projecteka.jataayu.core.model.HipHiuNameResponse
import `in`.projecteka.jataayu.core.model.LinkedAccountsResponse
import `in`.projecteka.jataayu.core.model.ProviderInfo
import `in`.projecteka.jataayu.core.model.*
import `in`.projecteka.jataayu.core.model.approveconsent.ConsentArtifactRequest
import `in`.projecteka.jataayu.core.model.approveconsent.ConsentArtifactResponse
import `in`.projecteka.jataayu.core.model.grantedconsent.GrantedConsentDetailsResponse
Expand All @@ -25,6 +22,9 @@ interface ConsentRepository {
fun getGrantedConsentDetails(requestId: String): Call<List<GrantedConsentDetailsResponse>>
fun denyConsent(requestId: String): Call<Void>
fun getProviderBy(providerIdList: List<HipHiuIdentifiable>): MediatorLiveData<HipHiuNameResponse>
fun getConsentsArtifactList(limit: Int,
offset: Int,
status: RequestStatus): Call<ConsentArtifactResponse>
}

class ConsentRepositoryImpl(private val consentApi: ConsentApis) : ConsentRepository {
Expand Down Expand Up @@ -57,6 +57,14 @@ class ConsentRepositoryImpl(private val consentApi: ConsentApis) : ConsentReposi
return getProviderData(idList)
}

override fun getConsentsArtifactList(
limit: Int,
offset: Int,
status: RequestStatus
): Call<ConsentArtifactResponse> {
return consentApi.getConsentsArtifactList(limit, offset, status.name)
}

private var providerLiveDataCount = 0

private fun getProviderData(idList: List<String>): MediatorLiveData<HipHiuNameResponse> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import `in`.projecteka.jataayu.consent.ui.fragment.GrantedConsentDetailsFragment
import `in`.projecteka.jataayu.consent.ui.fragment.RequestedConsentDetailsFragment
import `in`.projecteka.jataayu.consent.ui.fragment.RequestedListFragment
import `in`.projecteka.jataayu.consent.viewmodel.RequestedListViewModel
import `in`.projecteka.jataayu.core.model.RequestStatus
import `in`.projecteka.jataayu.network.model.ErrorResponse
import `in`.projecteka.jataayu.network.utils.PayloadResource
import `in`.projecteka.jataayu.network.utils.ResponseCallback
Expand Down Expand Up @@ -69,7 +68,7 @@ class ConsentDetailsActivity : BaseActivity<BaseActivityBinding>(), ResponseCall
}

})
viewModel.getConsents(RequestStatus.REQUESTED, offset = 0)
viewModel.getConsents(offset = 0)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import `in`.projecteka.jataayu.consent.callback.DeleteConsentCallback
import `in`.projecteka.jataayu.consent.databinding.ConsentRequestFragmentBinding
import `in`.projecteka.jataayu.consent.listners.PaginationScrollListener
import `in`.projecteka.jataayu.consent.model.ConsentFlow
import `in`.projecteka.jataayu.consent.model.ConsentsListResponse
import `in`.projecteka.jataayu.consent.ui.activity.ConsentDetailsActivity
import `in`.projecteka.jataayu.consent.ui.activity.PinVerificationActivity
import `in`.projecteka.jataayu.consent.ui.adapter.ConsentsListAdapter
Expand All @@ -13,7 +14,6 @@ import `in`.projecteka.jataayu.consent.viewmodel.GrantedConsentListViewModel
import `in`.projecteka.jataayu.core.ConsentScopeType
import `in`.projecteka.jataayu.core.model.Consent
import `in`.projecteka.jataayu.core.model.HipHiuIdentifiable
import `in`.projecteka.jataayu.core.model.RequestStatus
import `in`.projecteka.jataayu.core.model.grantedconsent.GrantedConsentDetailsResponse
import `in`.projecteka.jataayu.network.utils.*
import `in`.projecteka.jataayu.presentation.callback.IDataBindingModel
Expand All @@ -39,10 +39,6 @@ import kotlinx.android.synthetic.main.consent_request_fragment.*
import org.greenrobot.eventbus.EventBus
import org.koin.androidx.viewmodel.ext.android.sharedViewModel

private const val INDEX_ACTIVE = 0
private const val INDEX_EXPIRED = 1
private const val INDEX_ALL = 2

class ConsentListFragment : BaseFragment(), AdapterView.OnItemSelectedListener,
DeleteConsentCallback, ItemClickCallback {
private lateinit var consentToRevoke: Consent
Expand Down Expand Up @@ -71,26 +67,32 @@ class ConsentListFragment : BaseFragment(), AdapterView.OnItemSelectedListener,

private fun initObservers() {

viewModel.consentListResponse.observe(this, Observer { response ->
viewModel.consentArtifactResponse.observe(viewLifecycleOwner, Observer { response ->
when (response) {
is Loading -> viewModel.showProgress(response.isLoading, R.string.loading_requests)
is Success -> {
parentViewModel.showRefreshing(false)
viewModel.grantedConsentsList.value = response.data
val filteredRequests = viewModel.filterConsents(response.data?.requests)
resetScrollListener()
filteredRequests?.let {
val hiuList = it.map { consent -> consent.hiu }
getNamesOf(hiuList)
response.data?.let {
viewModel.consentListResponse.value = ConsentsListResponse(it.getArtifacts(), it.size, it.offset)
}
binding.hideRequestsList = viewModel.grantedConsentsList.value?.requests.isNullOrEmpty()
binding.hideFilter = true
}
is PartialFailure -> {
context?.showAlertDialog(getString(R.string.failure), response.error?.message,
getString(string.ok))
}
}

})

viewModel.consentListResponse.observe(this, Observer { response ->
parentViewModel.showRefreshing(false)
resetScrollListener()
response.requests.let {
val hiuList = it.map { consent -> consent.hiu }
getNamesOf(hiuList)
}
binding.hideRequestsList = response.requests.isNullOrEmpty()
binding.hideFilter = false
})

viewModel.grantedConsentDetailsResponse.observe(
Expand Down Expand Up @@ -128,14 +130,18 @@ class ConsentListFragment : BaseFragment(), AdapterView.OnItemSelectedListener,
}
is Failure -> {
context?.showAlertDialog(
getString(R.string.failure), it.error?.message,
getString(R.string.failure), it.error.message,
getString(string.ok)
)
}

}
})

viewModel.currentStatus.observe(this, Observer {
clearRecylerView()
})

parentViewModel.pullToRefreshEvent.observe(viewLifecycleOwner, Observer{
if (it) {
clearRecylerView()
Expand All @@ -147,7 +153,7 @@ class ConsentListFragment : BaseFragment(), AdapterView.OnItemSelectedListener,
val arrayAdapter = ArrayAdapter<String>(
context!!,
layout.simple_dropdown_item_1line, android.R.id.text1,
viewModel.populateFilterItems(resources, ConsentFlow.GRANTED_CONSENTS)
viewModel.populateFilterItems(resources)
)
binding.spRequestFilter.adapter = arrayAdapter
arrayAdapter.notifyDataSetChanged()
Expand All @@ -166,7 +172,7 @@ class ConsentListFragment : BaseFragment(), AdapterView.OnItemSelectedListener,

private fun initRecyclerViewAdapter() {
consentsListAdapter = ConsentsListAdapter(
this, listOf()
this, listOf(), this
)
binding.rvConsents.apply {
layoutManager = LinearLayoutManager(context)
Expand All @@ -183,7 +189,7 @@ class ConsentListFragment : BaseFragment(), AdapterView.OnItemSelectedListener,
}

private fun renderConsentRequests(requests: List<Consent>, selectedSpinnerPosition: Int) {
consentsListAdapter.updateData(requests)
consentsListAdapter.updateData(requests.reversed())
}


Expand All @@ -192,11 +198,7 @@ class ConsentListFragment : BaseFragment(), AdapterView.OnItemSelectedListener,
}

override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
when (position) {
INDEX_ACTIVE -> viewModel.currentStatus.value = RequestStatus.REQUESTED
INDEX_EXPIRED -> viewModel.currentStatus.value = RequestStatus.EXPIRED
INDEX_ALL -> viewModel.currentStatus.value = null
}
viewModel.updateFilterSelectedItem(position)
}


Expand All @@ -207,7 +209,7 @@ class ConsentListFragment : BaseFragment(), AdapterView.OnItemSelectedListener,
private fun getNamesOf(hiuList: List<HipHiuIdentifiable>) {
val hipHiuNameResponse = viewModel.fetchHipHiuNamesOf(hiuList)
hipHiuNameResponse.observe(this, Observer {
viewModel.consentList?.let { consentList ->
viewModel.consentListResponse.value?.requests?.let { consentList ->
if(it.status) {
consentList.forEach { consent -> consent.hiu.name = it.nameMap[consent.hiu.getId()] ?: "" }
renderConsentRequests(consentList, binding.spRequestFilter.selectedItemPosition)
Expand All @@ -231,7 +233,7 @@ class ConsentListFragment : BaseFragment(), AdapterView.OnItemSelectedListener,
val intent = Intent(context, ConsentDetailsActivity::class.java)
intent.putExtra(CONSENT_FLOW, ConsentFlow.GRANTED_CONSENTS.ordinal)
startActivity(intent)
EventBus.getDefault().postSticky(iDataBindingModel.id)
EventBus.getDefault().postSticky(iDataBindingModel)
}
}

Expand All @@ -247,7 +249,7 @@ class ConsentListFragment : BaseFragment(), AdapterView.OnItemSelectedListener,

private fun resetScrollListener() {
if (viewModel.scrollListener == null) {
viewModel.scrollListener = PaginationScrollListener(viewModel, viewModel.grantedConsentsList.value?.totalCount ?: 0)
viewModel.scrollListener = PaginationScrollListener(viewModel, viewModel.consentListResponse.value?.totalCount ?: 0)
setupScrollListener()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class GrantedConsentDetailsFragment : BaseFragment(), ItemClickCallback {
protected var hiTypeObjects = ArrayList<HiType>()

protected val eventBusInstance: EventBus = EventBus.getDefault()
private lateinit var consentId: String
// private lateinit var consentId: Consent
private lateinit var genericRecyclerViewAdapter: GenericRecyclerViewAdapter
private var linkedAccounts: List<Links>? = null
private lateinit var linkedAccountsAndCount: Pair<List<IDataBindingModel>, Int>
Expand Down Expand Up @@ -133,31 +133,20 @@ class GrantedConsentDetailsFragment : BaseFragment(), ItemClickCallback {
this.getHIPHiuNamesOf(ids) {
linkedAccountHipResponse = it
viewModel.grantedConsentDetailsResponse.value?.let { response ->
when(response) {
is Success -> response.data?.let { result -> onConsentDetailsResponseSuccess(result,it) }
else -> {}
}
onConsentDetailsResponseSuccess(listOf(response),it)
} ?: kotlin.run {
viewModel.getGrantedConsentDetails(consentId)
viewModel.getGrantedConsentDetails(consent)
}
}
}
}
}
})

viewModel.grantedConsentDetailsResponse.observe(
this,
Observer<PayloadResource<List<GrantedConsentDetailsResponse>>> { payload ->
when (payload) {
is Success -> {
payload.data?.let { onConsentDetailsResponseSuccess(it, null) }
}
is Loading -> {
viewModel.showProgress(payload.isLoading)
}
}
})
viewModel.grantedConsentDetailsResponse.observe(this, Observer {
onConsentDetailsResponseSuccess(listOf(it), null)
})

}

private fun populateLinkedAccounts(grantedConsents: List<GrantedConsentDetailsResponse>) {
Expand Down Expand Up @@ -207,15 +196,17 @@ class GrantedConsentDetailsFragment : BaseFragment(), ItemClickCallback {

private fun getHIPHiuNamesOf(list: List<HipHiuIdentifiable>, completion: (HipHiuNameResponse) -> Unit) {

viewModel.showProgress(true)
val hipHiuNameResponse = viewModel.fetchHipHiuNamesOf(list)
hipHiuNameResponse.observe(this, Observer {
viewModel.showProgress(false)
completion(it)
})
}


@Subscribe(sticky = true)
public fun onConsentIdReceived(consentId: String) {
this.consentId = consentId
public fun onConsentIdReceived(consent: Consent) {
this.consent = consent
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ class RequestedConsentDetailsFragment : BaseFragment(), ItemClickCallback,
override fun onDenyConsent(view: View) {
MaterialAlertDialogBuilder(context)
.setTitle(R.string.title_deny_consent)
.setPositiveButton(R.string.deny) { _, _ -> viewModel.denyConsent(consent.id) }
.setPositiveButton(R.string.deny) { _, _ -> viewModel.denyConsent(consent.id!!) }
.setNegativeButton(android.R.string.cancel, null)
.setMessage(R.string.msg_deny_consent)
.show()
Expand Down Expand Up @@ -225,7 +225,7 @@ class RequestedConsentDetailsFragment : BaseFragment(), ItemClickCallback,
eventBusInstance.register(this)
viewModel.showProgress(true)
viewModel.grantConsent(
consent.id,
consent.id!!,
viewModel.getConsentArtifact(it, hiTypeObjects, consent.permission))
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ private const val INDEX_ALL = 3

class RequestedListFragment : BaseFragment(), AdapterView.OnItemSelectedListener, ItemClickCallback {

protected lateinit var binding: ConsentRequestFragmentBinding
private lateinit var binding: ConsentRequestFragmentBinding
private lateinit var consentsListAdapter: ConsentsListAdapter

private val viewModel: RequestedListViewModel by sharedViewModel()
Expand All @@ -68,7 +68,7 @@ class RequestedListFragment : BaseFragment(), AdapterView.OnItemSelectedListener
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initObservers()
viewModel.getConsents(RequestStatus.REQUESTED, offset = 0)
viewModel.getConsents(limit = 4, offset = 0)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
Expand Down Expand Up @@ -112,8 +112,9 @@ class RequestedListFragment : BaseFragment(), AdapterView.OnItemSelectedListener
getNamesOf(hiuList)
}
parentViewModel.showRefreshing(false)
binding.hideRequestsList = response.data?.requests?.isNullOrEmpty()
binding.hideFilter = binding.hideRequestsList

binding.hideRequestsList = false
binding.hideFilter = false
}
is PartialFailure -> {
context?.showAlertDialog(getString(R.string.failure), response.error?.message,
Expand Down Expand Up @@ -182,7 +183,7 @@ class RequestedListFragment : BaseFragment(), AdapterView.OnItemSelectedListener
INDEX_ACTIVE -> viewModel.currentStatus.value = RequestStatus.REQUESTED
INDEX_EXPIRED -> viewModel.currentStatus.value = RequestStatus.EXPIRED
INDEX_DENIED -> viewModel.currentStatus.value = RequestStatus.DENIED
INDEX_ALL -> viewModel.currentStatus.value = null
INDEX_ALL -> viewModel.currentStatus.value = RequestStatus.ALL
}
}

Expand Down Expand Up @@ -224,7 +225,7 @@ class RequestedListFragment : BaseFragment(), AdapterView.OnItemSelectedListener

private fun resetScrollListener() {
if (viewModel.scrollListener == null) {
viewModel.scrollListener = PaginationScrollListener(viewModel, 9)
viewModel.scrollListener = PaginationScrollListener(viewModel, viewModel.requestedConsentsList.value?.totalCount ?: 0)
setupScrollListener()
}
}
Expand All @@ -233,7 +234,7 @@ class RequestedListFragment : BaseFragment(), AdapterView.OnItemSelectedListener
consentsListAdapter.clearAll()
viewModel.scrollListener = null
resetScrollListener()
viewModel.getConsents(viewModel.currentStatus.value, offset = 0)
viewModel.getConsents(offset = 0)
}

private fun setupScrollListener() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,20 @@ import `in`.projecteka.jataayu.presentation.BaseViewModel
import `in`.projecteka.jataayu.presentation.callback.IDataBindingModel
import `in`.projecteka.jataayu.util.extension.EMPTY
import androidx.lifecycle.MediatorLiveData
import androidx.lifecycle.MutableLiveData

class GrantedConsentDetailsViewModel(private val repository: ConsentRepository) : BaseViewModel() {

val linkedAccountsResponse = PayloadLiveData<LinkedAccountsResponse>()
val grantedConsentDetailsResponse = PayloadLiveData<List<GrantedConsentDetailsResponse>>()
val grantedConsentDetailsResponse = MutableLiveData<GrantedConsentDetailsResponse>()
internal var selectedProviderName = String.EMPTY

fun getLinkedAccounts() =
linkedAccountsResponse.fetch(repository.getLinkedAccounts())

fun getGrantedConsentDetails(requestId: String) {
grantedConsentDetailsResponse.fetch(repository.getGrantedConsentDetails(requestId))
fun getGrantedConsentDetails(consent: Consent) {
val grantedConsentDetailsResponse = GrantedConsentDetailsResponse(consent.status, consent, "")
this.grantedConsentDetailsResponse.value = grantedConsentDetailsResponse
}


Expand Down
Loading

0 comments on commit ea37c1e

Please sign in to comment.