diff --git a/app/src/main/java/com/example/projetosaveit/api/network/ApiService.kt b/app/src/main/java/com/example/projetosaveit/api/network/ApiService.kt index 5df504e..f15724c 100644 --- a/app/src/main/java/com/example/projetosaveit/api/network/ApiService.kt +++ b/app/src/main/java/com/example/projetosaveit/api/network/ApiService.kt @@ -14,14 +14,11 @@ import com.example.projetosaveit.model.EmpresaInsertDTO import com.example.projetosaveit.model.EstoqueDTO import com.example.projetosaveit.model.FuncionarioDTO import com.example.projetosaveit.model.FuncionarioInsertDTO -import com.example.projetosaveit.model.HistoricoResponse -import com.example.projetosaveit.model.HistoricoSessaoRequest -//import com.example.projetosaveit.model.HistoricoResponse +import com.example.projetosaveit.model.HistoricoFuncionarioResponse +import com.example.projetosaveit.model.HistoricoSessaoResponse import com.example.projetosaveit.model.ImagemDTO import com.example.projetosaveit.model.IniciarChatRequest import com.example.projetosaveit.model.IniciarChatResponse -//import com.example.projetosaveit.model.IniciarChatRequest -//import com.example.projetosaveit.model.IniciarChatResponse import com.example.projetosaveit.model.LoteDTO import com.example.projetosaveit.model.LoteInsertDTO import com.example.projetosaveit.model.ProdutoInfoDTO @@ -157,9 +154,12 @@ interface ApiService { @POST("executar_fluxo") fun enviarMensagem(@Body request: ChatRequest): Call - @POST("historico_funcionario") - fun obterHistoricoFuncionario(@Body request: Map): Call + @GET("historico_funcionario") + fun obterHistoricoFuncionario(@Query("funcionario_id") funcionarioId: Int): Call - @POST("historico_sessao") - fun obterHistoricoSessao(@Body request: HistoricoSessaoRequest): Call + @GET("historico_sessao") + fun obterHistoricoSessao( + @Query("funcionario_id") funcionarioId: Int, + @Query("session_id") sessionId: String + ): Call } \ No newline at end of file diff --git a/app/src/main/java/com/example/projetosaveit/api/network/ChatBotClient.kt b/app/src/main/java/com/example/projetosaveit/api/network/ChatBotClient.kt index 427e22c..ce0e338 100644 --- a/app/src/main/java/com/example/projetosaveit/api/network/ChatBotClient.kt +++ b/app/src/main/java/com/example/projetosaveit/api/network/ChatBotClient.kt @@ -6,7 +6,7 @@ import retrofit2.converter.gson.GsonConverterFactory import java.util.concurrent.TimeUnit object ChatBotClient { - private const val BASE_URL = "http://3.92.141.56:8000" + private const val BASE_URL = "http://98.91.17.130:8000" val okHttpClient = OkHttpClient.Builder() .connectTimeout(20, TimeUnit.SECONDS) diff --git a/app/src/main/java/com/example/projetosaveit/api/repository/ChatbotRepository.kt b/app/src/main/java/com/example/projetosaveit/api/repository/ChatbotRepository.kt index 6cb8826..eeab7d8 100644 --- a/app/src/main/java/com/example/projetosaveit/api/repository/ChatbotRepository.kt +++ b/app/src/main/java/com/example/projetosaveit/api/repository/ChatbotRepository.kt @@ -3,12 +3,9 @@ package com.example.projetosaveit.api.repository import com.example.projetosaveit.api.network.ChatBotClient import com.example.projetosaveit.model.ChatRequest import com.example.projetosaveit.model.ChatResponse -import com.example.projetosaveit.model.HistoricoResponse -import com.example.projetosaveit.model.HistoricoSessaoRequest import com.example.projetosaveit.model.IniciarChatRequest import com.example.projetosaveit.model.IniciarChatResponse import retrofit2.Call -import retrofit2.http.Body class ChatbotRepository { fun iniciarChat(request: IniciarChatRequest): Call { @@ -19,13 +16,9 @@ class ChatbotRepository { return ChatBotClient.instance.enviarMensagem(request) } - fun obterHistoricoFuncionario(funcionarioId: Int): Call { - val request = mapOf("funcionario_id" to funcionarioId) - return ChatBotClient.instance.obterHistoricoFuncionario(request) - } + fun obterHistoricoFuncionario(funcionarioId: Int) = + ChatBotClient.instance.obterHistoricoFuncionario(funcionarioId) - // Histórico de mensagens de uma sessão específica - fun obterHistoricoSessao(request: HistoricoSessaoRequest): Call { - return ChatBotClient.instance.obterHistoricoSessao(request) - } + fun obterHistoricoSessao(funcionarioId: Int, sessionId: String) = + ChatBotClient.instance.obterHistoricoSessao(funcionarioId, sessionId) } \ No newline at end of file diff --git a/app/src/main/java/com/example/projetosaveit/model/Chatbot.kt b/app/src/main/java/com/example/projetosaveit/model/Chatbot.kt index c0172b8..314b01e 100644 --- a/app/src/main/java/com/example/projetosaveit/model/Chatbot.kt +++ b/app/src/main/java/com/example/projetosaveit/model/Chatbot.kt @@ -20,19 +20,43 @@ data class ChatResponse( val resposta_assistente: String ) -data class HistoricoSessaoRequest( +data class HistoricoSessaoResponse( + val status: String, val funcionario_id: Int, - val session_id: String + val session_id: String, + val historico: List +) + +data class HistoricoFuncionarioResponse( + val status: String, + val funcionario_id: Int, + val total_sessoes: Int, + val historicos: List +) + +data class MensagemHistorico( + val tipo: String, + val mensagem: String +) + +data class MensagemHistoricoCompleto( + val empresa_id: Int, + val funcionario_id: Int, + val session_id: String, + val role: String, + val content: String, + val timestamp: String ) data class HistoricoResponse( - val historico: List = emptyList(), + val historico: List = emptyList(), val sessoes: List = emptyList() ) -data class MensagemHistorico( +data class MensagemChatHistorico( val role: String, - val content: String + val content: String, + val timestamp: String? = null ) data class SessaoHistorico( diff --git a/app/src/main/java/com/example/projetosaveit/ui/Chatbot.kt b/app/src/main/java/com/example/projetosaveit/ui/Chatbot.kt index 6204060..b54bdd7 100644 --- a/app/src/main/java/com/example/projetosaveit/ui/Chatbot.kt +++ b/app/src/main/java/com/example/projetosaveit/ui/Chatbot.kt @@ -160,7 +160,7 @@ class Chatbot : AppCompatActivity() { sessionId = response.body()?.session_id Log.d("Chatbot", "Sessao iniciada: $sessionId") - val tituloSessao = "Sessao ${listaSessoes.size + 1}" + val tituloSessao = "Conversa ${listaSessoes.size + 1}" adapterSessoes.adicionarConversa(tituloSessao, sessionId ?: "") enviarMensagem(primeiraMsg) @@ -206,35 +206,41 @@ class Chatbot : AppCompatActivity() { } private fun carregarHistoricoSessoes() { - Log.d("Chatbot", "Carregando historico de SESSOES...") + Log.d("Chatbot", "Carregando historico do FUNCIONARIO...") - chatbotRepository.obterHistoricoFuncionario(funcionarioId).enqueue(object : Callback { - override fun onResponse(call: Call, response: Response) { + chatbotRepository.obterHistoricoFuncionario(funcionarioId).enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { if (response.isSuccessful) { - val sessoes = response.body()?.sessoes ?: emptyList() + val historicoCompleto = response.body()?.historicos ?: emptyList() listaSessoes.clear() - Log.d("Chatbot", "${sessoes.size} sessoes carregadas") + val sessoesAgrupadas = historicoCompleto.groupBy { it.session_id } - sessoes.forEachIndexed { index, sessao -> - val titulo = "Conversa ${index + 1} - ${sessao.data?.substring(0, 10) ?: "Data"}" - listaSessoes.add(com.example.projetosaveit.adapter.ConversaItem(titulo, sessao.session_id)) + Log.d("Chatbot", "${sessoesAgrupadas.size} sessoes encontradas") + + sessoesAgrupadas.keys.forEachIndexed { index, sessionId -> + val titulo = "Conversa ${index + 1}" + listaSessoes.add(com.example.projetosaveit.adapter.ConversaItem(titulo, sessionId)) } adapterSessoes.notifyDataSetChanged() - if (sessoes.isNotEmpty()) { - sessionId = sessoes.first().session_id - carregarHistoricoMensagens(sessoes.first().session_id) + if (sessoesAgrupadas.isNotEmpty()) { + val primeiraSessao = sessoesAgrupadas.keys.first() + sessionId = primeiraSessao + carregarHistoricoMensagens(primeiraSessao) } } else { - Log.e("Chatbot", "Erro carregar historico de SESSOES: ${response.code()}") + Log.e("Chatbot", "Erro carregar historico do FUNCIONARIO: ${response.code()}") } } - override fun onFailure(call: Call, t: Throwable) { - Log.e("Chatbot", "Falha ao carregar historico de SESSOES", t) + override fun onFailure(call: Call, t: Throwable) { + Log.e("Chatbot", "Falha ao carregar historico do FUNCIONARIO", t) } }) } @@ -242,26 +248,24 @@ class Chatbot : AppCompatActivity() { private fun carregarHistoricoMensagens(sessionId: String) { Log.d("Chatbot", "Carregando historico de MENSAGENS da sessao: $sessionId") - val request = HistoricoSessaoRequest( - funcionario_id = funcionarioId, - session_id = sessionId - ) - - chatbotRepository.obterHistoricoSessao(request).enqueue(object : Callback { - override fun onResponse(call: Call, response: Response) { + chatbotRepository.obterHistoricoSessao(funcionarioId, sessionId).enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { if (response.isSuccessful) { - val historico = response.body()?.historico ?: emptyList() + val historicoSessao = response.body()?.historico ?: emptyList() listaMensagens.clear() - Log.d("Chatbot", "${historico.size} mensagens carregadas") + Log.d("Chatbot", "${historicoSessao.size} mensagens carregadas") - historico.forEach { mensagem -> - val tipo = when (mensagem.role) { + historicoSessao.forEach { mensagem -> + val tipo = when (mensagem.tipo) { "user" -> TipoMensagemChatbot.USUARIO "assistant" -> TipoMensagemChatbot.BOT else -> TipoMensagemChatbot.BOT } - listaMensagens.add(MensagemChatbot(mensagem.content, tipo)) + listaMensagens.add(MensagemChatbot(mensagem.mensagem, tipo)) } adapterChat.notifyDataSetChanged() @@ -274,7 +278,7 @@ class Chatbot : AppCompatActivity() { } } - override fun onFailure(call: Call, t: Throwable) { + override fun onFailure(call: Call, t: Throwable) { Log.e("Chatbot", "Falha ao carregar historico de MENSAGENS", t) } }) diff --git a/app/src/main/java/com/example/projetosaveit/ui/perfil/Perfil.kt b/app/src/main/java/com/example/projetosaveit/ui/perfil/Perfil.kt index a097627..5b8b777 100644 --- a/app/src/main/java/com/example/projetosaveit/ui/perfil/Perfil.kt +++ b/app/src/main/java/com/example/projetosaveit/ui/perfil/Perfil.kt @@ -127,8 +127,10 @@ class Perfil : Fragment() { if (empresa.planId == 1) { view.findViewById(R.id.FrameInserirFunc).visibility = View.GONE plano = "Plano Atual: Nenhum" + view.findViewById(R.id.btChatbot).visibility = View.GONE } else { plano = "Plano Atual: SaveIt Pro" + view.findViewById(R.id.btChatbot).visibility = View.VISIBLE } view.findViewById(R.id.planoAtual).text = plano diff --git a/app/src/main/res/layout-sw600dp/fragment_perfil.xml b/app/src/main/res/layout-sw600dp/fragment_perfil.xml index 2764492..d8a4ab1 100644 --- a/app/src/main/res/layout-sw600dp/fragment_perfil.xml +++ b/app/src/main/res/layout-sw600dp/fragment_perfil.xml @@ -82,7 +82,7 @@ - - - - - - - - - - + app:layout_constraintVertical_bias="0.13999999"> + app:layout_constraintVertical_bias="0.0" /> @@ -113,7 +114,7 @@ - - - - - - - - - -