Skip to content

Commit

Permalink
Merge pull request #24 from TelePigeon/feat-profile-api
Browse files Browse the repository at this point in the history
[feat] Profile API 연동
  • Loading branch information
jihyunniiii authored Jun 5, 2024
2 parents 2182c32 + c94521b commit d092713
Show file tree
Hide file tree
Showing 25 changed files with 435 additions and 31 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,18 @@
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,25 @@
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
Expand Up @@ -23,5 +23,5 @@ class RoomRemoteDataSourceImpl

override suspend fun deleteRoom(roomId: Int): NullableBaseResponseDto<Unit> = roomService.deleteRoom(roomId = roomId)

override suspend fun getRoomInfo(roomId: Int): BaseResponseDto<ResponseGetRoomInfoDto> = getRoomInfo(roomId = roomId)
override suspend fun getRoomInfo(roomId: Int): BaseResponseDto<ResponseGetRoomInfoDto> = roomService.getRoomInfo(roomId = roomId)
}
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,11 @@
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,9 @@
package com.dongguk.telepigeon.data.mapper

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

fun ResponseGetRoomKeywordsDto.toRoomKeywordModel() =
RoomKeywordsModel(
keywords = this.keywords.joinToString { ", " },
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
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,35 @@
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.RoomKeywordsExtraModel
import com.dongguk.telepigeon.domain.model.RoomKeywordsModel
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<RoomKeywordsModel> =
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
@@ -1,5 +1,5 @@
package com.dongguk.telepigeon.domain.model

data class RoomKeywordModel(
data class RoomKeywordsModel(
val keywords: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.dongguk.telepigeon.domain.repository

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

interface ProfileRepository {
suspend fun getRoomKeywords(roomId: Int): Result<RoomKeywordsModel>

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,14 @@
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,14 @@
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,18 @@
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)
}
Loading

0 comments on commit d092713

Please sign in to comment.