Skip to content

Commit

Permalink
[Refactor] TeamBuilding 리팩토링
Browse files Browse the repository at this point in the history
  • Loading branch information
wjdtkdgns777 committed Dec 20, 2023
1 parent d531e42 commit d745c0d
Show file tree
Hide file tree
Showing 35 changed files with 205 additions and 222 deletions.
4 changes: 2 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@

<activity android:name=".ui.board.BoardInsideActivity"/>
<activity android:name=".ui.board.BoardWriteActivity"/>
<activity android:name=".ui.teamBuilding.TeamBuildingWriteActivity" />
<activity android:name=".ui.teamBuilding.TeamBuildingInsideActivity" />
<activity android:name=".ui.project.ProjectWriteActivity" />
<activity android:name=".ui.project.ProjectInsideActivity" />



Expand Down
6 changes: 3 additions & 3 deletions app/src/main/java/com/example/pathfinder/data/di/ApiModule.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.example.pathfinder.data.di

import com.example.pathfinder.data.source.remote.board.BoardApi
import com.example.pathfinder.data.source.remote.teamBuilding.TeamBuildingApi
import com.example.pathfinder.data.source.remote.project.ProjectApi
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
Expand All @@ -20,7 +20,7 @@ class ApiModule {

@Provides
@Singleton
fun provideTeamBuildingApi(retrofit: Retrofit): TeamBuildingApi {
return retrofit.create(TeamBuildingApi::class.java)
fun provideProjectApi(retrofit: Retrofit): ProjectApi {
return retrofit.create(ProjectApi::class.java)
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.example.pathfinder.data.di

import com.example.pathfinder.data.repository.BoardRepository
import com.example.pathfinder.data.repository.TeamBuildingRepository
import com.example.pathfinder.data.repository.ProjectRepository
import com.example.pathfinder.data.source.remote.board.BoardDetailRemoteDataSource
import com.example.pathfinder.data.source.remote.teamBuilding.TeamBuildingRemoteDataSource
import com.example.pathfinder.data.source.remote.project.ProjectRemoteDataSource
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
Expand Down Expand Up @@ -31,12 +31,12 @@ class RepositoryModule {

@Singleton
@Provides
fun provideTeamBuildingRemoteDataSource(
teamBuildingRemoteDataSource: TeamBuildingRemoteDataSource,
fun provideProjectRemoteDataSource(
projectRemoteDataSource: ProjectRemoteDataSource,
@IoDispatcher ioDispatcher: CoroutineDispatcher
): TeamBuildingRepository {
return TeamBuildingRepository(
teamBuildingRemoteDataSource = teamBuildingRemoteDataSource,
): ProjectRepository {
return ProjectRepository(
projectRemoteDataSource = projectRemoteDataSource,
ioDispatcher = ioDispatcher
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.example.pathfinder.data.mapper

import com.example.pathfinder.data.model.Project
import com.example.pathfinder.utils.Common.Companion.formatDate
import com.example.pathfinder.utils.Common.Companion.formatEndDate
import com.example.pathfinder.data.response.model.Project as ResponseProject

fun responseProjectModelToDataModel(
projectList: List<ResponseProject>
): List<Project> {
return projectList.map { project ->
Project(
id = project.id,
author = project.author ?: "익명 유저",
title = project.title,
content = project.content,
category = project.category,
region = project.region,
endTime = formatEndDate(project.endTime.toLong()),
uploadTime = formatDate(project.uploadTime.toLong()),

)
}
}

Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
package com.example.pathfinder.data.mapper

import com.example.pathfinder.data.model.Team
import com.example.pathfinder.data.response.TeamBuildingSingleResponse
import com.example.pathfinder.data.model.Project
import com.example.pathfinder.data.response.ProjectSingleResponse

fun responseSingleTeamBuildingModelToDataModel(
team: TeamBuildingSingleResponse
): Team{
return Team(
id = team.team.id,
author = team.team.author,
title = team.team.title,
content = team.team.content,
category = team.team.category,
region = team.team.region,
endTime = team.team.endTime,
uploadTime = team.team.uploadTime,
comment = team.team.comments
team: ProjectSingleResponse
): Project{
return Project(
id = team.project.id,
author = team.project.author,
title = team.project.title,
content = team.project.content,
category = team.project.category,
region = team.project.region,
endTime = team.project.endTime,
uploadTime = team.project.uploadTime,
comment = team.project.comments
)


Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.example.pathfinder.data.model

import java.io.Serializable

data class Team(
data class Project(
val id: String = "",
var author: String = "",
val title: String = "",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,28 @@
package com.example.pathfinder.data.repository

import com.example.pathfinder.data.mapper.responseSingleTeamBuildingModelToDataModel
import com.example.pathfinder.data.mapper.responseTeamBuildingModelToDataModel
import com.example.pathfinder.data.model.BoardRequest
import com.example.pathfinder.data.mapper.responseProjectModelToDataModel
import com.example.pathfinder.data.model.CommentRequest
import com.example.pathfinder.data.model.ProjectRequest
import com.example.pathfinder.data.model.Results
import com.example.pathfinder.data.model.Team
import com.example.pathfinder.data.source.remote.teamBuilding.TeamBuildingRemoteDataSource
import com.example.pathfinder.data.model.Project
import com.example.pathfinder.data.source.remote.project.ProjectRemoteDataSource
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOn

class TeamBuildingRepository constructor(
class ProjectRepository constructor(
//todo:왜 인젝트 안하는지
private val teamBuildingRemoteDataSource: TeamBuildingRemoteDataSource,
private val projectRemoteDataSource: ProjectRemoteDataSource,
private val ioDispatcher: CoroutineDispatcher

){
fun getTeamBuildingData(): Flow<Results<List<Team>>> {
fun getTeamBuildingData(): Flow<Results<List<Project>>> {
return flow {
emit(Results.Loading)
val response = teamBuildingRemoteDataSource.getTeamBuildingData()
val teamData = response.body()?.teams?.let { responseTeamBuildingModelToDataModel(it) }
val response = projectRemoteDataSource.getTeamBuildingData()
val teamData = response.body()?.projects?.let { responseProjectModelToDataModel(it) }
if (response.isSuccessful && teamData != null) {
emit(Results.Success(teamData))
} else {
Expand All @@ -35,10 +34,10 @@ class TeamBuildingRepository constructor(

}

fun getSingleTeamBuildingData(teamId:String): Flow<Results<Team>> {
fun getSingleTeamBuildingData(teamId:String): Flow<Results<Project>> {
return flow {
emit(Results.Loading)
val response = teamBuildingRemoteDataSource.getSingleTeamBuildingData(teamId)
val response = projectRemoteDataSource.getSingleTeamBuildingData(teamId)
val teamData = response.body()?.let { responseSingleTeamBuildingModelToDataModel(it) }
if (response.isSuccessful && teamData != null) {
emit(Results.Success(teamData))
Expand All @@ -53,7 +52,7 @@ class TeamBuildingRepository constructor(
fun addComment(commentRequest: CommentRequest, projectId: String): Flow<Results<Unit>> {
return flow {
emit(Results.Loading)
val response = teamBuildingRemoteDataSource.addComment(commentRequest,projectId)
val response = projectRemoteDataSource.addComment(commentRequest,projectId)
if (response.isSuccessful) {
emit(Results.Success(Unit))
} else {
Expand All @@ -65,7 +64,7 @@ class TeamBuildingRepository constructor(
fun addProject(projectRequest: ProjectRequest): Flow<Results<Unit>> {
return flow {
emit(Results.Loading)
val response = teamBuildingRemoteDataSource.addProject(projectRequest)
val response = projectRemoteDataSource.addProject(projectRequest)
if (response.isSuccessful) {
emit(Results.Success(Unit))
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.example.pathfinder.data.response

import com.example.pathfinder.data.response.model.Team
import com.example.pathfinder.data.response.model.Project
import com.google.gson.annotations.SerializedName

data class TeamBuildingResponse(
data class ProjectResponse(
@SerializedName("projects")
val teams: List<Team>
val projects: List<Project>
//todo:한번 더 확인


Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.example.pathfinder.data.response

import com.example.pathfinder.data.response.model.Team
import com.example.pathfinder.data.response.model.Project
import com.google.gson.annotations.SerializedName

data class TeamBuildingSingleResponse(
data class ProjectSingleResponse(

@SerializedName("project")
val team: Team
val project: Project

)
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import com.example.pathfinder.data.model.Comment

import com.google.gson.annotations.SerializedName

data class Team(
data class Project(

@SerializedName("id")
val id: String,
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,24 +1,21 @@
package com.example.pathfinder.data.source.remote.teamBuilding
package com.example.pathfinder.data.source.remote.project

import com.example.pathfinder.data.model.BoardRequest
import com.example.pathfinder.data.model.CommentRequest
import com.example.pathfinder.data.model.ProjectRequest
import com.example.pathfinder.data.response.TeamBuildingResponse
import com.example.pathfinder.data.response.TeamBuildingSingleResponse
import com.example.pathfinder.data.response.model.Board
import com.example.pathfinder.data.response.model.Team
import com.example.pathfinder.data.response.ProjectResponse
import com.example.pathfinder.data.response.ProjectSingleResponse
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path

interface TeamBuildingApi {
interface ProjectApi {
@GET("/api/project/all")
suspend fun getTeamData(): Response<TeamBuildingResponse>
suspend fun getTeamData(): Response<ProjectResponse>

@GET("/api/project/single/{teamId}")
suspend fun getSingleTeamData(@Path("teamId")teamId:String): Response<TeamBuildingSingleResponse>
suspend fun getSingleTeamData(@Path("teamId")teamId:String): Response<ProjectSingleResponse>


@POST("/api/project/comment/{projectId}")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,28 @@
package com.example.pathfinder.data.source.remote.teamBuilding
package com.example.pathfinder.data.source.remote.project

import com.example.pathfinder.data.di.IoDispatcher
import com.example.pathfinder.data.model.BoardRequest
import com.example.pathfinder.data.model.CommentRequest
import com.example.pathfinder.data.model.ProjectRequest
import com.example.pathfinder.data.response.TeamBuildingResponse
import com.example.pathfinder.data.response.TeamBuildingSingleResponse
import com.example.pathfinder.data.response.model.Team
import com.example.pathfinder.data.response.ProjectResponse
import com.example.pathfinder.data.response.ProjectSingleResponse
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import retrofit2.Response
import javax.inject.Inject

class TeamBuildingRemoteDataSource @Inject constructor(
private val teamBuildingApi: TeamBuildingApi,
class ProjectRemoteDataSource @Inject constructor(
private val projectApi: ProjectApi,
@IoDispatcher private val ioDispatcher: CoroutineDispatcher
){
suspend fun getTeamBuildingData(): Response<TeamBuildingResponse> {
suspend fun getTeamBuildingData(): Response<ProjectResponse> {
return withContext(ioDispatcher){
return@withContext teamBuildingApi.getTeamData()
return@withContext projectApi.getTeamData()
}
}

suspend fun getSingleTeamBuildingData(teamId:String): Response<TeamBuildingSingleResponse> {
suspend fun getSingleTeamBuildingData(teamId:String): Response<ProjectSingleResponse> {
return withContext(ioDispatcher){
return@withContext teamBuildingApi.getSingleTeamData(teamId)
return@withContext projectApi.getSingleTeamData(teamId)
}

}
Expand All @@ -35,7 +33,7 @@ class TeamBuildingRemoteDataSource @Inject constructor(
projectId: String
): Response<Unit> {
return withContext(ioDispatcher) {
return@withContext teamBuildingApi.addComment(
return@withContext projectApi.addComment(
projectId,
commentRequest
)
Expand All @@ -44,7 +42,7 @@ class TeamBuildingRemoteDataSource @Inject constructor(

suspend fun addProject(projectRequest: ProjectRequest): Response<Unit> {
return withContext(ioDispatcher) {
return@withContext teamBuildingApi.addProject(projectRequest)
return@withContext projectApi.addProject(projectRequest)
}
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,20 @@ package com.example.pathfinder.domain.usecases

import com.example.pathfinder.data.model.CommentRequest
import com.example.pathfinder.data.model.Results
import com.example.pathfinder.data.repository.BoardRepository
import com.example.pathfinder.data.repository.TeamBuildingRepository
import com.example.pathfinder.data.repository.ProjectRepository
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class AddProjectCommentUseCase @Inject constructor(
private val teamBuildingRepository: TeamBuildingRepository
private val projectRepository: ProjectRepository
) {
operator fun invoke(
commentRequest: CommentRequest,
boardId: String
): Flow<Results<Unit>> {
return teamBuildingRepository.addComment(commentRequest,boardId)
return projectRepository.addComment(commentRequest,boardId)
}


Expand Down
Loading

0 comments on commit d745c0d

Please sign in to comment.