Skip to content

Commit

Permalink
[feat] #23 Profile API 연동을 위한 모듈 분리
Browse files Browse the repository at this point in the history
  • Loading branch information
jihyunniiii committed Jun 5, 2024
1 parent c18751b commit 2d9b7f9
Show file tree
Hide file tree
Showing 21 changed files with 248 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package com.dongguk.telepigeon.di

import com.dongguk.telepigeon.data.local.datasource.TelePigeonLocalDataSource
import com.dongguk.telepigeon.data.local.datasourceimpl.TelePigeonLocalDataSourceImpl
import com.dongguk.telepigeon.data.remote.datasource.ProfileRemoteDataSource
import com.dongguk.telepigeon.data.remote.datasource.RoomRemoteDataSource
import com.dongguk.telepigeon.data.remote.datasourceimpl.ProfileRemoteDataSourceImpl
import com.dongguk.telepigeon.data.remote.datasourceimpl.RoomRemoteDataSourceImpl
import dagger.Binds
import dagger.Module
Expand All @@ -17,6 +19,10 @@ abstract class DataSourceModule {
@Singleton
abstract fun bindsTelePigeonLocalDataSource(telePigeonLocalDataSourceImpl: TelePigeonLocalDataSourceImpl): TelePigeonLocalDataSource

@Binds
@Singleton
abstract fun bindsProfileRemoteDataSource(profileRemoteDataSourceImpl: ProfileRemoteDataSourceImpl): ProfileRemoteDataSource

@Binds
@Singleton
abstract fun bindsRoomRemoteDataSource(roomRemoteDataSourceImpl: RoomRemoteDataSourceImpl): RoomRemoteDataSource
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.dongguk.telepigeon.di

import com.dongguk.telepigeon.data.repositoryimpl.ProfileRepositoryImpl
import com.dongguk.telepigeon.data.repositoryimpl.RoomRepositoryImpl
import com.dongguk.telepigeon.data.repositoryimpl.TelePigeonRepositoryImpl
import com.dongguk.telepigeon.domain.repository.ProfileRepository
import com.dongguk.telepigeon.domain.repository.RoomRepository
import com.dongguk.telepigeon.domain.repository.TelePigeonRepository
import dagger.Binds
Expand All @@ -17,6 +19,10 @@ abstract class RepositoryModule {
@Singleton
abstract fun bindsTelePigeonRepository(telePigeonRepositoryImpl: TelePigeonRepositoryImpl): TelePigeonRepository

@Binds
@Singleton
abstract fun bindsProfileRepository(profileRepositoryImpl: ProfileRepositoryImpl): ProfileRepository

@Binds
@Singleton
abstract fun bindsRoomRepository(roomRepositoryImpl: RoomRepositoryImpl): RoomRepository
Expand Down
8 changes: 8 additions & 0 deletions app/src/main/java/com/dongguk/telepigeon/di/ServiceModule.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.dongguk.telepigeon.di

import com.dongguk.telepigeon.data.remote.service.ProfileService
import com.dongguk.telepigeon.data.remote.service.RoomService
import com.dongguk.telepigeon.di.qualifier.TelePigeon
import dagger.Module
Expand All @@ -12,6 +13,13 @@ import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object ServiceModule {
@Provides
@Singleton
fun providesProfileService(
@TelePigeon retrofit: Retrofit
): ProfileService =
retrofit.create(ProfileService::class.java)

@Provides
@Singleton
fun providesRoomService(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.dongguk.telepigeon.data.remote.datasource

import com.dongguk.telepigeon.data.remote.model.request.RequestPutRoomKeywordsExtraDto
import com.dongguk.telepigeon.data.remote.model.response.ResponseGetRoomExtraDto
import com.dongguk.telepigeon.data.remote.model.response.ResponseGetRoomKeywordsDto
import com.dongguk.telepigeon.data.remote.model.response.base.BaseResponseDto
import com.dongguk.telepigeon.data.remote.model.response.base.NullableBaseResponseDto

interface ProfileRemoteDataSource {
suspend fun getRoomKeywords(roomId: Int): BaseResponseDto<ResponseGetRoomKeywordsDto>
suspend fun getRoomExtra(roomId: Int): BaseResponseDto<ResponseGetRoomExtraDto>
suspend fun putRoomKeywordsExtra(roomId: Int, requestPutRoomKeywordsExtraDto: RequestPutRoomKeywordsExtraDto): NullableBaseResponseDto<Unit>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.dongguk.telepigeon.data.remote.datasourceimpl

import com.dongguk.telepigeon.data.remote.datasource.ProfileRemoteDataSource
import com.dongguk.telepigeon.data.remote.model.request.RequestPutRoomKeywordsExtraDto
import com.dongguk.telepigeon.data.remote.model.response.ResponseGetRoomExtraDto
import com.dongguk.telepigeon.data.remote.model.response.ResponseGetRoomKeywordsDto
import com.dongguk.telepigeon.data.remote.model.response.base.BaseResponseDto
import com.dongguk.telepigeon.data.remote.model.response.base.NullableBaseResponseDto
import com.dongguk.telepigeon.data.remote.service.ProfileService
import javax.inject.Inject

class ProfileRemoteDataSourceImpl @Inject constructor(
private val profileService: ProfileService
) : ProfileRemoteDataSource {
override suspend fun getRoomKeywords(roomId: Int): BaseResponseDto<ResponseGetRoomKeywordsDto> = profileService.getRoomKeywords(roomId = roomId)

override suspend fun getRoomExtra(roomId: Int): BaseResponseDto<ResponseGetRoomExtraDto> = profileService.getRoomExtra(roomId = roomId)

override suspend fun putRoomKeywordsExtra(roomId: Int, requestPutRoomKeywordsExtraDto: RequestPutRoomKeywordsExtraDto): NullableBaseResponseDto<Unit> = profileService.putRoomKeywordsExtra(roomId = roomId, requestPutRoomKeywordsExtraDto = requestPutRoomKeywordsExtraDto)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.dongguk.telepigeon.data.remote.model.request

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class RequestPutRoomKeywordsExtraDto(
@SerialName("keywords")
val keywords: List<String>,
@SerialName("gender")
val gender: String,
@SerialName("ageRange")
val ageRange: String,
@SerialName("relation")
val relation: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.dongguk.telepigeon.data.remote.model.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class ResponseGetRoomExtraDto(
@SerialName("gender")
val gender: String,
@SerialName("ageRange")
val ageRange: String,
@SerialName("relation")
val relation: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.dongguk.telepigeon.data.remote.model.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class ResponseGetRoomKeywordsDto(
@SerialName("keywords")
val keywords: List<String>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.dongguk.telepigeon.data.remote.service

import com.dongguk.telepigeon.data.remote.model.request.RequestPutRoomKeywordsExtraDto
import com.dongguk.telepigeon.data.remote.model.response.ResponseGetRoomExtraDto
import com.dongguk.telepigeon.data.remote.model.response.ResponseGetRoomKeywordsDto
import com.dongguk.telepigeon.data.remote.model.response.base.BaseResponseDto
import com.dongguk.telepigeon.data.remote.model.response.base.NullableBaseResponseDto
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.PUT
import retrofit2.http.Path

interface ProfileService {
@GET("$ROOMS/{$ROOM_ID}/$KEYWORDS")
suspend fun getRoomKeywords(
@Path("${ROOM_ID}") roomId: Int,
): BaseResponseDto<ResponseGetRoomKeywordsDto>

@GET("$ROOMS/{$ROOM_ID}/$EXTRA")
suspend fun getRoomExtra(
@Path("${ROOM_ID}") roomId: Int,
): BaseResponseDto<ResponseGetRoomExtraDto>

@PUT("$ROOMS/${ROOM_ID}")
suspend fun putRoomKeywordsExtra(
@Path("${ROOM_ID}") roomId: Int,
@Body requestPutRoomKeywordsExtraDto: RequestPutRoomKeywordsExtraDto
): NullableBaseResponseDto<Unit>

companion object {
const val ROOMS = "rooms"
const val ROOM_ID = "roomId"
const val KEYWORDS = "keywords"
const val EXTRA = "extra"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.dongguk.telepigeon.data.mapper

import com.dongguk.telepigeon.data.remote.model.response.ResponseGetRoomExtraDto
import com.dongguk.telepigeon.domain.model.RoomExtraModel

fun ResponseGetRoomExtraDto.toRoomKeywordExtraModel() = RoomExtraModel(
gender = this.gender,
ageRange = this.ageRange,
relation = this.relation
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.dongguk.telepigeon.data.mapper

import com.dongguk.telepigeon.data.remote.model.response.ResponseGetRoomKeywordsDto
import com.dongguk.telepigeon.domain.model.RoomKeywordModel

fun ResponseGetRoomKeywordsDto.toRoomKeywordModel() = RoomKeywordModel(
keywords = this.keywords.joinToString { ", " }
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.dongguk.telepigeon.data.mapper

import com.dongguk.telepigeon.data.remote.model.request.RequestPutRoomKeywordsExtraDto
import com.dongguk.telepigeon.domain.model.RoomKeywordsExtraModel

fun RoomKeywordsExtraModel.toRequestPutRoomKeywordsExtraDto() = RequestPutRoomKeywordsExtraDto(
keywords = this.keywords,
gender = this.gender,
ageRange = this.ageRange,
relation = this.relation
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.dongguk.telepigeon.data.repositoryimpl

import com.dongguk.telepigeon.data.mapper.toRequestPutRoomKeywordsExtraDto
import com.dongguk.telepigeon.data.mapper.toRoomKeywordExtraModel
import com.dongguk.telepigeon.data.mapper.toRoomKeywordModel
import com.dongguk.telepigeon.data.remote.datasource.ProfileRemoteDataSource
import com.dongguk.telepigeon.domain.model.RoomExtraModel
import com.dongguk.telepigeon.domain.model.RoomKeywordModel
import com.dongguk.telepigeon.domain.model.RoomKeywordsExtraModel
import com.dongguk.telepigeon.domain.repository.ProfileRepository
import javax.inject.Inject

class ProfileRepositoryImpl @Inject constructor(
private val profileRemoteDataSource: ProfileRemoteDataSource
) : ProfileRepository {
override suspend fun getRoomKeywords(roomId: Int): Result<RoomKeywordModel> = runCatching {
profileRemoteDataSource.getRoomKeywords(roomId = roomId).data.toRoomKeywordModel()
}

override suspend fun getRoomExtra(roomId: Int): Result<RoomExtraModel> = runCatching {
profileRemoteDataSource.getRoomExtra(roomId = roomId).data.toRoomKeywordExtraModel()
}

override suspend fun putRoomKeywordExtra(roomId: Int, roomKeywordsExtraModel: RoomKeywordsExtraModel): Result<Unit> = runCatching {
profileRemoteDataSource.putRoomKeywordsExtra(roomId = roomId, requestPutRoomKeywordsExtraDto = roomKeywordsExtraModel.toRequestPutRoomKeywordsExtraDto())
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.dongguk.telepigeon.domain.model

data class RoomKeywordExtraModel(
data class RoomExtraModel(
val gender: String,
val ageRange: String,
val relation: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.dongguk.telepigeon.domain.model

data class RoomKeywordsExtraModel(
val keywords: List<String>,
val gender: String,
val ageRange: String,
val relation: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.dongguk.telepigeon.domain.repository

import com.dongguk.telepigeon.domain.model.RoomExtraModel
import com.dongguk.telepigeon.domain.model.RoomKeywordModel
import com.dongguk.telepigeon.domain.model.RoomKeywordsExtraModel

interface ProfileRepository {
suspend fun getRoomKeywords(roomId: Int): Result<RoomKeywordModel>
suspend fun getRoomExtra(roomId: Int): Result<RoomExtraModel>
suspend fun putRoomKeywordExtra(roomId: Int, roomKeywordsExtraModel: RoomKeywordsExtraModel): Result<Unit>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.dongguk.telepigeon.domain.usecase

import com.dongguk.telepigeon.domain.repository.ProfileRepository
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class GetRoomExtraUseCase @Inject constructor(
private val profileRepository: ProfileRepository
) {
suspend operator fun invoke(roomId: Int) = profileRepository.getRoomExtra(roomId = roomId)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.dongguk.telepigeon.domain.usecase

import com.dongguk.telepigeon.domain.repository.ProfileRepository
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class GetRoomKeywordsUseCase @Inject constructor(
private val profileRepository: ProfileRepository
){
suspend operator fun invoke(roomId: Int) = profileRepository.getRoomKeywords(roomId = roomId)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.dongguk.telepigeon.domain.usecase

import com.dongguk.telepigeon.domain.model.RoomKeywordsExtraModel
import com.dongguk.telepigeon.domain.repository.ProfileRepository
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class PutRoomKeywordExtraUseCase @Inject constructor(
private val profileRepository: ProfileRepository
) {
suspend operator fun invoke(roomId: Int, roomKeywordsExtraModel: RoomKeywordsExtraModel) = profileRepository.putRoomKeywordExtra(roomId = roomId, roomKeywordsExtraModel = roomKeywordsExtraModel)
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ class SettingFragment : BindingFragment<FragmentSettingBinding>({ FragmentSettin
// TODO 서버통신 구현 후 collectData 함수로 해당 로직 이동
etSettingKeyWordCurrent.editText.setText(settingViewModel.dummyRoomKeywordModel.keywords)

tvSettingKeyWordExtraGenderContent.text = settingViewModel.dummyRoomKeywordExtraModel.gender
tvSettingKeyWordAgeGroupContent.text = settingViewModel.dummyRoomKeywordExtraModel.ageRange
tvSettingKeyWordRelationshipContent.text = settingViewModel.dummyRoomKeywordExtraModel.relation
tvSettingKeyWordExtraGenderContent.text = settingViewModel.dummyRoomExtraModel.gender
tvSettingKeyWordAgeGroupContent.text = settingViewModel.dummyRoomExtraModel.ageRange
tvSettingKeyWordRelationshipContent.text = settingViewModel.dummyRoomExtraModel.relation
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.dongguk.telepigeon.feature.setting.setting
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.dongguk.telepigeon.domain.model.RoomInfoModel
import com.dongguk.telepigeon.domain.model.RoomKeywordExtraModel
import com.dongguk.telepigeon.domain.model.RoomExtraModel
import com.dongguk.telepigeon.domain.model.RoomKeywordModel
import com.dongguk.telepigeon.domain.model.RoomWorryModel
import com.dongguk.telepigeon.domain.usecase.GetRoomIdUseCase
Expand Down Expand Up @@ -41,8 +41,8 @@ class SettingViewModel
keywords = "운동, 영양제, 밥",
)

val dummyRoomKeywordExtraModel =
RoomKeywordExtraModel(
val dummyRoomExtraModel =
RoomExtraModel(
gender = "남성",
ageRange = "20대",
relation = "자식",
Expand Down

0 comments on commit 2d9b7f9

Please sign in to comment.