Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
1e5ca34
[refactor]: PR 리뷰에 맞게 레포지토리 코드 수정 (#83)
rbqks529 Aug 13, 2025
680b677
[refactor]: Group 로직을 Room으로 이동 (#83)
rbqks529 Aug 13, 2025
df1145c
[refactor]: 모집중인 모임방 장르 색 받아오게 수정 (#83)
rbqks529 Aug 13, 2025
abcd20d
[feat]: 모집중인 모임방에서 책 자세히보기 화면으로 이동 (#83)
rbqks529 Aug 13, 2025
a5ed77e
[feat]: 모임만들기 책 조회 api Response, Service 구현 (#83)
rbqks529 Aug 13, 2025
f801bf1
[feat]: 모임만들기 책 조회 api 연결 (#83)
rbqks529 Aug 13, 2025
ee4f79d
[feat]: 모임만들기 책 검색 api 연결 (#83)
rbqks529 Aug 13, 2025
35c082f
[feat]: 모임 만들기 완료 후 해당 모임방으로 이동 (#83)
rbqks529 Aug 13, 2025
fed3945
[feat]: 모집중인 모임방 베경 이미지 수정 (#83)
rbqks529 Aug 13, 2025
bf0940e
[feat]: 모집중인 모임방이 비밀방일때 비밀번호 입력 화면으로 이동 네비게이션 구현 (#83)
rbqks529 Aug 13, 2025
7053d31
[feat]: 비밀번호 입력 api dto, service, repository 구현 (#83)
rbqks529 Aug 13, 2025
ffb686d
[feat]: 모집중인 모임방 토스트 메세지 내용 수정 (#83)
rbqks529 Aug 13, 2025
5082439
[feat]: 비밀번호 입력 성공시 참여하기 로직 구현 (#83)
rbqks529 Aug 14, 2025
2715edb
[refactor]: 최근 검색어 로직 파일 이동 (#83)
rbqks529 Aug 14, 2025
f8d1492
[feat]: 방 검색 화면에 최근 검색어 로직 구현 (#83)
rbqks529 Aug 14, 2025
f3fb5cb
[feat]: 모집 마감 response, service, repository 구현 (#83)
rbqks529 Aug 14, 2025
ff68ffc
[feat]: 모집 마감 구현 및 마감 후 해당 기록장으로 이동 로직 구현 (#83)
rbqks529 Aug 14, 2025
c43d7d4
[feat]: viewModel에서 context제거 및 stringResource 추출 (#83)
rbqks529 Aug 14, 2025
8b573e9
[refactor]: util의 함수를 사용하도록 수정 (#83)
rbqks529 Aug 14, 2025
5fa32b1
[refactor]: 파일 오탈자 수정 및 runCatching으로 수정 (#83)
rbqks529 Aug 14, 2025
320f40e
[refactor]: 그룹 비밀번호 입력 로직 수정 (#83)
rbqks529 Aug 14, 2025
a088ac7
[refactor]: pr리뷰 반영 (#83)
rbqks529 Aug 14, 2025
a7074a4
[refactor]: 줄 바꿈 반영 (#83)
rbqks529 Aug 15, 2025
c0903af
Merge branch 'develop' into feat/#83_API_Rooms
rbqks529 Aug 15, 2025
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
13 changes: 7 additions & 6 deletions app/src/main/java/com/texthip/thip/data/di/ServiceModule.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.texthip.thip.data.di

import com.texthip.thip.data.service.BookService
import com.texthip.thip.data.service.RecentSearchService
import com.texthip.thip.data.service.CommentsService
import com.texthip.thip.data.service.GroupService
import com.texthip.thip.data.service.RoomsService
Expand All @@ -15,12 +16,6 @@ import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object ServiceModule {

@Provides
@Singleton
fun provideGroupService(retrofit: Retrofit): GroupService {
return retrofit.create(GroupService::class.java)
}

@Provides
@Singleton
Expand All @@ -38,6 +33,12 @@ object ServiceModule {
return retrofit.create(UserService::class.java)
}

@Provides
@Singleton
fun provideRecentSearchService(retrofit: Retrofit): RecentSearchService {
return retrofit.create(RecentSearchService::class.java)
}

@Provides
@Singleton
fun providesCommentsService(retrofit: Retrofit): CommentsService =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ data class BookListResponse(

@Serializable
data class BookSavedResponse(
@SerialName("isbn") val isbn: String = "",
@SerialName("bookId") val bookId: Int = 0,
@SerialName("bookTitle") val bookTitle: String = "",
@SerialName("authorName") val authorName: String = "",
@SerialName("publisher") val publisher: String = "",
@SerialName("imageUrl") val imageUrl: String? = null
@SerialName("bookImageUrl") val bookImageUrl: String? = null,
@SerialName("isbn") val isbn: String = "",
)
Comment on lines +14 to 20
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

BookSavedResponse 스키마 변경 — 호출부/백엔드 정합성 확인 필요

  • bookId(Int) 추가(기본값 0): API가 아직 값을 내려주지 않는 경우 0이 주입됩니다. 0을 유효 ID로 오인하는 로직이 없는지 확인 필요.
  • imageUrl → bookImageUrl로 필드명 변경: 모든 호출부가 새 필드명으로 마이그레이션되었는지 확인 필요.
  • isbn 위치 변경은 직렬화에 영향 없음(@SerialName 사용) — 문제 없음.

다음 점검을 권장합니다.

검증 스크립트:


🏁 Script executed:

#!/bin/bash
# 이전 필드명 사용 흔적 확인
rg -n --no-heading "\.imageUrl"

# bookId가 0일 때의 분기/검증 로직 확인
rg -n --no-heading "bookId"

Length of output: 2835


BookSavedResponse 스키마 변경 — imageUrl 미마이그레이션 다수 발견, bookId(0) 처리 검토 필요

검증 요약: 실행한 grep 결과 다수 파일에서 여전히 .imageUrl을 참조하고 있어 필드명 변경(bookImageUrl) 마이그레이션이 완료되지 않았습니다. bookId는 선언부(app/src/main/java/com/texthip/thip/data/model/book/response/BookListResponse.kt:14) 외에 검색되지 않았으나, 기본값 0을 유효 ID로 오인하는 로직이 없는지 확인이 필요합니다.

수정이 필요한 호출부(발견된 주요 파일)

  • app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookScreen.kt
  • app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookGroupScreen.kt
  • app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookDetailScreen.kt
  • app/src/main/java/com/texthip/thip/ui/search/component/SearchBookFilteredResult.kt
  • app/src/main/java/com/texthip/thip/ui/search/component/SearchActiveField.kt
  • app/src/main/java/com/texthip/thip/ui/search/component/SearchRecentBook.kt
  • app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupSelectBook.kt
  • app/src/main/java/com/texthip/thip/ui/group/makeroom/viewmodel/GroupMakeRoomViewModel.kt
  • app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookListWithScrollbar.kt
  • app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt

권장 조치 (간단)

  • Book 관련 호출부에서 item.imageUrl → item.bookImageUrl로 교체(또는 DTO/매핑 계층에서 변환).
  • nullable 처리·기본값(예: selectedBook.bookImageUrl ?: R.drawable...) 확인.
  • bookId 기본값 0에 대한 방어 코드 추가(0을 유효 ID로 처리하는 분기 제거 또는 Int? 사용 등) 또는 백엔드 안정화 협의.
  • 변경 반영 여부 재검증: rg -n --no-heading ".imageUrl" 및 rg -n --no-heading ".bookImageUrl"
🤖 Prompt for AI Agents
In
app/src/main/java/com/texthip/thip/data/model/book/response/BookListResponse.kt
lines 14-20, the model renamed imageUrl→bookImageUrl and sets bookId default to
0; update call sites and defensively handle defaults: replace all usages of
item.imageUrl with item.bookImageUrl (or map DTOs at a single conversion layer),
ensure nullable handling where used (e.g., use selectedBook.bookImageUrl ?:
fallbackResource or conditional UI rendering), and audit code that treats
bookId==0 as a valid id—either change bookId to Int? or add explicit guards that
treat 0 as invalid before using it. After edits, re-run searches (rg -n
--no-heading "\.imageUrl" and rg -n --no-heading "\.bookImageUrl") to confirm
migration completeness.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.texthip.thip.data.model.group.request
package com.texthip.thip.data.model.rooms.request

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.texthip.thip.data.model.group.request
package com.texthip.thip.data.model.rooms.request
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

허용값(Join 타입) 사용 현황 점검 요청

코드 내 하드코딩된 문자열이 있는지 빠르게 확인해 enum 전환 난이도를 파악하면 좋겠습니다.


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Join/CANCEL/LEAVE 등 조인 관련 상수 후보 검색"
rg -n --hidden --glob '!.git' -e '"JOIN"' -e '"CANCEL"' -e '"LEAVE"' -e '"REQUEST"'

Length of output: 184


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "1) 대문자 토큰(JOIN/CANCEL/LEAVE/REQUEST) 단어 경계 검색 (대소문자 무시)"
rg -n --hidden --glob '!.git' -S -i -e '\b(JOIN|CANCEL|LEAVE|REQUEST)\b' -g '!**/build/**' -g '!**/node_modules/**' -A2 -B2 || true

echo
echo "2) 큰따옴표로 감싼 토큰(\"JOIN\" 등) 검색"
rg -n --hidden --glob '!.git' -S -i -e '"(JOIN|CANCEL|LEAVE|REQUEST)"' -g '!**/build/**' -g '!**/node_modules/**' -A2 -B2 || true

echo
echo "3) 소문자 포함 일반 토큰(join/cancel/leave/request) 검색"
rg -n --hidden --glob '!.git' -S -i -e '\b(join|cancel|leave|request)\b' -g '!**/build/**' -g '!**/node_modules/**' -A2 -B2 || true

echo
echo "4) enum class .*Join 형태 검색"
rg -n --hidden --glob '!.git' -S -i -e 'enum class .*Join' -g '!**/build/**' -g '!**/node_modules/**' -A2 -B2 || true

echo
echo "5) JoinType/JoinStatus/JoinRequest 등 관련 식별자 검색"
rg -n --hidden --glob '!.git' -S -i -e 'Join(Type|Status|Action|Request)?' -g '!**/build/**' -g '!**/node_modules/**' -A2 -B2 || true

echo
echo "6) 파일 경로에 'join' 포함된 파일 목록(대소문자 무시)"
rg --files --hidden -g '!.git' -g '!**/build/**' -g '!**/node_modules/**' | rg -i '/.*join.*' || true

Length of output: 140317


허용값(Join 타입) enum 전환 검토 — 사용처 확인 결과

간단 요약: 레포 전체 검색 결과, API 요청/저장소는 문자열 타입을 사용하고 있고 UI에만 지역 enum(RoomAction)이 존재합니다. 중앙화된 enum(예: JoinType/RoomActionType)으로 정리하는 것이 안전합니다.

주의가 필요한 파일(발견된 위치)

  • app/src/main/java/com/texthip/thip/data/model/rooms/request/RoomJoinRequest.kt
    • data class RoomJoinRequest(@SerialName("type") val type: String)
  • app/src/main/java/com/texthip/thip/data/service/RoomsService.kt
    • @post("rooms/{roomId}/join") suspend fun joinOrCancelRoom(@Body request: RoomJoinRequest)
  • app/src/main/java/com/texthip/thip/data/repository/RoomsRepository.kt
    • suspend fun joinOrCancelRoom(roomId: Int, type: String) { val request = RoomJoinRequest(type = type) ... }
  • app/src/main/java/com/texthip/thip/ui/group/room/mock/RoomAction.kt
    • enum class RoomAction(val value: String) { JOIN("join"), CANCEL("cancel") } (현재 UI/mock 영역에 위치)
  • app/src/main/java/com/texthip/thip/ui/group/room/viewmodel/GroupRoomRecruitViewModel.kt
    • repository.joinOrCancelRoom(roomId, RoomAction.JOIN.value) / RoomAction.CANCEL.value 사용

권장 작업(간단)

  • 공용 enum 생성 (예: com.texthip.thip.data.model.rooms.JoinType 또는 RoomActionType) 및 각 케이스에 API 값 매핑(@SerialName 또는 직렬화 매핑).
  • RoomJoinRequest.type을 enum으로 변경하거나, 최소한 RoomsRepository에서 enum → 문자열 매핑을 한 곳에서만 수행하도록 리팩터링.
  • UI에 있는 RoomAction/GroupBottomButtonType 등은 공용 enum을 사용하도록 교체(단, UI 전용 값과 API 값 구분 필요).
  • 변경 후 문자열 리터럴("join","cancel","leave" 등) 누락 여부 전역 재검증 및 관련 호출부(Repository/Service/ViewModel) 테스트 수행.

위 파일들을 중심으로 수정하면 enum 전환 난이도가 낮고 영향 범위를 관리하기 쉬울 것으로 보입니다. 상세 변경안 원하시면 간단한 코드 예시(enum 정의 + Request/Repository 변환)를 드리겠습니다.


import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.texthip.thip.data.model.rooms.request

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


@Serializable
data class RoomSecretRoomRequest(
@SerialName("password") val password: String
)
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.texthip.thip.data.model.group.response
package com.texthip.thip.data.model.rooms.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.texthip.thip.data.model.group.response
package com.texthip.thip.data.model.rooms.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.texthip.thip.data.model.group.response
package com.texthip.thip.data.model.rooms.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.texthip.thip.data.model.rooms.response

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

@Serializable
data class RoomCloseResponse(
@SerialName("roomId") val roomId: Int
)
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.texthip.thip.data.model.group.response
package com.texthip.thip.data.model.rooms.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.texthip.thip.data.model.group.response
package com.texthip.thip.data.model.rooms.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.texthip.thip.data.model.group.response
package com.texthip.thip.data.model.rooms.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
Expand All @@ -15,6 +15,7 @@ data class RoomRecruitingResponse(
@SerialName("progressEndDate") val progressEndDate: String,
@SerialName("recruitEndDate") val recruitEndDate: String,
@SerialName("category") val category: String,
@SerialName("categoryColor") val categoryColor: String,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

새 필드(categoryColor) 추가 — 역직렬화 실패 가능성 점검 필요

필드가 non-null이고 기본값이 없어, 백엔드에서 누락 시 kotlinx.serialization 디코딩이 실패할 수 있습니다. 스키마 보장이 명확하지 않다면 nullable + 기본값 또는 안전한 기본값을 권장합니다.

적용 제안(diff):

-    @SerialName("categoryColor") val categoryColor: String,
+    @SerialName("categoryColor") val categoryColor: String? = null,

검증 스크립트: categoryColor 사용처가 null/빈 문자열에 대해 안전하게 처리되는지 확인


🏁 Script executed:

#!/bin/bash
# categoryColor 사용처 점검
rg -n --no-heading "categoryColor"
# 색 변환 유틸이 존재한다면 함께 확인(예: hexToColor)
rg -n --no-heading "hexToColor|colorFromHex|toColor"

Length of output: 1619


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== RoomRecruitingResponse.kt ==="
nl -ba app/src/main/java/com/texthip/thip/data/model/rooms/response/RoomRecruitingResponse.kt | sed -n '1,200p' || true

echo
echo "=== HexToColor.kt ==="
nl -ba app/src/main/java/com/texthip/thip/utils/color/HexToColor.kt | sed -n '1,200p' || true

echo
echo "=== GroupRoomRecruitScreen.kt (1-420) ==="
nl -ba app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomRecruitScreen.kt | sed -n '1,420p' || true

echo
echo "=== GroupRoomRecruitScreen.kt (420-620) ==="
nl -ba app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomRecruitScreen.kt | sed -n '420,620p' || true

echo
echo "=== GroupRoomHeader.kt ==="
nl -ba app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomHeader.kt | sed -n '1,240p' || true

echo
echo "=== GenreColor/related color utilities search ==="
rg -n --no-heading "GenreColor|colorProvider|fromString" || true

Length of output: 2602


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== RoomRecruitingResponse.kt ==="
sed -n '1,200p' app/src/main/java/com/texthip/thip/data/model/rooms/response/RoomRecruitingResponse.kt || true

echo
echo "=== HexToColor.kt ==="
sed -n '1,200p' app/src/main/java/com/texthip/thip/utils/color/HexToColor.kt || true

echo
echo "=== GroupRoomRecruitScreen.kt (330-380) ==="
sed -n '330,380p' app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomRecruitScreen.kt || true

echo
echo "=== GroupRoomRecruitScreen.kt (500-520) ==="
sed -n '500,520p' app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomRecruitScreen.kt || true

echo
echo "=== GroupRoomHeader.kt (1-120) ==="
sed -n '1,120p' app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomHeader.kt || true

echo
echo "=== GenreColor.kt ==="
sed -n '1,240p' app/src/main/java/com/texthip/thip/utils/type/GenreColor.kt || true

Length of output: 11458


categoryColor: 서버 누락 대비 — 모델을 nullable로 바꾸고 사용처를 null-safe 처리하세요

RoomRecruitingResponse의 categoryColor가 non-null(String)으로 정의되어 있어 백엔드가 필드를 보내지 않으면 kotlinx.serialization에서 디코딩이 실패합니다. 또한 GroupRoomRecruitScreen.kt에서 hexToColor(detail.categoryColor)를 바로 호출하고 있어 null 허용으로 변경 시 사용처도 수정해야 합니다. (참고: hexToColor는 잘못된 포맷일 경우 Color.White로 안전하게 폴백합니다.)

수정이 필요한 위치:

  • app/src/main/java/com/texthip/thip/data/model/rooms/response/RoomRecruitingResponse.kt
  • app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomRecruitScreen.kt (hexToColor 호출부)

권장 변경(diff):

--- a/app/src/main/java/com/texthip/thip/data/model/rooms/response/RoomRecruitingResponse.kt
@@
-    @SerialName("categoryColor") val categoryColor: String,
+    @SerialName("categoryColor") val categoryColor: String? = null,
--- a/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomRecruitScreen.kt
@@
-                                Text(
-                                    text = detail.category,
-                                    style = typography.info_m500_s12,
-                                    color = hexToColor(detail.categoryColor)
-                                )
+                                Text(
+                                    text = detail.category,
+                                    style = typography.info_m500_s12,
+                                    color = detail.categoryColor?.let { hexToColor(it) } ?: colors.White
+                                )

Committable suggestion skipped: line range outside the PR's diff.

@SerialName("roomDescription") val roomDescription: String,
@SerialName("memberCount") val memberCount: Int,
@SerialName("recruitCount") val recruitCount: Int,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.texthip.thip.data.model.rooms.response

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


@Serializable
data class RoomSecretRoomResponse(
@SerialName("matched") val matched: Boolean = false,
@SerialName("roomId") val roomId: Int = 0
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.texthip.thip.data.provider

import android.content.Context
import androidx.annotation.StringRes
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class StringResourceProvider @Inject constructor(
@param:ApplicationContext private val context: Context
) {

fun getString(@StringRes resId: Int): String {
return context.getString(resId)
}

fun getString(@StringRes resId: Int, vararg formatArgs: Any): String {
return context.getString(resId, *formatArgs)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@ package com.texthip.thip.data.repository
import com.texthip.thip.data.model.base.handleBaseResponse
import com.texthip.thip.data.model.book.request.BookSaveRequest
import com.texthip.thip.data.model.book.response.BookDetailResponse
import com.texthip.thip.data.model.book.response.BookListResponse
import com.texthip.thip.data.model.book.response.BookSaveResponse
import com.texthip.thip.data.model.book.response.BookSavedResponse
import com.texthip.thip.data.model.book.response.BookSearchResponse
import com.texthip.thip.data.model.book.response.MostSearchedBooksResponse
import com.texthip.thip.data.model.book.response.RecentSearchResponse
import com.texthip.thip.data.model.book.response.RecruitingRoomsResponse
import com.texthip.thip.data.service.BookService
import javax.inject.Inject
Expand All @@ -19,11 +18,10 @@ class BookRepository @Inject constructor(
) {

/** 저장된 책 또는 모임 책 목록 조회 */
suspend fun getBooks(type: String): Result<List<BookSavedResponse>> = runCatching {
suspend fun getBooks(type: String): Result<BookListResponse?> = runCatching {
bookService.getBooks(type)
.handleBaseResponse()
.getOrThrow()
?.bookList ?: emptyList()
}

/** 책 검색 */
Expand All @@ -40,20 +38,6 @@ class BookRepository @Inject constructor(
.getOrThrow()
}

/** 최근 검색어 조회 */
suspend fun getRecentSearches(type: String = "BOOK"): Result<RecentSearchResponse?> = runCatching {
bookService.getRecentSearches(type)
.handleBaseResponse()
.getOrThrow()
}

/** 최근 검색어 삭제 */
suspend fun deleteRecentSearch(recentSearchId: Int): Result<Unit> = runCatching {
bookService.deleteRecentSearch(recentSearchId)
.handleBaseResponse()
.getOrThrow()
}

/** 책 상세 조회 */
suspend fun getBookDetail(isbn: String): Result<BookDetailResponse?> = runCatching {
bookService.getBookDetail(isbn)
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.texthip.thip.data.repository

import com.texthip.thip.data.model.base.handleBaseResponse
import com.texthip.thip.data.model.book.response.RecentSearchResponse
import com.texthip.thip.data.service.RecentSearchService
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class RecentSearchRepository @Inject constructor(
private val recentSearchService: RecentSearchService
) {

/** 최근 검색어 조회 */
suspend fun getRecentSearches(type: String): Result<RecentSearchResponse?> = runCatching {
recentSearchService.getRecentSearches(type)
.handleBaseResponse()
.getOrThrow()
}

/** 최근 검색어 삭제 */
suspend fun deleteRecentSearch(recentSearchId: Int): Result<Unit> = runCatching {
recentSearchService.deleteRecentSearch(recentSearchId)
.handleBaseResponse()
.getOrThrow()
?: Unit
}
}
Loading