Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
9efd7d1
fix(friend): 친구 검색 및 신청 로직 수정
se05503 Feb 14, 2026
cac0c20
feat(friend): 친구 검색 로직 개선
se05503 Feb 14, 2026
dd64b34
feat(friend): 친구 레벨 연결, UI 개선
se05503 Feb 14, 2026
aadd668
design(square): 플로팅 버튼 UI 변경
se05503 Feb 15, 2026
5e9ba6d
feat(question): 나의 답변 기록이 없는 경우 UI 처리
se05503 Feb 15, 2026
93a28ee
design(question): 전체 유저의 답변 화면 UI 수정
se05503 Feb 15, 2026
189375d
fix(question): 나의 답변 기록 오류 해결
se05503 Feb 15, 2026
6c844b3
refactor(square): PagingSource 개선
se05503 Feb 15, 2026
4e1e56e
design(square): 광장 메인 화면 친구 답변 UI 수정
se05503 Feb 15, 2026
4d7640a
design(square): 전체 유저의 답변 UI 수정
se05503 Feb 15, 2026
233822a
feat(question): 답변 신고 API 연결
se05503 Feb 15, 2026
b163c58
design(letter): 내가 쓴 편지가 없는 경우 플레이스홀더 UI 수정
se05503 Feb 16, 2026
6bd93e7
feat(letter): 편지 쓰기 UI 관련 기능 개선
se05503 Feb 16, 2026
e1197a3
fix(letter): 편지 전송 오류
se05503 Feb 16, 2026
c590f31
feat(letter): 답장을 미루는 편지 목록 조회 API 연결
se05503 Feb 16, 2026
5f782da
feat(letter): 편지지 색상 추가, 편지 상세 보기
se05503 Feb 17, 2026
cb1a17a
feat(letter): 당일 편지 작성 횟수 1회 제한
se05503 Feb 17, 2026
4775aaa
feat(letter): 편지 신고하기 API 연결
se05503 Feb 17, 2026
fb3f154
feat(letter): 편지 답장 기능 개선
se05503 Feb 18, 2026
faf6257
feat(letter): 나에게 온 답장 추가 정보 표시
se05503 Feb 19, 2026
2237b69
design(square): 메인 화면 여백 늘리기
se05503 Feb 19, 2026
bf56f2f
feat(letter): 내가 쓴 편지 중에 답장 여부 UI 구분
se05503 Feb 19, 2026
1838a3d
test(egoroom): 일간 칭찬서, 주간 칭찬서 목데이터 추가
se05503 Feb 19, 2026
ad82a2f
design(statistics): 통계 목데이터 추가
se05503 Feb 19, 2026
e3629b6
feat(letters): 편지 전송 UI 변경
se05503 Feb 19, 2026
e5231db
Merge remote-tracking branch 'origin/develop' into feat/counseling
se05503 Feb 19, 2026
edb1edc
remove: 아이콘 삭제
se05503 Feb 19, 2026
1bfba75
design(square): 광장 오늘의 질문 여백 추가
se05503 Feb 19, 2026
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
24 changes: 22 additions & 2 deletions app/src/main/java/com/egobook/app/data/api/LetterApiService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ package com.egobook.app.data.api

import com.egobook.app.data.model.ApiResponse
import com.egobook.app.data.model.square.letter.ArrivedPendingLetterResponse
import com.egobook.app.data.model.square.letter.DeferredLettersResponse
import com.egobook.app.data.model.square.letter.ReceivedRepliesResponse
import com.egobook.app.data.model.square.letter.ReplyLetterRequest
import com.egobook.app.data.model.square.letter.ReplyLetterResponse
import com.egobook.app.data.model.square.letter.ReportLetterRequest
import com.egobook.app.data.model.square.letter.ReportContentRequest
import com.egobook.app.data.model.square.letter.SendLetterRequest
import com.egobook.app.data.model.square.letter.SendLetterResponse
import com.egobook.app.data.model.square.letter.SentLetterResponse
Expand Down Expand Up @@ -53,11 +55,29 @@ interface LetterApiService {
@POST("/plaza/letters/{replyId}/report")
suspend fun reportRepliedLetter(
@Path("replyId") replyId: Long,
@Body request: ReportLetterRequest
@Body request: ReportContentRequest
): ApiResponse<Unit>

@POST("/plaza/letters/{letterId}/report")
suspend fun reportArrivedLetter(
@Path("letterId") letterId: Long,
@Body request: ReportContentRequest
): ApiResponse<Unit>

@DELETE("/plaza/letters/threads/{threadId}")
suspend fun deleteLetterThread(
@Path("threadId") threadId: Long
): ApiResponse<Unit>

@GET("/plaza/letters/inbox/deferred")
suspend fun fetchDeferredLetters(
@Query("page") page: Int,
@Query("size") size: Int
): ApiResponse<DeferredLettersResponse>

@GET("/plaza/letters/replies/received")
suspend fun fetchReceivedReplies(
@Query("page") page: Int,
@Query("size") size: Int
): ApiResponse<ReceivedRepliesResponse>
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.egobook.app.data.api

import com.egobook.app.data.model.ApiResponse
import com.egobook.app.data.model.square.letter.ReportContentRequest
import com.egobook.app.data.model.square.question.UserTodayQuestionAnswerResponse
import com.egobook.app.data.model.square.question.MyTodayQuestionAnswerResponse
import com.egobook.app.data.model.square.question.TodayAnswerRequest
Expand Down Expand Up @@ -48,4 +49,10 @@ interface QuestionApiService {
@Path("answerId") answerId: Long
): ApiResponse<Unit>

@POST("/questions/answers/{answerId}/report")
suspend fun reportTodayQuestionAnswer(
@Path("answerId") answerId: Long,
@Body request: ReportContentRequest
): ApiResponse<Unit>

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ data class FriendRequestResponse(
val userId: Long,
@SerializedName("nickname")
val nickname: String,
@SerializedName("level")
val level: Long,
@SerializedName("requestedAt")
val requestedAt: String
)
Expand All @@ -18,5 +20,6 @@ fun FriendRequestResponse.toDomain(): FriendRequest = FriendRequest(
requestId = requestId,
userId = userId,
nickname = nickname,
level = level,
requestedAt = requestedAt
)
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ data class SearchUserResponse(
@SerializedName("level")
val level: Long,
@SerializedName("profileImageUrl")
val profileImageUrl: String
val profileImageUrl: String? = null
)

fun SearchUserResponse.toDomain(): SearchUser = SearchUser(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ data class ArrivedPendingLetterItemResponse(
@SerializedName("mode")
val mode: LetterMode,
@SerializedName("fromLabel")
val fromLabel: String, // 무슨 필드인지 의미 잘 모르겠음
val fromLabel: String,
@SerializedName("content")
val content: String,
@SerializedName("arrivedAt")
val arrivedAt: String,
@SerializedName("replyDeadlineAt")
val replyDeadlineAt: String,
@SerializedName("letterColor")
val letterColor: LetterBackgroundColor // TODO: 백엔드한테 필드 넣어달라고 하기
@SerializedName("backgroundColor")
val backgroundColor: LetterBackgroundColor
)

fun ArrivedPendingLetterResponse.toDomain(): ArrivedPendingLetter = ArrivedPendingLetter(
Expand All @@ -43,5 +43,5 @@ fun ArrivedPendingLetterItemResponse.toDomain(): ArrivedPendingLetterItem = Arri
content = content,
arrivedAt = arrivedAt,
replyDeadlineAt = replyDeadlineAt,
letterColor = letterColor
backgroundColor = backgroundColor
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.egobook.app.data.model.square.letter

import com.egobook.app.domain.model.square.letter.DeferredLetter
import com.egobook.app.domain.model.square.letter.LetterBackgroundColor
import com.egobook.app.domain.model.square.letter.LetterMode
import com.egobook.app.domain.model.square.letter.LetterStatus
import com.google.gson.annotations.SerializedName

data class DeferredLettersResponse(
@SerializedName("content")
val content: List<DeferredLetterResponse>,
@SerializedName("page")
val page: Int,
@SerializedName("size")
val size: Int,
@SerializedName("hasNext")
val hasNext: Boolean
)

data class DeferredLetterResponse(
@SerializedName("letterId")
val letterId: Long,
@SerializedName("status")
val status: LetterStatus,
@SerializedName("mode")
val mode: LetterMode,
@SerializedName("fromLabel")
val fromLabel: String,
@SerializedName("backgroundColor")
val backgroundColor: LetterBackgroundColor,
@SerializedName("contentPreview")
val contentPreview: String,
@SerializedName("arrivedAt")
val arrivedAt: String,
@SerializedName("replyDeadlineAt")
val replyDeadlineAt: String
)

fun DeferredLetterResponse.toDomain(): DeferredLetter = DeferredLetter(
letterId = letterId,
status = status,
mode = mode,
fromLabel = fromLabel,
backgroundColor = backgroundColor,
contentPreview = contentPreview,
arrivedAt = arrivedAt,
replyDeadlineAt = replyDeadlineAt
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ data class DetectAbusiveContentResponse(
@SerializedName("text")
val text: String,
@SerializedName("percentage")
val percentage: Double,
val riskScore: Double,
@SerializedName("is_harmful")
val isHarmful: Boolean,
@SerializedName("label")
Expand All @@ -18,7 +18,7 @@ data class DetectAbusiveContentResponse(

fun DetectAbusiveContentResponse.toDomain(): AbusiveContentAnalysis = AbusiveContentAnalysis(
text = text,
riskScore = percentage,
riskScore = riskScore,
isHarmful = isHarmful,
label = label,
detectedBadWords = badWords
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.egobook.app.data.model.square.letter

import com.egobook.app.domain.model.square.letter.LetterBackgroundColor
import com.egobook.app.domain.model.square.letter.LetterMode
import com.egobook.app.domain.model.square.letter.ReceivedReplies
import com.egobook.app.domain.model.square.letter.ReceivedReply
import com.google.gson.annotations.SerializedName

data class ReceivedRepliesResponse(
@SerializedName("content")
val content: List<ReceivedReplyResponse>,
@SerializedName("page")
val page: Int,
@SerializedName("size")
val size: Int,
@SerializedName("hasNext")
val hasNext: Boolean
)

data class ReceivedReplyResponse(
@SerializedName("letterId")
val letterId: Long,
@SerializedName("replyId")
val replyId: Long,
@SerializedName("threadId")
val threadId: Long,
@SerializedName("replyText")
val replyContent: String,
@SerializedName("repliedAt")
val repliedAt: String,
@SerializedName("aiGenerated")
val isAIGenerated: Boolean,
@SerializedName("reported")
val isReported: Boolean,
@SerializedName("mode")
val mode: LetterMode,
@SerializedName("fromLabel")
val fromLabel: String,
@SerializedName("backgroundColor")
val letterColor: LetterBackgroundColor
)

fun ReceivedRepliesResponse.toDomain() = ReceivedReplies(
content = content.map { it.toDomain() },
page = page,
size = size,
hasNext = hasNext
)

fun ReceivedReplyResponse.toDomain(): ReceivedReply = ReceivedReply(
letterId = letterId,
replyId = replyId,
threadId = threadId,
replyContent = replyContent,
repliedAt = repliedAt,
isAIGenerated = isAIGenerated,
isReported = isReported,
mode = mode,
fromLabel = fromLabel,
letterColor = letterColor
)
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package com.egobook.app.data.model.square.letter

import com.egobook.app.domain.model.square.letter.ReportLetter
import com.egobook.app.domain.model.square.letter.ReportContent
import com.egobook.app.domain.model.square.letter.ReportLetterType
import com.google.gson.annotations.SerializedName

data class ReportLetterRequest(
data class ReportContentRequest(
@SerializedName("reason")
val reason: ReportLetterType,
@SerializedName("description")
val description: String? = null
)

fun ReportLetter.toData(): ReportLetterRequest = ReportLetterRequest(
fun ReportContent.toData(): ReportContentRequest = ReportContentRequest(
reason = reason,
description = description
)
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ data class SentLetterWithReplyResponse(
val createdAt: String,
@SerializedName("arrivedAt")
val arrivedAt: String,
@SerializedName("fromLabel")
val fromLabel: String,
@SerializedName("reply")
val reply: LetterReplyResponse? = null
)
Expand Down Expand Up @@ -58,5 +60,6 @@ fun SentLetterWithReplyResponse.toDomain(): SentLetterWithReply = SentLetterWith
backgroundColor = backgroundColor,
createdAt = createdAt,
arrivedAt = arrivedAt,
fromLabel = fromLabel,
reply = reply?.toDomain()
)
Loading