In this repository I have used network bound resources with jetpack compose and Mvi architecture
Network bound resources
If the device is offline, any cached values should immediately be dispatched. Otherwise, any cached values should be dispatched as part of a temporary loading state. The algorithm then determines whether the cached values are sufficiently recent, or whether the data should be fetched from the network. If sufficiently recent, the cached values are dispatched. Otherwise, the algorithm determines whether a login is necessary (for example, if an authentication token is missing or expired), and if so, attempts to reauthenticate.
If the login fails because the credentials are invalid, the user is prompted to re-enter the credentials, and the algorithm stops. Once the user has entered the credentials, the algorithm should be automatically restarted, without the user having to refresh. The data is now fetched over the network.
If the call was unsuccessful, the reason is evaluated. If the call failed because it was unauthorized, it is necessary to reauthenticate and redo the call. Otherwise, the error should be dispatched. If the call was successful, the data is saved, automatically triggering a refresh.