Skip to content

Commit

Permalink
Merge pull request #38 from janewaitara/feat_code_cleanup
Browse files Browse the repository at this point in the history
Feat code cleanup
  • Loading branch information
janewaitara authored Apr 2, 2024
2 parents 63040c0 + c4a4277 commit 0c62ead
Show file tree
Hide file tree
Showing 69 changed files with 816 additions and 556 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package com.mumbicodes.projectie.data.repository

import com.mumbicodes.projectie.data.db.MilestonesDao
import com.mumbicodes.projectie.data.helpers.safeTransaction
import com.mumbicodes.projectie.data.helpers.toDataResult
import com.mumbicodes.projectie.domain.model.DataResult
import com.mumbicodes.projectie.domain.model.Milestone
import com.mumbicodes.projectie.domain.relations.MilestoneWithTasks
import com.mumbicodes.projectie.domain.repository.MilestonesRepository
import com.mumbicodes.projectie.domain.util.AllMilestonesOrder
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

class MilestonesRepositoryImpl(
private val milestonesDao: MilestonesDao,
Expand All @@ -14,17 +19,30 @@ class MilestonesRepositoryImpl(
milestonesDao.insertMilestone(milestone)
}

override fun getMilestoneByIdWithTasks(milestoneId: Int): Flow<MilestoneWithTasks?> =
override suspend fun getMilestoneByIdWithTasks(milestoneId: Int): DataResult<Flow<MilestoneWithTasks?>> = safeTransaction {
milestonesDao.getMilestoneByIdWithTasks(milestoneId)
}.toDataResult()

override suspend fun getAllMilestonesBasedOnProjIdAndStatus(
projectId: Int,
status: String?,
): List<Milestone> =
): DataResult<List<Milestone>> = safeTransaction {
milestonesDao.getAllMilestonesBasedOnProjIdAndStatus(projectId)

override fun getAllMilestones(): Flow<List<MilestoneWithTasks>> =
milestonesDao.getAllMilestones()
}.toDataResult()

override suspend fun getAllMilestones(milestonesOrder: AllMilestonesOrder): DataResult<Flow<List<MilestoneWithTasks>>> =
safeTransaction {
milestonesDao.getAllMilestones().map { milestonesWithTasks ->
when (milestonesOrder) {
is AllMilestonesOrder.MostUrgent -> milestonesWithTasks.sortedBy {
it.milestone.milestoneEndDate
}
is AllMilestonesOrder.LeastUrgent -> milestonesWithTasks.sortedByDescending {
it.milestone.milestoneEndDate
}
}
}
}.toDataResult()

override suspend fun deleteMilestone(milestone: Milestone) {
milestonesDao.deleteMilestone(milestone)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,23 @@
package com.mumbicodes.projectie.domain.repository

import com.mumbicodes.projectie.domain.model.DataResult
import com.mumbicodes.projectie.domain.model.Milestone
import com.mumbicodes.projectie.domain.relations.MilestoneWithTasks
import com.mumbicodes.projectie.domain.util.AllMilestonesOrder
import kotlinx.coroutines.flow.Flow

interface MilestonesRepository {

suspend fun insertMilestone(milestone: Milestone)

fun getMilestoneByIdWithTasks(milestoneId: Int): Flow<MilestoneWithTasks?>
suspend fun getMilestoneByIdWithTasks(milestoneId: Int): DataResult <Flow<MilestoneWithTasks?>>

suspend fun getAllMilestonesBasedOnProjIdAndStatus(
projectId: Int,
status: String?,
): List<Milestone>
): DataResult<List<Milestone>>

fun getAllMilestones(): Flow<List<MilestoneWithTasks>>
suspend fun getAllMilestones(milestonesOrder: AllMilestonesOrder): DataResult<Flow<List<MilestoneWithTasks>>>

suspend fun deleteMilestone(milestone: Milestone)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,16 @@
package com.mumbicodes.projectie.domain.use_case.milestones

import com.mumbicodes.projectie.domain.model.DataResult
import com.mumbicodes.projectie.domain.relations.MilestoneWithTasks
import com.mumbicodes.projectie.domain.repository.MilestonesRepository
import com.mumbicodes.projectie.domain.util.AllMilestonesOrder
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

class GetAllMilestonesUseCase(private val repository: MilestonesRepository) {

operator fun invoke(
suspend operator fun invoke(
milestonesOrder: AllMilestonesOrder = AllMilestonesOrder.MostUrgent,
): Flow<List<MilestoneWithTasks>> {
return repository.getAllMilestones().map { milestonesWithTasks ->
when (milestonesOrder) {
is AllMilestonesOrder.MostUrgent -> milestonesWithTasks.sortedBy {
it.milestone.milestoneEndDate
}
is AllMilestonesOrder.LeastUrgent -> milestonesWithTasks.sortedByDescending {
it.milestone.milestoneEndDate
}
}
}
): DataResult<Flow<List<MilestoneWithTasks>>> {
return repository.getAllMilestones(milestonesOrder)
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.mumbicodes.projectie.domain.use_case.milestones

import com.mumbicodes.projectie.domain.model.DataResult
import com.mumbicodes.projectie.domain.relations.MilestoneWithTasks
import com.mumbicodes.projectie.domain.repository.MilestonesRepository
import kotlinx.coroutines.flow.Flow

class GetMilestoneByIdWithTasksUseCase(
private val repository: MilestonesRepository
) {
operator fun invoke(milestoneId: Int): Flow<MilestoneWithTasks?> =
suspend operator fun invoke(milestoneId: Int): DataResult<Flow<MilestoneWithTasks?>> =
repository.getMilestoneByIdWithTasks(milestoneId)
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.mumbicodes.projectie.domain.use_case.milestones

import com.mumbicodes.projectie.domain.model.DataResult
import com.mumbicodes.projectie.domain.model.Milestone
import com.mumbicodes.projectie.domain.repository.MilestonesRepository

Expand All @@ -9,6 +10,6 @@ class GetMilestonesUseCase(
suspend operator fun invoke(
projectId: Int,
status: String,
): List<Milestone> =
): DataResult<List<Milestone>> =
repository.getAllMilestonesBasedOnProjIdAndStatus(projectId, status)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,53 @@ package com.mumbicodes.projectie.domain.use_case.projects

import android.app.Application
import com.mumbicodes.projectie.R
import com.mumbicodes.projectie.domain.model.DataResult
import com.mumbicodes.projectie.domain.repository.MilestonesRepository
import com.mumbicodes.projectie.domain.util.ProgressStatus

class CheckProjectStatusUseCase(
val repository: MilestonesRepository,
private val appContext: Application,
) {
suspend operator fun invoke(projectId: Int): String {
suspend operator fun invoke(projectId: Int): DataResult<String> {

val milestonesInProject =
repository.getAllMilestonesBasedOnProjIdAndStatus(projectId = projectId, status = null)

val milestonesStatusList = milestonesInProject.map {
it.status
}

val completed = milestonesStatusList.contains(appContext.getString(R.string.completed)) &&
!milestonesStatusList.contains(appContext.getString(R.string.notStarted)) &&
!milestonesStatusList.contains(appContext.getString(R.string.inProgress))

val notStarted = milestonesStatusList.contains(appContext.getString(R.string.notStarted)) &&
!milestonesStatusList.contains(appContext.getString(R.string.completed)) &&
!milestonesStatusList.contains(appContext.getString(R.string.inProgress))

val progress = when {
completed -> ProgressStatus.Completed(appContext.getString(R.string.completed))
notStarted -> ProgressStatus.NotStarted(appContext.getString(R.string.notStarted))
else -> ProgressStatus.InProgress(appContext.getString(R.string.inProgress))
}

return when (progress) {
is ProgressStatus.Completed -> progress.status
is ProgressStatus.InProgress -> progress.status
is ProgressStatus.NotStarted -> progress.status
return when (milestonesInProject) {
is DataResult.Error -> {
DataResult.Error(errorMessage = milestonesInProject.errorMessage)
}

is DataResult.Success -> {
val milestonesStatusList = milestonesInProject.data.map {
it.status
}

val completed =
milestonesStatusList.contains(appContext.getString(R.string.completed)) &&
!milestonesStatusList.contains(appContext.getString(R.string.notStarted)) &&
!milestonesStatusList.contains(appContext.getString(R.string.inProgress))

val notStarted =
milestonesStatusList.contains(appContext.getString(R.string.notStarted)) &&
!milestonesStatusList.contains(appContext.getString(R.string.completed)) &&
!milestonesStatusList.contains(appContext.getString(R.string.inProgress))

val progress = when {
completed -> ProgressStatus.Completed(appContext.getString(R.string.completed))
notStarted -> ProgressStatus.NotStarted(appContext.getString(R.string.notStarted))
else -> ProgressStatus.InProgress(appContext.getString(R.string.inProgress))
}

DataResult.Success(
when (progress) {
is ProgressStatus.Completed -> progress.status
is ProgressStatus.InProgress -> progress.status
is ProgressStatus.NotStarted -> progress.status
}
)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.mumbicodes.projectie.domain.use_case.tasks

import com.mumbicodes.projectie.domain.model.Task
import com.mumbicodes.projectie.presentation.add_edit_milestone.TaskState
import com.mumbicodes.projectie.presentation.add_edit_milestone.TaskTextFieldState
import com.mumbicodes.projectie.presentation.screens.add_edit_milestone.TaskState
import com.mumbicodes.projectie.presentation.screens.add_edit_milestone.TaskTextFieldState

class TransformTasksUseCase {
fun transformTasksToTaskStates(tasks: List<Task>): List<TaskState> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ import androidx.hilt.work.HiltWorker
import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters
import com.mumbicodes.projectie.R
import com.mumbicodes.projectie.domain.model.DataResult
import com.mumbicodes.projectie.domain.relations.MilestoneWithTasks
import com.mumbicodes.projectie.domain.repository.MilestonesRepository
import com.mumbicodes.projectie.domain.repository.WorkersRepository
import com.mumbicodes.projectie.domain.util.AllMilestonesOrder
import com.mumbicodes.projectie.presentation.util.toLong
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
Expand All @@ -33,28 +35,33 @@ class CheckMilestoneDeadlineWorker @AssistedInject constructor(
return withContext(Dispatchers.IO) {
return@withContext try {
Log.e("Reached 2", "It has been reached ")
val allMilestones = milestonesRepository.getAllMilestones()
val allMilestones = milestonesRepository.getAllMilestones(AllMilestonesOrder.MostUrgent)

CoroutineScope(Dispatchers.IO).launch {
allMilestones.collectLatest { milestonesWithTasks ->
val filteredMilestones =
async { checkMilestoneDeadlineIsToday(milestonesWithTasks) }
when (allMilestones) {
is DataResult.Error -> Result.failure()
is DataResult.Success -> {
allMilestones.data.collectLatest { milestonesWithTasks ->
val filteredMilestones =
async { checkMilestoneDeadlineIsToday(milestonesWithTasks) }

filteredMilestones.await().let { milestones ->
if (milestones.size > 1) {
makeNotification(
notificationType = NotificationType.MILESTONES,
notificationId = milestones.first().milestone.milestoneId,
message = "You have ${milestones.size} milestones ending Today",
context = applicationContext,
)
} else if (milestones.size == 1) {
makeNotification(
NotificationType.MILESTONES,
milestones.first().milestone.milestoneId,
"${milestones.first().milestone.milestoneTitle} deadline is today and it's ${milestones.first().milestone.status}",
applicationContext,
)
filteredMilestones.await().let { milestones ->
if (milestones.size > 1) {
makeNotification(
notificationType = NotificationType.MILESTONES,
notificationId = milestones.first().milestone.milestoneId,
message = "You have ${milestones.size} milestones ending Today",
context = applicationContext,
)
} else if (milestones.size == 1) {
makeNotification(
NotificationType.MILESTONES,
milestones.first().milestone.milestoneId,
"${milestones.first().milestone.milestoneTitle} deadline is today and it's ${milestones.first().milestone.status}",
applicationContext,
)
}
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.navigation.NavHostController
import com.mumbicodes.projectie.presentation.allProjects.AllProjectsScreenRoute
import com.mumbicodes.projectie.presentation.projectDetails.ProjectDetailsScreen
import com.mumbicodes.projectie.presentation.theme.Space20dp
import com.mumbicodes.projectie.presentation.designsystem.theme.Space20dp
import com.mumbicodes.projectie.presentation.screens.allProjects.AllProjectsScreenRoute
import com.mumbicodes.projectie.presentation.screens.projectDetails.ProjectDetailsScreen
import com.mumbicodes.projectie.presentation.util.ContentType
import com.mumbicodes.projectie.presentation.util.navigation.Screens

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@ import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import androidx.window.layout.FoldingFeature
import androidx.window.layout.WindowInfoTracker
import com.mumbicodes.projectie.presentation.splash.SplashScreenViewModel
import com.mumbicodes.projectie.presentation.theme.*
import com.mumbicodes.projectie.presentation.theme.ProjectTrackingTheme
import com.mumbicodes.projectie.presentation.designsystem.theme.ProjectTrackingTheme
import com.mumbicodes.projectie.presentation.screens.splash.SplashScreenViewModel
import com.mumbicodes.projectie.presentation.util.DevicePosture
import com.mumbicodes.projectie.presentation.util.isBookPosture
import com.mumbicodes.projectie.presentation.util.isSeparating
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mumbicodes.projectie.presentation.components
package com.mumbicodes.projectie.presentation.designsystem.components

import android.content.res.Configuration
import androidx.compose.animation.AnimatedVisibility
Expand All @@ -21,8 +21,8 @@ import androidx.navigation.NavDestination
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.mumbicodes.projectie.presentation.theme.ProjectTrackingTheme
import com.mumbicodes.projectie.presentation.theme.Space20dp
import com.mumbicodes.projectie.presentation.designsystem.theme.ProjectTrackingTheme
import com.mumbicodes.projectie.presentation.designsystem.theme.Space20dp
import com.mumbicodes.projectie.presentation.util.navigation.Screens
import com.mumbicodes.projectie.presentation.util.navigation.bottomNavigationDestinations

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mumbicodes.projectie.presentation.components
package com.mumbicodes.projectie.presentation.designsystem.components

import androidx.compose.foundation.background
import androidx.compose.material3.*
Expand All @@ -10,7 +10,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.mumbicodes.projectie.presentation.theme.ProjectTrackingTheme
import com.mumbicodes.projectie.presentation.designsystem.theme.ProjectTrackingTheme
import com.mumbicodes.projectie.presentation.util.navigation.Screens
import com.mumbicodes.projectie.presentation.util.navigation.bottomNavigationDestinations

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mumbicodes.projectie.presentation.components
package com.mumbicodes.projectie.presentation.designsystem.components

import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.fillMaxWidth
Expand All @@ -11,7 +11,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.mumbicodes.projectie.presentation.theme.ProjectTrackingTheme
import com.mumbicodes.projectie.presentation.designsystem.theme.ProjectTrackingTheme
import java.util.*

@Composable
Expand Down
Loading

0 comments on commit 0c62ead

Please sign in to comment.