Skip to content

Commit

Permalink
Added profile ranking endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
AdityaK2905 committed Jan 31, 2024
1 parent ed4109e commit fcd6eb0
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 2 deletions.
4 changes: 4 additions & 0 deletions app/src/main/java/org/hackillinois/android/API.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import org.hackillinois.android.model.TimesWrapper
import org.hackillinois.android.model.checkin.CheckIn
import org.hackillinois.android.model.event.EventsList
import org.hackillinois.android.model.leaderboard.LeaderboardList
import org.hackillinois.android.model.profile.Ranking
import org.hackillinois.android.model.version.Version
import org.hackillinois.android.notifications.DeviceToken
import retrofit2.Call
Expand Down Expand Up @@ -52,6 +53,9 @@ interface API {
@GET("profile/leaderboard/?limit=10")
suspend fun leaderboard(): LeaderboardList

@GET("profile/ranking")
suspend fun profileRanking(): Ranking

// REGISTRATION

@GET("registration/attendee/")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package org.hackillinois.android.model.profile

data class Ranking (val ranking : Int)
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ class ProfileRepository {
// refreshes list of profiles and reinserts into the Dao
val profile = App.getAPI().currentProfile()
val profileList = ProfileList(listOf(profile))
val ranking = App.getAPI().profileRanking()
Log.d("profile ranking:", "" + ranking.ranking)
Log.d("profile url: ", profile.avatarUrl)
Log.d("food wave:", "" + profile.foodWave)
profileDao.clearTableAndInsertProfiles(profileList.profiles)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.Context
import android.graphics.Bitmap
import android.graphics.Color
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand All @@ -20,6 +21,7 @@ import org.hackillinois.android.R
import org.hackillinois.android.common.JWTUtilities
import org.hackillinois.android.database.entity.Profile
import org.hackillinois.android.database.entity.QR
import org.hackillinois.android.model.profile.Ranking
import org.hackillinois.android.view.MainActivity
import org.hackillinois.android.viewmodel.ProfileViewModel
import java.util.*
Expand Down Expand Up @@ -49,6 +51,7 @@ class ProfileFragment : Fragment() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d("OnCreate", "OnCreate ran")
staff = isStaff()
pro = isPro()
if (!hasLoggedIn() or staff) {
Expand All @@ -59,6 +62,12 @@ class ProfileFragment : Fragment() {
viewModel.init()
viewModel.currentProfileLiveData.observe(this, Observer { updateProfileUI(it) })
viewModel.qr.observe(this, Observer { updateQrView(it) })
viewModel.ranking.observe(
this,
Observer {
updateRanking(it)
},
)
viewModel.attendee.observe(this) { }
// view model initialization
}
Expand Down Expand Up @@ -101,10 +110,16 @@ class ProfileFragment : Fragment() {
// if user isn't a staff and has logged in (i.e. attendee), show profile
if (hasLoggedIn() and !staff) {
viewModel = ViewModelProvider(this).get(ProfileViewModel::class.java)
viewModel.qr.observe(
// viewModel.qr.observe(
// viewLifecycleOwner,
// Observer {
// updateQrView(it)
// },
// )
viewModel.ranking.observe(
viewLifecycleOwner,
Observer {
updateQrView(it)
updateRanking(it)
},
)
viewModel.currentProfileLiveData.observe(this, Observer { updateProfileUI(it) })
Expand All @@ -121,6 +136,11 @@ class ProfileFragment : Fragment() {
// load avatar image png from API using Glide
Glide.with(requireContext()).load(it.avatarUrl).into(avatarImage)
}

private fun updateRanking(ranking : Ranking?) = ranking?.let { it ->
rankingPlacementText.text = "${ranking.ranking}"

}
private fun updateQrView(qr: QR?) = qr?.let { it ->
if (qrCodeImage.width > 0 && qrCodeImage.height > 0) {
// Retrieves qr code user info that will be encoded
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
package org.hackillinois.android.viewmodel

import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch
import org.hackillinois.android.App
import org.hackillinois.android.database.entity.Attendee
import org.hackillinois.android.database.entity.Profile
import org.hackillinois.android.database.entity.QR
import org.hackillinois.android.model.profile.Ranking
import org.hackillinois.android.repository.ProfileRepository
import org.hackillinois.android.repository.attendeeRepository
import org.hackillinois.android.repository.qrRepository
Expand All @@ -15,15 +21,18 @@ class ProfileViewModel : ViewModel() {

lateinit var currentProfileLiveData: LiveData<Profile>
lateinit var qr: LiveData<QR>
var ranking: MutableLiveData<Ranking> = MutableLiveData()
lateinit var attendee: LiveData<Attendee>
lateinit var timerObj: Timer

fun init() {
fetchRanking()
// Creates livedata for view to observe
currentProfileLiveData = profileRepository.fetchProfile()
// Initial qr code fetching
qr = qrRepository.fetch()
attendee = attendeeRepository.fetch()

// should refresh QR code every 15 seconds using Timer() class
timerObj = Timer()
val timerTaskObj: TimerTask = object : TimerTask() {
Expand All @@ -42,4 +51,15 @@ class ProfileViewModel : ViewModel() {
super.onCleared()
timerObj.cancel()
}

fun fetchRanking() {
viewModelScope.launch {
try {
val response = App.getAPI().profileRanking();
ranking.postValue(response)
} catch (e: Exception) {
Log.e("Couldn't fetch ranking", e.toString())
}
}
}
}

0 comments on commit fcd6eb0

Please sign in to comment.