캐릭터 챗봇 #338
| @@ -57,6 +57,12 @@ class AdminChatCharacterController( | |||||||
|         val objectMapper = ObjectMapper() |         val objectMapper = ObjectMapper() | ||||||
|         val request = objectMapper.readValue(requestString, ChatCharacterRegisterRequest::class.java) |         val request = objectMapper.readValue(requestString, ChatCharacterRegisterRequest::class.java) | ||||||
|  |  | ||||||
|  |         // 외부 API 호출 전 DB에 동일한 이름이 있는지 조회 | ||||||
|  |         val existingCharacter = service.findByName(request.name) | ||||||
|  |         if (existingCharacter != null) { | ||||||
|  |             throw SodaException("동일한 이름은 등록이 불가능합니다: ${request.name}") | ||||||
|  |         } | ||||||
|  |  | ||||||
|         // 1. 외부 API 호출 |         // 1. 외부 API 호출 | ||||||
|         val characterUUID = callExternalApi(request) |         val characterUUID = callExternalApi(request) | ||||||
|  |  | ||||||
| @@ -188,6 +194,15 @@ class AdminChatCharacterController( | |||||||
|         if (hasChangedData) { |         if (hasChangedData) { | ||||||
|             val chatCharacter = service.findById(request.id) |             val chatCharacter = service.findById(request.id) | ||||||
|                 ?: throw SodaException("해당 ID의 캐릭터를 찾을 수 없습니다: ${request.id}") |                 ?: throw SodaException("해당 ID의 캐릭터를 찾을 수 없습니다: ${request.id}") | ||||||
|  |  | ||||||
|  |             // 이름이 수정된 경우 DB에 동일한 이름이 있는지 확인 | ||||||
|  |             if (request.name != null && request.name != chatCharacter.name) { | ||||||
|  |                 val existingCharacter = service.findByName(request.name) | ||||||
|  |                 if (existingCharacter != null) { | ||||||
|  |                     throw SodaException("동일한 이름은 등록이 불가능합니다: ${request.name}") | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|             callExternalApiForUpdate(chatCharacter.characterUUID, request) |             callExternalApiForUpdate(chatCharacter.characterUUID, request) | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -261,8 +276,11 @@ class AdminChatCharacterController( | |||||||
|             // 변경된 데이터만 포함하는 맵 생성 |             // 변경된 데이터만 포함하는 맵 생성 | ||||||
|             val updateData = mutableMapOf<String, Any>() |             val updateData = mutableMapOf<String, Any>() | ||||||
|  |  | ||||||
|  |             // isActive = false인 경우 처리 | ||||||
|             if (request.isActive != null && !request.isActive) { |             if (request.isActive != null && !request.isActive) { | ||||||
|                 updateData["name"] = "inactive_${request.name}" |                 val inactiveName = "inactive_${request.name}" | ||||||
|  |                 val randomSuffix = "_" + java.util.UUID.randomUUID().toString().replace("-", "") | ||||||
|  |                 updateData["name"] = inactiveName + randomSuffix | ||||||
|             } else { |             } else { | ||||||
|                 request.name?.let { updateData["name"] = it } |                 request.name?.let { updateData["name"] = it } | ||||||
|                 request.systemPrompt?.let { updateData["systemPrompt"] = it } |                 request.systemPrompt?.let { updateData["systemPrompt"] = it } | ||||||
| @@ -284,7 +302,6 @@ class AdminChatCharacterController( | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             val httpEntity = HttpEntity(updateData, headers) |             val httpEntity = HttpEntity(updateData, headers) | ||||||
|  |  | ||||||
|             val response = restTemplate.exchange( |             val response = restTemplate.exchange( | ||||||
|                 "$apiUrl/api/characters/$characterUUID", |                 "$apiUrl/api/characters/$characterUUID", | ||||||
|                 HttpMethod.PUT, |                 HttpMethod.PUT, | ||||||
|   | |||||||
| @@ -292,7 +292,10 @@ class ChatCharacterService( | |||||||
|         // isActive가 false이면 isActive = false, name = "inactive_$name"으로 변경하고 나머지는 반영하지 않는다. |         // isActive가 false이면 isActive = false, name = "inactive_$name"으로 변경하고 나머지는 반영하지 않는다. | ||||||
|         if (request.isActive != null && !request.isActive) { |         if (request.isActive != null && !request.isActive) { | ||||||
|             chatCharacter.isActive = false |             chatCharacter.isActive = false | ||||||
|             chatCharacter.name = "inactive_${chatCharacter.name}" |  | ||||||
|  |             val inactiveName = "inactive_${request.name}" | ||||||
|  |             val randomSuffix = "_" + java.util.UUID.randomUUID().toString().replace("-", "") | ||||||
|  |             chatCharacter.name = inactiveName + randomSuffix | ||||||
|  |  | ||||||
|             return saveChatCharacter(chatCharacter) |             return saveChatCharacter(chatCharacter) | ||||||
|         } |         } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user