Skip to content

Commit

Permalink
fix :: rollback serialization related trashes... it works well
Browse files Browse the repository at this point in the history
  • Loading branch information
jombidev committed Oct 7, 2024
1 parent 15df208 commit b3b6550
Show file tree
Hide file tree
Showing 24 changed files with 86 additions and 131 deletions.
18 changes: 1 addition & 17 deletions src/main/kotlin/com/teamapi/palette/PaletteApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,17 @@ package com.teamapi.palette

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import java.lang.reflect.Field
import java.lang.reflect.Modifier
import java.util.*


@SpringBootApplication
class PaletteApplication

fun removeFinalModifier(field: Field) {
val fieldAccessor = Class::class.java.declaredMethods.find { it.name == "getDeclaredFields0" } ?: throw NullPointerException()
fieldAccessor.isAccessible = true
val fields = fieldAccessor.invoke(Field::class.java, false) as Array<*>
val modifier = fields.find { (it as Field).name == "modifiers" } as? Field ?: throw NullPointerException()
modifier.isAccessible = true
modifier.setInt(field, field.modifiers and Modifier.FINAL.inv())
}

fun main(args: Array<String>) {
val `class` = Class.forName("org.springframework.http.codec.support.BaseDefaultCodecs")
val jackson2Enabled = `class`.getDeclaredField("jackson2Present")
jackson2Enabled.isAccessible = true
removeFinalModifier(jackson2Enabled)
jackson2Enabled.setBoolean(`class`, false)

TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"))

System.setProperty("org.jooq.no-logo", "true")
System.setProperty("org.jooq.no-tips", "true")

runApplication<PaletteApplication>(*args)
}
10 changes: 5 additions & 5 deletions src/main/kotlin/com/teamapi/palette/controller/ChatController.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ package com.teamapi.palette.controller
import com.teamapi.palette.annotations.SwaggerRequireAuthorize
import com.teamapi.palette.dto.request.chat.CreateChatRequest
import com.teamapi.palette.dto.request.default.DefaultPageRequest
import com.teamapi.palette.dto.response.ChatResponses.*
import com.teamapi.palette.dto.response.chat.ChatResponse
import com.teamapi.palette.dto.response.chat.ImageListResponse
import com.teamapi.palette.response.Response
import com.teamapi.palette.response.ResponseBody
import com.teamapi.palette.response.ResponseList
import com.teamapi.palette.service.ChatService
import io.swagger.v3.oas.annotations.Parameter
import kotlinx.datetime.Clock
Expand Down Expand Up @@ -34,21 +34,21 @@ class ChatController(
@PathVariable("roomId") roomId: Long,
@RequestParam(required = false) before: String = Clock.System.now().toString(),
@RequestParam(required = false) size: Long = 25
): ResponseEntity<ResponseList> {
): ResponseEntity<ResponseBody<List<ChatResponse>>> {
val data = chatService.getChatList(
roomId = roomId,
lastId = before,
size = size
)
return ResponseList.ok("채팅 조회 성공", data)
return ResponseBody.ok("채팅 조회 성공", data)
}


@PageableAsQueryParam
@GetMapping("/my-image")
suspend fun getMyImage(
@Parameter(hidden = true) pageRequest: DefaultPageRequest
): ResponseEntity<ResponseBody> {
): ResponseEntity<ResponseBody<ImageListResponse>> {
val data = chatService.getMyImage(pageRequest.page, pageRequest.size)
return ResponseBody.ok("이미지 리스트 조회 완료", ImageListResponse(data))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.teamapi.palette.controller

import com.teamapi.palette.annotations.SwaggerRequireAuthorize
import com.teamapi.palette.dto.request.user.UserUpdateRequest
import com.teamapi.palette.dto.response.user.UserResponse
import com.teamapi.palette.response.Response
import com.teamapi.palette.response.ResponseBody
import com.teamapi.palette.service.UserService
Expand All @@ -15,7 +16,7 @@ class InfoController(
private val userService: UserService
) {
@GetMapping("/me")
suspend fun myInfo(): ResponseEntity<ResponseBody> {
suspend fun myInfo(): ResponseEntity<ResponseBody<UserResponse>> {
val data = userService.me()
return ResponseBody.ok("유저 조회 성공", data)
}
Expand Down
13 changes: 7 additions & 6 deletions src/main/kotlin/com/teamapi/palette/controller/RoomController.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package com.teamapi.palette.controller

import com.teamapi.palette.annotations.SwaggerRequireAuthorize
import com.teamapi.palette.dto.request.room.UpdateRoomTitleRequest
import com.teamapi.palette.dto.response.room.QnAResponse
import com.teamapi.palette.dto.response.room.RoomResponse
import com.teamapi.palette.response.Response
import com.teamapi.palette.response.ResponseBody
import com.teamapi.palette.response.ResponseList
import com.teamapi.palette.service.RoomService
import jakarta.validation.Valid
import org.springframework.http.ResponseEntity
Expand All @@ -17,15 +18,15 @@ class RoomController(
private val roomService: RoomService
) {
@PostMapping
suspend fun createRoom(): ResponseEntity<ResponseBody> {
suspend fun createRoom(): ResponseEntity<ResponseBody<RoomResponse>> {
val data = roomService.createRoom()
return ResponseBody.ok("룸 생성 성공", data)
}

@GetMapping("/list")
suspend fun getRoomList(): ResponseEntity<ResponseList> {
suspend fun getRoomList(): ResponseEntity<ResponseBody<List<RoomResponse>>> {
val it = roomService.getRoomList()
return ResponseList.ok("룸 조회 성공", it)
return ResponseBody.ok("룸 조회 성공", it)
}

@PatchMapping("/{roomId}/title")
Expand All @@ -38,8 +39,8 @@ class RoomController(
}

@GetMapping("/{roomId}/qna")
suspend fun getQnAs(@PathVariable roomId: Long): ResponseEntity<ResponseList> {
return ResponseList.ok("룸 내 질답 리스트 조회 완료", roomService.getQnA(roomId))
suspend fun getQnAs(@PathVariable roomId: Long): ResponseEntity<ResponseBody<List<QnAResponse>>> {
return ResponseBody.ok("룸 내 질답 리스트 조회 완료", roomService.getQnA(roomId))
}

@DeleteMapping("/{roomId}")
Expand Down
25 changes: 0 additions & 25 deletions src/main/kotlin/com/teamapi/palette/dto/response/ChatResponses.kt

This file was deleted.

6 changes: 0 additions & 6 deletions src/main/kotlin/com/teamapi/palette/dto/response/Responses.kt

This file was deleted.

25 changes: 0 additions & 25 deletions src/main/kotlin/com/teamapi/palette/dto/response/RoomResponses.kt

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.teamapi.palette.dto.response.chat

import com.teamapi.palette.entity.consts.ChatState
import kotlinx.datetime.Instant
import kotlinx.serialization.Serializable

@Serializable
data class ChatResponse(
val id: String?,
val message: String?,
val resource: ChatState,
val datetime: Instant,
val roomId: Long,
val userId: Long,
val isAi: Boolean,
val promptId: String?,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.teamapi.palette.dto.response.chat

import kotlinx.serialization.Serializable

@Serializable
data class ImageListResponse(
val images: List<String>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.teamapi.palette.dto.response.room

import com.teamapi.palette.entity.consts.PromptType
import com.teamapi.palette.entity.qna.ChatAnswer
import com.teamapi.palette.entity.qna.ChatQuestion
import kotlinx.serialization.Serializable

@Serializable
data class QnAResponse(
val id: String,
val type: PromptType,
val question: ChatQuestion,
val answer: ChatAnswer?,
val promptName: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.teamapi.palette.dto.response.room

import kotlinx.serialization.Serializable

@Serializable
data class RoomResponse(
val id: Long,
val title: String?,
val message: String?
)
Original file line number Diff line number Diff line change
@@ -1,23 +1,20 @@
package com.teamapi.palette.dto.response
package com.teamapi.palette.dto.response.user

import com.teamapi.palette.entity.User
import kotlinx.datetime.LocalDate
import kotlinx.datetime.toKotlinLocalDate
import kotlinx.serialization.Serializable

@Serializable
sealed interface UserResponses : Responses {
@Serializable
data class UserResponse(
val id: Long,
val name: String,
val email: String,
val birthDate: LocalDate
) : UserResponses {
) {
companion object {
fun from(user: User): UserResponse {
return UserResponse(user.id!!, user.username, user.email, user.birthDate.toKotlinLocalDate())
}
}
}
}
4 changes: 2 additions & 2 deletions src/main/kotlin/com/teamapi/palette/entity/chat/Chat.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.teamapi.palette.entity.chat

import com.teamapi.palette.dto.response.ChatResponses
import com.teamapi.palette.dto.response.chat.ChatResponse
import com.teamapi.palette.entity.consts.ChatState
import com.teamapi.palette.repository.mongo.MongoDatabases
import com.teamapi.palette.util.InstantSerializer
Expand Down Expand Up @@ -30,7 +30,7 @@ data class Chat(
@Contextual
val promptId: ObjectId? = null
) {
fun toDto() = ChatResponses.ChatResponse(
fun toDto() = ChatResponse(
id.toString(),
message,
resource,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.teamapi.palette.repository.chat

import com.teamapi.palette.dto.response.ChatResponses.*
import com.teamapi.palette.dto.response.chat.ChatResponse
import com.teamapi.palette.entity.chat.Chat
import kotlinx.datetime.Instant
import org.springframework.data.domain.Pageable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import com.mongodb.client.model.FindOneAndReplaceOptions
import com.mongodb.client.model.Projections
import com.mongodb.client.model.ReturnDocument
import com.mongodb.kotlin.client.coroutine.MongoDatabase
import com.teamapi.palette.dto.response.ChatResponses.ChatResponse
import com.teamapi.palette.dto.response.chat.ChatResponse
import com.teamapi.palette.entity.chat.Chat
import com.teamapi.palette.entity.consts.ChatState
import com.teamapi.palette.repository.mongo.*
Expand Down
1 change: 1 addition & 0 deletions src/main/kotlin/com/teamapi/palette/response/ErrorCode.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ enum class ErrorCode(

CHAT_FILTERED(HttpStatus.BAD_REQUEST, "부적절한 내용 감지. 내용을 수정 해 주세요."),
MESSAGE_TYPE_NOT_MATCH(HttpStatus.BAD_REQUEST, "적절하지 않은 메시지 유형: '%s'. 메시지 유형 '%s'이(가) 필요합니다."),
QNA_INVALID_FULFILLED(HttpStatus.BAD_REQUEST, "이미 모든 질문에 대해 대답하였습니다."),
QNA_INVALID_CHOICES(HttpStatus.BAD_REQUEST, "적절하지 않은 선택: '%s'. %s 선택지 중 하나가 필요합니다."),
QNA_INVALID_GRID_CHOICES(HttpStatus.BAD_REQUEST, "적절하지 않은 그리드: (%s). 0~%d 선택지 중 하나가 필요합니다."),
QNA_INVALID_GRID_DUPE(HttpStatus.BAD_REQUEST, "적절하지 않은 그리드: 중복이 없어야 합니다. possible dupes: (%s)"),
Expand Down
13 changes: 6 additions & 7 deletions src/main/kotlin/com/teamapi/palette/response/ResponseBody.kt
Original file line number Diff line number Diff line change
@@ -1,22 +1,21 @@
package com.teamapi.palette.response

import com.teamapi.palette.dto.response.Responses
import kotlinx.serialization.Serializable
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity

@Serializable
class ResponseBody(
class ResponseBody<T : Any>(
override val code: Int,
override val message: String,
val data: Responses,
val data: T,
) : BaseResponse {
companion object {
fun of(code: HttpStatus, message: String, data: Responses): ResponseEntity<ResponseBody> =
fun <T : Any> of(code: HttpStatus, message: String, data: T): ResponseEntity<ResponseBody<T>> =
ResponseEntity.status(code).body(ResponseBody(code.value(), message, data))

fun ok(message: String, data: Responses) = of(HttpStatus.OK, message, data)
fun created(message: String, data: Responses) = of(HttpStatus.CREATED, message, data)
fun noContent(message: String, data: Responses) = of(HttpStatus.NO_CONTENT, message, data)
fun <T : Any> ok(message: String, data: T) = of(HttpStatus.OK, message, data)
fun <T : Any> created(message: String, data: T) = of(HttpStatus.CREATED, message, data)
fun <T : Any> noContent(message: String, data: T) = of(HttpStatus.NO_CONTENT, message, data)
}
}
20 changes: 0 additions & 20 deletions src/main/kotlin/com/teamapi/palette/response/ResponseList.kt

This file was deleted.

7 changes: 2 additions & 5 deletions src/main/kotlin/com/teamapi/palette/service/ChatService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import com.azure.ai.openai.models.ChatCompletions
import com.azure.ai.openai.models.ChatCompletionsOptions
import com.azure.ai.openai.models.ChatRequestSystemMessage
import com.azure.ai.openai.models.ChatRequestUserMessage
import com.teamapi.palette.dto.response.ChatResponses.ChatResponse
import com.teamapi.palette.dto.response.chat.ChatResponse
import com.teamapi.palette.entity.chat.Chat
import com.teamapi.palette.entity.consts.ChatState
import com.teamapi.palette.entity.qna.ChatAnswer
Expand Down Expand Up @@ -47,10 +47,7 @@ class ChatService(
room.validateUser(sessionHolder)

var toBeResolved = qnaRepository.getQnAByRoomId(room.id!!)!!
val pendingQuestion = getPendingQuestion(toBeResolved) ?: kotlin.run {
log.error("no qna list in room '{}'.", room.id)
throw CustomException(ErrorCode.INTERNAL_SERVER_EXCEPTION)
}
val pendingQuestion = getPendingQuestion(toBeResolved) ?: throw CustomException(ErrorCode.QNA_INVALID_FULFILLED)
if (pendingQuestion.type != message.type)
throw CustomException(ErrorCode.MESSAGE_TYPE_NOT_MATCH, message.type.name, pendingQuestion.type.name)

Expand Down
3 changes: 2 additions & 1 deletion src/main/kotlin/com/teamapi/palette/service/RoomService.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.teamapi.palette.service

import com.teamapi.palette.dto.response.RoomResponses.*
import com.teamapi.palette.dto.response.room.QnAResponse
import com.teamapi.palette.dto.response.room.RoomResponse
import com.teamapi.palette.entity.Room
import com.teamapi.palette.entity.chat.Chat
import com.teamapi.palette.entity.consts.ChatState
Expand Down
Loading

0 comments on commit b3b6550

Please sign in to comment.