Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/team task #90

Open
wants to merge 8 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ plugins {
id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt'
id 'com.google.dagger.hilt.android'
id 'com.google.gms.google-services'
}

android {
Expand Down Expand Up @@ -63,6 +64,8 @@ dependencies {
implementation (ProjectDependencies.logging)

implementation (ProjectDependencies.hilt)
implementation (ProjectDependencies.firebase_firestore)

kapt (ProjectDependencies.hiltCompiler)

implementation(ProjectDependencies.encryptedSharedPreference)
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/java/com/chocolate/teamix/di/DataSourceModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ import com.chocolate.remote.data_source.ChannelRetrofitDataSource
import com.chocolate.remote.data_source.MessagesRetrofitDataSource
import com.chocolate.remote.data_source.OrganizationRetrofitDataSource
import com.chocolate.remote.data_source.UserRetrofitDataSource
import com.chocolate.remote.firebase.TaskFirebase
import com.chocolate.repository.datastore.local.LocalDataSource
import com.chocolate.repository.datastore.local.PreferencesDataSource
import com.chocolate.repository.datastore.remote.ChannelRemoteDataSource
import com.chocolate.repository.datastore.remote.MessagesRemoteDataSource
import com.chocolate.repository.datastore.remote.OrganizationRemoteDataSource
import com.chocolate.repository.datastore.remote.UserRemoteDataSource
import com.chocolate.repository.datastore.remote.TaskRemoteDataSource
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
Expand Down Expand Up @@ -52,4 +54,8 @@ abstract class DataSourceModule {
@Singleton
@Binds
abstract fun bindUserDataSource(userDataSource: UserRetrofitDataSource): UserRemoteDataSource

@Singleton
@Binds
abstract fun bindUserDatabase(taskFirebase: TaskFirebase): TaskRemoteDataSource
}
22 changes: 22 additions & 0 deletions app/src/main/java/com/chocolate/teamix/di/FirebaseModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.chocolate.teamix.di

import com.google.firebase.firestore.FirebaseFirestore
import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
object FirebaseModule {

@Provides
@Singleton
fun providesFirebaseFireStore(): FirebaseFirestore {
return Firebase.firestore
}

}
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
buildscript {
dependencies {
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.46.1'
classpath 'com.google.gms:google-services:4.3.15'
}
}
plugins {
Expand Down
10 changes: 4 additions & 6 deletions data/remote/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ plugins {
id 'com.android.library'
id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt'
//todo remove this comments when adding google service json
//id 'com.google.gms.google-services'
id 'com.google.gms.google-services'
}

android {
Expand Down Expand Up @@ -49,8 +48,7 @@ dependencies {
implementation(ProjectDependencies.hilt)
kapt(ProjectDependencies.hiltCompiler)

//todo remove this comments when adding google service json
// implementation(platform(ProjectDependencies.firebase))
// implementation(ProjectDependencies.firebase_auth)
// implementation(ProjectDependencies.firebase_firestore)
implementation(platform(ProjectDependencies.firebase))
implementation(ProjectDependencies.firebase_auth)
implementation(ProjectDependencies.firebase_firestore)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.chocolate.remote.firebase

import com.chocolate.entities.exceptions.NullDataException
import com.chocolate.entities.task.Task
import com.chocolate.entities.uills.Empty
import com.chocolate.entities.user.User
import com.chocolate.repository.datastore.remote.TaskRemoteDataSource
import com.chocolate.repository.mappers.task.toEntity
import com.chocolate.repository.mappers.users.toEntity
import com.chocolate.repository.model.dto.task.TaskDataDto
import com.chocolate.repository.model.dto.users.response.UserDataDto
import com.google.firebase.firestore.FirebaseFirestore
import kotlinx.coroutines.tasks.await
import javax.inject.Inject

class TaskFirebase @Inject constructor(
private val firebaseFirestore: FirebaseFirestore
): TaskRemoteDataSource {

override suspend fun setUsers(user: UserDataDto) {
firebaseFirestore.collection(USERS).document(user.id.toString()).set(user::class.java)
.addOnFailureListener { throw NullDataException(it.message) }.await()
}

override suspend fun getAllUser(): List<UserDataDto?> = try {
firebaseFirestore.collection(USERS)
.get()
.await()
.documents
.map { documentSnapshot ->
documentSnapshot.toObject(UserDataDto::class.java)
}
} catch (e: Exception) {
throw NullDataException(String.Empty)
}

override suspend fun setTeamTask(task: TaskDataDto) {
firebaseFirestore.collection(TEAM_TASK).document(task.id.toString()).set(task::class.java)
.addOnFailureListener { throw NullDataException(it.message) }.await()
}
override suspend fun getTeamTasks(): List<TaskDataDto?> = try {
firebaseFirestore.collection(TEAM_TASK)
.get()
.await()
.documents
.map { documentSnapshot ->
documentSnapshot.toObject(TaskDataDto::class.java)
}
} catch (e: Exception) {
throw NullDataException(String.Empty)
}

companion object {
private const val USERS = "users"
private const val ORGANIZATION_TASK = "organization_task"
private const val TEAM_TASK = "team_task"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.chocolate.repository.datastore.remote

import com.chocolate.entities.task.Task
import com.chocolate.entities.user.User
import com.chocolate.repository.model.dto.task.TaskDataDto
import com.chocolate.repository.model.dto.users.response.UserDataDto

interface TaskRemoteDataSource {
suspend fun setUsers(user: UserDataDto)
suspend fun getAllUser(): List<UserDataDto?>
suspend fun setTeamTask(task:TaskDataDto)
suspend fun getTeamTasks():List<TaskDataDto?>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.chocolate.repository.mappers.task

import com.chocolate.entities.task.SubTask
import com.chocolate.entities.task.Task
import com.chocolate.repository.mappers.toDate
import com.chocolate.repository.model.dto.task.SubTaskDto
import com.chocolate.repository.model.dto.task.TaskDataDto
import java.util.Date

fun TaskDataDto.toEntity(): Task {
return Task(
id = id,
startDate = startDate.toDate(),
endDate = endDate.toDate(),
subTask = subTask.toEntity(),
progress = progress,
assignUser = assignUser,
title = title,

)
}
fun SubTaskDto.toEntity():SubTask{
return SubTask(
id = id,
title = title,
)
}
fun List<SubTaskDto>.toEntity():List<SubTask>{
return this.map { it.toEntity() }
}
fun Task.toRemoteDto():TaskDataDto{
return TaskDataDto(
id,
startDate.time,
endDate.time,
subTask.toRemoteDto(),
progress,
assignUser,
title,

)
}
fun SubTask.toRemoteDto():SubTaskDto{
return SubTaskDto(
id,
title
)
}
fun List<SubTask>.toRemoteDto():List<SubTaskDto> {
return this.map { it.toRemoteDto() }
}

fun List<TaskDataDto?>.toEntity():List<Task?>{
return this.map { it?.toEntity() }
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.chocolate.repository.mappers.users
import com.chocolate.entities.user.User
import com.chocolate.entities.user.UserRole
import com.chocolate.repository.model.dto.users.response.MemberDto
import com.chocolate.repository.model.dto.users.response.UserDataDto
import com.chocolate.repository.model.dto.users.response.UserDto
import com.chocolate.repository.model.localDto.users.UserLocalDto

Expand Down Expand Up @@ -45,4 +46,23 @@ fun MemberDto.toEntity(): User = User(
id = userId ?: 0,
)

fun List<MemberDto>?.toEntity(): List<User> = this?.map { it.toEntity() }.orEmpty()
fun List<MemberDto>?.toEntity(): List<User> = this?.map { it.toEntity() }.orEmpty()

fun UserDataDto.toEntity(): User {
return User(
id ?: 0,
imageUrl.orEmpty(),
email.orEmpty(),
name.orEmpty(),
UserRole.valueOf(role ?: UserRole.GUEST.stringValue)
)
}
fun User.toRemoteDto():UserDataDto{
return UserDataDto(
id ,
imageUrl,
email,
fullName,
role.name,
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.chocolate.repository.model.dto.task

data class SubTaskDto (
val id: Int = 0 ,
val title: String = "",
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.chocolate.repository.model.dto.task

data class TaskDataDto(
val id: Int = 0,
val startDate: Long = 0L,
val endDate: Long = 0L,
val subTask: List<SubTaskDto> = emptyList(),
val progress: Int = 0,
val assignUser: List<String> = emptyList(),
val title: String = "",
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.chocolate.repository.model.dto.users.response

data class UserDataDto(
val id: Int? = 0,
val name: String? = "",
val role: String? = "",
val email: String? = "",
val imageUrl: String? = ""
)
Original file line number Diff line number Diff line change
@@ -1,21 +1,28 @@
package com.chocolate.repository.repository

import com.chocolate.entities.task.Task
import com.chocolate.entities.uills.Empty
import com.chocolate.entities.user.Attachment
import com.chocolate.entities.user.User
import com.chocolate.repository.datastore.local.LocalDataSource
import com.chocolate.repository.datastore.local.PreferencesDataSource
import com.chocolate.repository.datastore.remote.TaskRemoteDataSource
import com.chocolate.repository.datastore.remote.UserRemoteDataSource
import com.chocolate.repository.mappers.task.toEntity
import com.chocolate.repository.mappers.task.toRemoteDto
import com.chocolate.repository.mappers.users.toEntity
import com.chocolate.repository.mappers.users.toLocalDto
import com.chocolate.repository.mappers.users.toRemoteDto
import com.chocolate.repository.utils.SUCCESS
import kotlinx.coroutines.flow.Flow
import repositories.UsersRepository
import javax.inject.Inject

class UserRepositoryImpl @Inject constructor(
private val userRemoteDataSource: UserRemoteDataSource,
private val preferencesDataSource: PreferencesDataSource,
private val teamixLocalDataSource: LocalDataSource
private val teamixLocalDataSource: LocalDataSource,
private val taskRemoteDataSource: TaskRemoteDataSource
) : UsersRepository {
override suspend fun setUserUsedAppForFirstTime(isComplete: Boolean) {
preferencesDataSource.setUserUsedAppForFirstTime(isComplete)
Expand Down Expand Up @@ -69,7 +76,8 @@ class UserRepositoryImpl @Inject constructor(
}

override suspend fun getUserPresence(email: String): String {
return userRemoteDataSource.getUserPresence(email).presenceDto?.aggregatedDto?.status ?: String.Empty
return userRemoteDataSource.getUserPresence(email).presenceDto?.aggregatedDto?.status
?: String.Empty
}

override suspend fun getRealmPresence(): String {
Expand Down Expand Up @@ -121,7 +129,11 @@ class UserRepositoryImpl @Inject constructor(
override suspend fun getUserMembership(
groupId: Int, userId: Int, directMemberOnly: Boolean
): Boolean {
return userRemoteDataSource.getUserMembership(groupId, userId, directMemberOnly).isUserGroupMember
return userRemoteDataSource.getUserMembership(
groupId,
userId,
directMemberOnly
).isUserGroupMember
?: false
}

Expand Down Expand Up @@ -156,6 +168,8 @@ class UserRepositoryImpl @Inject constructor(
apikey = apiKey ?: String.Empty,
email = email ?: String.Empty
)
val currentUser = getRemoteCurrentUser().toRemoteDto()
taskRemoteDataSource.setUsers(currentUser)
true
} ?: false
}
Expand Down Expand Up @@ -203,4 +217,12 @@ class UserRepositoryImpl @Inject constructor(
?: getRemoteCurrentUser()
.also { upsertCurrentUser(it.email) }
}

override suspend fun setTeamTask(task:Task) {
taskRemoteDataSource.setTeamTask(task.toRemoteDto())
}

override suspend fun getTeamTask(): List<Task?> {
return taskRemoteDataSource.getTeamTasks().toEntity()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.chocolate.entities.task

import java.util.Date
data class Task(
val id: Int,
val startDate: Date,
val endDate: Date,
val subTask: List<SubTask>,
val progress: Int,
val assignUser: List<String>,
val title: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.chocolate.entities.task

data class SubTask(
val id: Int,
val title: String,
)
Loading