Skip to content

Commit f555c37

Browse files
authored
Merge pull request #134 from Nico1eKim/api/#133-group_note_edit
[API] 기록장 기록, 투표 수정
2 parents 0b74fbb + 5b0c1ae commit f555c37

23 files changed

Lines changed: 485 additions & 123 deletions
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.texthip.thip.data.model.rooms.request
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class RoomsPatchRecordRequest(
7+
val content: String
8+
)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.texthip.thip.data.model.rooms.request
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class RoomsPatchVoteRequest(
7+
val content: String,
8+
)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.texthip.thip.data.model.rooms.response
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class RoomsPatchRecordResponse(
7+
val roomId: Int
8+
)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.texthip.thip.data.model.rooms.response
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class RoomsPatchVoteResponse(
7+
val roomId: Int,
8+
)

app/src/main/java/com/texthip/thip/data/model/rooms/response/RoomsPostsResponse.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,6 @@ data class PostList(
3535
data class VoteItems(
3636
val voteItemId: Int,
3737
val itemName: String,
38-
val percentage: Int,
38+
val count: Int,
3939
val isVoted: Boolean,
4040
)

app/src/main/java/com/texthip/thip/data/repository/RoomsRepository.kt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import com.texthip.thip.data.model.rooms.request.RoomJoinRequest
99
import com.texthip.thip.data.model.rooms.request.RoomSecretRoomRequest
1010
import com.texthip.thip.data.model.rooms.request.RoomsCreateDailyGreetingRequest
1111
import com.texthip.thip.data.model.rooms.request.RoomsCreateVoteRequest
12+
import com.texthip.thip.data.model.rooms.request.RoomsPatchRecordRequest
13+
import com.texthip.thip.data.model.rooms.request.RoomsPatchVoteRequest
1214
import com.texthip.thip.data.model.rooms.request.RoomsPostsLikesRequest
1315
import com.texthip.thip.data.model.rooms.request.RoomsRecordRequest
1416
import com.texthip.thip.data.model.rooms.request.RoomsVoteRequest
@@ -316,4 +318,32 @@ class RoomsRepository @Inject constructor(
316318
roomId = roomId,
317319
).handleBaseResponse().getOrThrow()
318320
}
321+
322+
suspend fun patchRoomsRecord(
323+
roomId: Int,
324+
recordId: Int,
325+
content: String
326+
) = runCatching {
327+
roomsService.patchRoomsRecord(
328+
roomId = roomId,
329+
recordId = recordId,
330+
request = RoomsPatchRecordRequest(
331+
content = content
332+
)
333+
).handleBaseResponse().getOrThrow()
334+
}
335+
336+
suspend fun patchRoomsVote(
337+
roomId: Int,
338+
voteId: Int,
339+
content: String,
340+
) = runCatching {
341+
roomsService.patchRoomsVote(
342+
roomId = roomId,
343+
voteId = voteId,
344+
request = RoomsPatchVoteRequest(
345+
content = content,
346+
)
347+
).handleBaseResponse().getOrThrow()
348+
}
319349
}

app/src/main/java/com/texthip/thip/data/service/RoomsService.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import com.texthip.thip.data.model.rooms.request.RoomJoinRequest
66
import com.texthip.thip.data.model.rooms.request.RoomSecretRoomRequest
77
import com.texthip.thip.data.model.rooms.request.RoomsCreateDailyGreetingRequest
88
import com.texthip.thip.data.model.rooms.request.RoomsCreateVoteRequest
9+
import com.texthip.thip.data.model.rooms.request.RoomsPatchRecordRequest
10+
import com.texthip.thip.data.model.rooms.request.RoomsPatchVoteRequest
911
import com.texthip.thip.data.model.rooms.request.RoomsPostsLikesRequest
1012
import com.texthip.thip.data.model.rooms.request.RoomsRecordRequest
1113
import com.texthip.thip.data.model.rooms.request.RoomsVoteRequest
@@ -24,6 +26,8 @@ import com.texthip.thip.data.model.rooms.response.RoomsDailyGreetingResponse
2426
import com.texthip.thip.data.model.rooms.response.RoomsDeleteDailyGreetingResponse
2527
import com.texthip.thip.data.model.rooms.response.RoomsDeleteRecordResponse
2628
import com.texthip.thip.data.model.rooms.response.RoomsDeleteVoteResponse
29+
import com.texthip.thip.data.model.rooms.response.RoomsPatchRecordResponse
30+
import com.texthip.thip.data.model.rooms.response.RoomsPatchVoteResponse
2731
import com.texthip.thip.data.model.rooms.response.RoomsPlayingResponse
2832
import com.texthip.thip.data.model.rooms.response.RoomsPostsLikesResponse
2933
import com.texthip.thip.data.model.rooms.response.RoomsPostsResponse
@@ -35,6 +39,7 @@ import com.texthip.thip.data.model.rooms.response.RoomsVoteResponse
3539
import retrofit2.http.Body
3640
import retrofit2.http.DELETE
3741
import retrofit2.http.GET
42+
import retrofit2.http.PATCH
3843
import retrofit2.http.POST
3944
import retrofit2.http.Path
4045
import retrofit2.http.Query
@@ -195,4 +200,18 @@ interface RoomsService {
195200
suspend fun leaveRoom(
196201
@Path("roomId") roomId: Int
197202
): BaseResponse<Unit>
203+
204+
@PATCH("rooms/{roomId}/records/{recordId}")
205+
suspend fun patchRoomsRecord(
206+
@Path("roomId") roomId: Int,
207+
@Path("recordId") recordId: Int,
208+
@Body request: RoomsPatchRecordRequest
209+
): BaseResponse<RoomsPatchRecordResponse>
210+
211+
@PATCH("rooms/{roomId}/votes/{voteId}")
212+
suspend fun patchRoomsVote(
213+
@Path("roomId") roomId: Int,
214+
@Path("voteId") voteId: Int,
215+
@Body request: RoomsPatchVoteRequest
216+
): BaseResponse<RoomsPatchVoteResponse>
198217
}

app/src/main/java/com/texthip/thip/ui/common/buttons/GroupVoteButton.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,19 @@ fun GroupVoteButton(
3939
hasVoted: Boolean = false, // 투표 여부
4040
onOptionSelected: (Int?) -> Unit
4141
) {
42+
val totalVotes = voteItems.sumOf { it.count }
43+
4244
Column(
4345
modifier = modifier.fillMaxWidth(),
4446
verticalArrangement = Arrangement.spacedBy(10.dp)
4547
) {
4648
voteItems.forEachIndexed { index, item ->
4749
val isSelected = selectedIndex == index
48-
val votePercent = if (hasVoted) item.percentage.coerceIn(0, 100) else 0
50+
val votePercent = if (totalVotes > 0) {
51+
(item.count.toFloat() / totalVotes * 100).toInt()
52+
} else {
53+
0
54+
}
4955

5056
val animatedPercent by animateFloatAsState(
5157
targetValue = votePercent / 100f,
@@ -104,7 +110,7 @@ fun GroupVoteButton(
104110
)
105111
if (hasVoted) {
106112
Text(
107-
text = "${item.percentage}%",
113+
text = "${item.count}",
108114
color = textColor,
109115
style = fontStyle
110116
)

app/src/main/java/com/texthip/thip/ui/common/forms/BookPageTextField.kt

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,12 @@ fun BookPageTextField(
4646
modifier: Modifier = Modifier,
4747
bookTotalPage: Int,
4848
enabled: Boolean = true,
49+
readOnly: Boolean = false,
4950
text: String,
5051
isError: Boolean,
5152
onValueChange: (String) -> Unit,
5253
showClearButton: Boolean = true,
54+
showTotalPage: Boolean = true
5355
) {
5456
var hasFocusCleared by remember(text) { mutableStateOf(false) }
5557

@@ -62,23 +64,30 @@ fun BookPageTextField(
6264
}
6365
},
6466
enabled = enabled,
65-
visualTransformation = if (enabled) {
67+
readOnly = readOnly,
68+
visualTransformation = if (showTotalPage) {
6669
SuffixTransformation("/${bookTotalPage}p", colors.Grey02)
6770
} else {
6871
VisualTransformation.None
6972
},
7073
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
7174
modifier = modifier
7275
.size(width = 320.dp, height = 48.dp)
73-
.onFocusChanged { focusState ->
74-
if (focusState.isFocused && !hasFocusCleared && text.isNotEmpty()) {
75-
hasFocusCleared = true
76-
onValueChange("")
77-
}
78-
if (!focusState.isFocused) {
79-
hasFocusCleared = false
76+
.then(
77+
if (enabled) {
78+
Modifier.onFocusChanged { focusState ->
79+
if (focusState.isFocused && !hasFocusCleared && text.isNotEmpty()) {
80+
hasFocusCleared = true
81+
onValueChange("")
82+
}
83+
if (!focusState.isFocused) {
84+
hasFocusCleared = false
85+
}
86+
}
87+
} else {
88+
Modifier
8089
}
81-
}
90+
)
8291
.then(
8392
if (isError)
8493
Modifier.border(

app/src/main/java/com/texthip/thip/ui/common/forms/BorderedTextField.kt

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ fun BorderedTextField(
3838
hint: String,
3939
text: String,
4040
canRemove: Boolean = true,
41+
isEnabled: Boolean = true,
4142
onTextChange: (String) -> Unit,
4243
onDelete: () -> Unit,
4344
onRemoveField: () -> Unit
@@ -46,11 +47,15 @@ fun BorderedTextField(
4647
val interactionSource = remember { MutableInteractionSource() }
4748
val isFocused by interactionSource.collectIsFocusedAsState()
4849

49-
val iconRes = when {
50-
isFocused && text.isEmpty() -> R.drawable.ic_x_circle_darkgrey
51-
isFocused && text.isNotEmpty() -> R.drawable.ic_x_circle_grey
52-
!isFocused && canRemove -> R.drawable.ic_delete
53-
else -> null
50+
val iconRes = if (isEnabled) {
51+
when {
52+
isFocused && text.isEmpty() -> R.drawable.ic_x_circle_darkgrey
53+
isFocused && text.isNotEmpty() -> R.drawable.ic_x_circle_grey
54+
!isFocused && canRemove -> R.drawable.ic_delete
55+
else -> null
56+
}
57+
} else {
58+
null
5459
}
5560

5661
val iconEnabled = when (iconRes) {
@@ -74,6 +79,7 @@ fun BorderedTextField(
7479
BasicTextField(
7580
value = text,
7681
onValueChange = onTextChange,
82+
enabled = isEnabled,
7783
textStyle = myStyle.copy(color = colors.White),
7884
singleLine = true,
7985
modifier = Modifier

0 commit comments

Comments
 (0)