Skip to content

Commit

Permalink
Merge pull request #107 from SUIN-BUNDANG-LINE/SBL-225-ai-generate-log
Browse files Browse the repository at this point in the history
[SBL-225] AI 초안 생성 로그를 저장하도록 수정
  • Loading branch information
JeongHunHui authored Nov 6, 2024
2 parents 1d263aa + ac86320 commit 7ccbb8c
Show file tree
Hide file tree
Showing 7 changed files with 132 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import org.springframework.stereotype.Component
import java.util.UUID

@Component
class AILogAdapter(
class AIEditLogAdapter(
private val aiEditLogRepository: AIEditLogRepository,
) {
fun saveEditLog(aiEditLog: AIEditLog) =
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.sbl.sulmun2yong.ai.adapter

import com.sbl.sulmun2yong.ai.domain.AIGenerateLog
import com.sbl.sulmun2yong.ai.entity.AIGenerateLogDocument
import com.sbl.sulmun2yong.ai.repository.AIGenerateLogRepository
import org.springframework.stereotype.Component

@Component
class AIGenerateLogAdapter(
private val aiGenerateLogRepository: AIGenerateLogRepository,
) {
fun saveGenerateLog(aiGenerateLog: AIGenerateLog) =
aiGenerateLogRepository.save(
AIGenerateLogDocument.from(
aiGenerateLog,
),
)
}
15 changes: 15 additions & 0 deletions src/main/kotlin/com/sbl/sulmun2yong/ai/domain/AIGenerateLog.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.sbl.sulmun2yong.ai.domain

import java.util.UUID

class AIGenerateLog(
val id: UUID,
val surveyId: UUID,
val makerId: UUID?,
val userPrompt: String,
val fileUrl: String?,
val target: String,
val groupName: String,
val generatedSurvey: AIGeneratedSurvey,
val visitorId: String?,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.sbl.sulmun2yong.ai.entity

import com.sbl.sulmun2yong.ai.domain.AIGenerateLog
import com.sbl.sulmun2yong.ai.domain.AIGeneratedSurvey
import com.sbl.sulmun2yong.global.entity.BaseTimeDocument
import org.springframework.data.annotation.Id
import org.springframework.data.mongodb.core.mapping.Document
import java.util.UUID

@Document(collection = "aiGenerateLogs")
data class AIGenerateLogDocument(
@Id
val id: UUID,
val surveyId: UUID,
val makerId: UUID?,
val userPrompt: String,
val fileUrl: String?,
val target: String,
val groupName: String,
val generatedSurvey: AIGeneratedSurvey,
val visitorId: String?,
) : BaseTimeDocument() {
companion object {
fun from(aIGenerateLog: AIGenerateLog) =
AIGenerateLogDocument(
id = aIGenerateLog.id,
surveyId = aIGenerateLog.surveyId,
makerId = aIGenerateLog.makerId,
userPrompt = aIGenerateLog.userPrompt,
fileUrl = aIGenerateLog.fileUrl,
target = aIGenerateLog.target,
groupName = aIGenerateLog.groupName,
generatedSurvey = aIGenerateLog.generatedSurvey,
visitorId = aIGenerateLog.visitorId,
)
}

fun toDomain() =
AIGenerateLog(
id = this.id,
surveyId = this.surveyId,
makerId = this.makerId,
userPrompt = this.userPrompt,
fileUrl = this.fileUrl,
target = this.target,
groupName = this.groupName,
generatedSurvey = this.generatedSurvey,
visitorId = this.visitorId,
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.sbl.sulmun2yong.ai.repository

import com.sbl.sulmun2yong.ai.entity.AIGenerateLogDocument
import org.springframework.data.mongodb.repository.MongoRepository
import org.springframework.stereotype.Component
import java.util.UUID

@Component
interface AIGenerateLogRepository : MongoRepository<AIGenerateLogDocument, UUID>
4 changes: 2 additions & 2 deletions src/main/kotlin/com/sbl/sulmun2yong/ai/service/ChatService.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.sbl.sulmun2yong.ai.service

import com.sbl.sulmun2yong.ai.adapter.AILogAdapter
import com.sbl.sulmun2yong.ai.adapter.AIEditLogAdapter
import com.sbl.sulmun2yong.ai.adapter.ChatAdapter
import com.sbl.sulmun2yong.ai.domain.AIEditLog
import com.sbl.sulmun2yong.ai.dto.request.EditSurveyDataWithChatRequest
Expand All @@ -15,7 +15,7 @@ import java.util.UUID
class ChatService(
private val surveyAdapter: SurveyAdapter,
private val chatAdapter: ChatAdapter,
private val aiLogAdapter: AILogAdapter,
private val aiLogAdapter: AIEditLogAdapter,
) {
fun editSurveyDataWithChat(
makerId: UUID,
Expand Down
41 changes: 37 additions & 4 deletions src/main/kotlin/com/sbl/sulmun2yong/ai/service/GenerateService.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.sbl.sulmun2yong.ai.service

import com.sbl.sulmun2yong.ai.adapter.AIDemoCountRedisAdapter
import com.sbl.sulmun2yong.ai.adapter.AIGenerateLogAdapter
import com.sbl.sulmun2yong.ai.adapter.GenerateAdapter
import com.sbl.sulmun2yong.ai.domain.AIGenerateLog
import com.sbl.sulmun2yong.ai.dto.request.DemoSurveyGenerationWithFileUrlRequest
import com.sbl.sulmun2yong.ai.dto.request.SurveyGenerationWithFileUrlRequest
import com.sbl.sulmun2yong.ai.dto.response.AISurveyGenerationResponse
Expand All @@ -18,6 +20,7 @@ class GenerateService(
private val generateAdapter: GenerateAdapter,
private val surveyAdapter: SurveyAdapter,
private val aiDemoCountRedisAdapter: AIDemoCountRedisAdapter,
private val aiGenerateLogAdapter: AIGenerateLogAdapter,
val fingerprintApi: FingerprintApi,
) {
fun generateSurveyWithFileUrl(
Expand All @@ -34,16 +37,31 @@ class GenerateService(

val survey = surveyAdapter.getByIdAndMakerId(surveyId, makerId)

return AISurveyGenerationResponse.from(
val generatedSurvey =
generateAdapter.requestSurveyGenerationWithFileUrl(
surveyId,
target,
groupName,
fileUrl,
userPrompt,
survey,
)

aiGenerateLogAdapter.saveGenerateLog(
AIGenerateLog(
id = UUID.randomUUID(),
surveyId = surveyId,
makerId = makerId,
userPrompt = userPrompt,
fileUrl = fileUrl,
target = target,
groupName = groupName,
generatedSurvey = generatedSurvey,
visitorId = null,
),
)

return AISurveyGenerationResponse.from(generatedSurvey)
}

fun generateDemoSurveyWithFileUrl(
Expand All @@ -59,11 +77,26 @@ class GenerateService(
fingerprintApi.validateVisitorId(visitorId)
aiDemoCountRedisAdapter.incrementOrCreate(visitorId)

val survey = Survey.create(UUID.randomUUID())
val surveyId = UUID.randomUUID()
val survey = Survey.create(surveyId)

val generatedSurvey = generateAdapter.requestSurveyGenerationWithFileUrl(null, target, groupName, fileUrl, userPrompt, survey)

return AISurveyGenerationResponse.from(
generateAdapter.requestSurveyGenerationWithFileUrl(null, target, groupName, fileUrl, userPrompt, survey),
aiGenerateLogAdapter.saveGenerateLog(
AIGenerateLog(
id = UUID.randomUUID(),
surveyId = surveyId,
makerId = null,
userPrompt = userPrompt,
fileUrl = fileUrl,
target = target,
groupName = groupName,
generatedSurvey = generatedSurvey,
visitorId = visitorId,
),
)

return AISurveyGenerationResponse.from(generatedSurvey)
}

private fun validateFileUrl(fileUrl: String?) {
Expand Down

0 comments on commit 7ccbb8c

Please sign in to comment.