Skip to content

Commit 77380dc

Browse files
Refactor: Move Realm queries from DashboardActivity to TeamRepository
Moved the direct Realm database queries in `handleTaskNavigation` and `handleJoinRequestNavigation` from `DashboardActivity` to new methods in `TeamRepository`. This change improves the architecture by centralizing data access in the repository layer and removing data-layer logic from the UI.
1 parent 83a17ba commit 77380dc

File tree

3 files changed

+39
-31
lines changed

3 files changed

+39
-31
lines changed

app/src/main/java/org/ole/planet/myplanet/repository/TeamRepository.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ interface TeamRepository {
2020
suspend fun getTeamByDocumentIdOrTeamId(id: String): RealmMyTeam?
2121
suspend fun getTeamLinks(): List<RealmMyTeam>
2222
suspend fun getTeamById(teamId: String): RealmMyTeam?
23+
suspend fun getTaskTeamInfo(taskId: String): Triple<String, String, String>?
24+
suspend fun getJoinRequestTeamId(requestId: String): String?
2325
suspend fun isMember(userId: String?, teamId: String): Boolean
2426
suspend fun isTeamLeader(teamId: String, userId: String?): Boolean
2527
suspend fun hasPendingRequest(teamId: String, userId: String?): Boolean

app/src/main/java/org/ole/planet/myplanet/repository/TeamRepositoryImpl.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,37 @@ class TeamRepositoryImpl @Inject constructor(
8282
return findByField(RealmMyTeam::class.java, "_id", teamId)
8383
}
8484

85+
override suspend fun getTaskTeamInfo(taskId: String): Triple<String, String, String>? = withContext(Dispatchers.IO) {
86+
databaseService.withRealm { realm ->
87+
val task = realm.where(RealmTeamTask::class.java)
88+
.equalTo("id", taskId)
89+
.findFirst()
90+
91+
task?.let {
92+
val linkJson = org.json.JSONObject(it.link ?: "{}")
93+
val teamId = linkJson.optString("teams")
94+
if (teamId.isNotEmpty()) {
95+
val teamObject = realm.where(RealmMyTeam::class.java).equalTo("_id", teamId).findFirst()
96+
teamObject?.let { team ->
97+
Triple(teamId, team.name ?: "", team.type ?: "")
98+
}
99+
} else {
100+
null
101+
}
102+
}
103+
}
104+
}
105+
106+
override suspend fun getJoinRequestTeamId(requestId: String): String? = withContext(Dispatchers.IO) {
107+
databaseService.withRealm { realm ->
108+
val joinRequest = realm.where(RealmMyTeam::class.java)
109+
.equalTo("_id", requestId)
110+
.equalTo("docType", "request")
111+
.findFirst()
112+
joinRequest?.teamId
113+
}
114+
}
115+
85116
override fun getTeamTransactions(
86117
teamId: String,
87118
startDate: Long?,

app/src/main/java/org/ole/planet/myplanet/ui/dashboard/DashboardActivity.kt

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ import org.ole.planet.myplanet.model.RealmStepExam
6666
import org.ole.planet.myplanet.model.RealmSubmission
6767
import org.ole.planet.myplanet.model.RealmTeamTask
6868
import org.ole.planet.myplanet.model.RealmUserModel
69+
import org.ole.planet.myplanet.repository.TeamRepository
6970
import org.ole.planet.myplanet.service.UserProfileDbHandler
7071
import org.ole.planet.myplanet.ui.SettingActivity
7172
import org.ole.planet.myplanet.ui.chat.ChatHistoryListFragment
@@ -109,6 +110,8 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N
109110
private val dashboardViewModel: DashboardViewModel by viewModels()
110111
@Inject
111112
lateinit var userProfileDbHandler: UserProfileDbHandler
113+
@Inject
114+
lateinit var teamRepository: TeamRepository
112115
private lateinit var challengeHelper: ChallengeHelper
113116
private lateinit var notificationManager: NotificationUtils.NotificationManager
114117
private var notificationsShownThisSession = false
@@ -422,22 +425,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N
422425
private suspend fun handleTaskNavigation(taskId: String?) {
423426
if (taskId == null) return
424427

425-
val teamData = withContext(Dispatchers.IO) {
426-
var result: Triple<String, String, String>? = null
427-
Realm.getDefaultInstance().use { realm ->
428-
val task = realm.where(RealmTeamTask::class.java)
429-
.equalTo("id", taskId)
430-
.findFirst()
431-
432-
val linkJson = JSONObject(task?.link ?: "{}")
433-
val teamId = linkJson.optString("teams")
434-
if (teamId.isNotEmpty()) {
435-
val teamObject = realm.where(RealmMyTeam::class.java)?.equalTo("_id", teamId)?.findFirst()
436-
result = Triple(teamId, teamObject?.name ?: "", teamObject?.type ?: "")
437-
}
438-
}
439-
result
440-
}
428+
val teamData = teamRepository.getTaskTeamInfo(taskId)
441429

442430
teamData?.let { (teamId, teamName, teamType) ->
443431
val f = TeamDetailFragment.newInstance(
@@ -450,7 +438,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N
450438
openCallFragment(f)
451439
}
452440
}
453-
441+
454442
private suspend fun handleJoinRequestNavigation(requestId: String?) {
455443
if (requestId != null) {
456444
val actualJoinRequestId = if (requestId.startsWith("join_request_")) {
@@ -459,20 +447,7 @@ class DashboardActivity : DashboardElementActivity(), OnHomeItemClickListener, N
459447
requestId
460448
}
461449

462-
val teamId = withContext(Dispatchers.IO) {
463-
val startTime = System.currentTimeMillis()
464-
var localTeamId: String? = null
465-
Realm.getDefaultInstance().use { realm ->
466-
val joinRequest = realm.where(RealmMyTeam::class.java)
467-
.equalTo("_id", actualJoinRequestId)
468-
.equalTo("docType", "request")
469-
.findFirst()
470-
localTeamId = joinRequest?.teamId
471-
}
472-
val endTime = System.currentTimeMillis()
473-
android.util.Log.d("DashboardActivity", "Join request query took ${endTime - startTime}ms")
474-
localTeamId
475-
}
450+
val teamId = teamRepository.getJoinRequestTeamId(actualJoinRequestId)
476451

477452
if (teamId?.isNotEmpty() == true) {
478453
val f = TeamDetailFragment()

0 commit comments

Comments
 (0)