Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion app/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
/build
/google-services.json
/google-services.json
/secret.properties
14 changes: 14 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties

plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.google.gms.google.services)
alias(libs.plugins.kotlin.android)
}

val token = gradleLocalProperties(rootDir, providers)
.getProperty("API_TOKEN", "")

buildscript {
repositories {
google()
Expand All @@ -30,6 +35,12 @@ android {
versionName = "1.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

buildConfigField(
"String",
"API_TOKEN",
"\"${token}\""
)
}

buildTypes {
Expand Down Expand Up @@ -82,4 +93,7 @@ dependencies {
implementation("org.java-websocket:Java-WebSocket:1.5.3")
implementation("io.reactivex.rxjava2:rxjava:2.2.21")
implementation("io.reactivex.rxjava2:rxandroid:2.1.1")

implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.4")
implementation("androidx.lifecycle:lifecycle-process:2.8.4")
}
6 changes: 3 additions & 3 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@
<activity
android:name=".ui.AtualizarNome"
android:exported="false" />
<!-- <activity-->
<!-- android:name=".ui.Chatbot"-->
<!-- android:exported="false" />-->
<activity
android:name=".ui.chatbot.Chatbot"
android:exported="false" />
<activity
android:name=".ui.VisaoGeralEstoque"
android:exported="false" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ class AdapterChat : RecyclerView.Adapter<AdapterChat.ViewHolder>() {

holder.itemConversa.setOnClickListener {
val intent = Intent(holder.itemView.context, Conversa::class.java)
intent.putExtra("empresaFoto", empresa?.enterpriseImage)
intent.putExtra("empresaId", empresa?.id)
intent.putExtra("chatId", chat.chatId)
holder.itemView.context.startActivity(intent)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.example.projetosaveit.adapter

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.projetosaveit.R
import com.example.projetosaveit.adapter.recycleView.MensagemChatbot
import com.example.projetosaveit.adapter.recycleView.TipoMensagemChatbot

class AdapterChatbot(
private val mensagens: MutableList<MensagemChatbot>
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

private val VIEW_USUARIO = 1
private val VIEW_BOT = 2

override fun getItemViewType(position: Int): Int {
return when (mensagens[position].tipo) {
TipoMensagemChatbot.USUARIO -> VIEW_USUARIO
TipoMensagemChatbot.BOT -> VIEW_BOT
}
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == VIEW_USUARIO) {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.bolha_mensagem_direita, parent, false)
UsuarioViewHolder(view)
} else {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.bolha_mensagem_esquerda, parent, false)
BotViewHolder(view)
}
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val mensagem = mensagens[position]
when (holder) {
is UsuarioViewHolder -> holder.msg.text = mensagem.texto
is BotViewHolder -> holder.msg.text = mensagem.texto
}
}

override fun getItemCount(): Int = mensagens.size

fun adicionarMensagem(mensagem: MensagemChatbot) {
mensagens.add(mensagem)
notifyItemInserted(mensagens.size - 1)
}

class UsuarioViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val msg: TextView = itemView.findViewById(R.id.mensagem_direita)
}

class BotViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val msg: TextView = itemView.findViewById(R.id.mensagem_esquerda)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,9 @@ import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.projetosaveit.R
import com.example.projetosaveit.adapter.recycleView.Mensagem
import com.example.projetosaveit.adapter.recycleView.TipoMensagem
import com.google.android.material.imageview.ShapeableImageView

class AdapterConversa(private val mensagens: MutableList<Mensagem>) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
Expand All @@ -21,12 +19,10 @@ class AdapterConversa(private val mensagens: MutableList<Mensagem>) :

inner class EnviadaViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView = view.findViewById(R.id.mensagem_direita)
val foto: ShapeableImageView = view.findViewById(R.id.fotoEmpresaDireita)
}

inner class RecebidaViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView = view.findViewById(R.id.mensagem_esquerda)
val foto: ShapeableImageView = view.findViewById(R.id.fotoEmpresaEsquerda)
}

override fun getItemViewType(position: Int): Int {
Expand All @@ -45,18 +41,8 @@ class AdapterConversa(private val mensagens: MutableList<Mensagem>) :
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val mensagem = mensagens[position]
when (holder) {
is EnviadaViewHolder -> {
holder.textView.text = mensagem.texto
Glide.with(holder.itemView.context)
.load(mensagem.fotoUrl)
.into(holder.foto)
}
is RecebidaViewHolder -> {
holder.textView.text = mensagem.texto
Glide.with(holder.itemView.context)
.load(mensagem.fotoUrl)
.into(holder.foto)
}
is EnviadaViewHolder -> holder.textView.text = mensagem.texto
is RecebidaViewHolder -> holder.textView.text = mensagem.texto
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.example.projetosaveit.adapter

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.projetosaveit.R

data class ConversaItem(val titulo: String, val sessionId: String)

class AdapterSessoes(
private val conversas: MutableList<ConversaItem>,
private val onClick: (ConversaItem) -> Unit
) : RecyclerView.Adapter<AdapterSessoes.ConversaViewHolder>() {

inner class ConversaViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val tituloTextView: TextView = itemView.findViewById(R.id.textTituloConversa)
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ConversaViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_conversa_drawer, parent, false)
return ConversaViewHolder(view)
}

override fun onBindViewHolder(holder: ConversaViewHolder, position: Int) {
val item = conversas[position]
holder.tituloTextView.text = item.titulo
holder.itemView.setOnClickListener { onClick(item) }
}

override fun getItemCount(): Int = conversas.size

fun adicionarConversa(titulo: String, sessionId: String) {
conversas.add(ConversaItem(titulo, sessionId))
notifyItemInserted(conversas.size - 1)
}

fun limpar() {
conversas.clear()
notifyDataSetChanged()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.example.projetosaveit.adapter.recycleView
data class Mensagem (
val texto: String,
val tipo: TipoMensagem,
val fotoUrl: String? = null,
val idEmpresa: Long
)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.example.projetosaveit.adapter.recycleView

data class MensagemChatbot(
val texto: String,
val tipo: TipoMensagemChatbot
)

enum class TipoMensagemChatbot {
USUARIO,
BOT
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,21 @@ import com.example.projetosaveit.adapter.recycleView.Venda
import com.example.projetosaveit.adapter.recycleView.Produto
import com.example.projetosaveit.adapter.recycleView.Vitrine
import com.example.projetosaveit.model.ChatDTO
import com.example.projetosaveit.model.ChatRequest
import com.example.projetosaveit.model.ChatResponse
//import com.example.projetosaveit.model.ChatRequest
//import com.example.projetosaveit.model.ChatResponse
import com.example.projetosaveit.model.EmpresaDTO
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.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
Expand All @@ -26,6 +32,7 @@ import com.example.projetosaveit.model.VitrineInsertDTO
import okhttp3.ResponseBody
import retrofit2.Call
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.PATCH
import retrofit2.http.POST
Expand All @@ -40,6 +47,9 @@ interface ApiService {
fun getRelatorioProduto(@Path("enterpriseId") enterpriseId: Long, @Path("productId") productId: Long
): Call<List<RelatorioProdutoDTO>>

@DELETE("/api/enterprise/excluir/{id}")
fun deleteEmpresa(@Path("id") enterpriseId : Long) : Call<ResponseBody>

@GET("api/stock/relatorioProduto/{enterpriseId}")
fun getRelatorioProdutos(@Path("enterpriseId") idEmpresa : Long): Call<List<RelatorioDTO>>

Expand Down Expand Up @@ -108,6 +118,12 @@ interface ApiService {
@Query("ultimoCheck") ultimoCheck: String
): Call<List<VitrineDTO>>

@POST("api/enterprise/registrarEntrada/{enterpriseId}")
fun registrarEntrada(@Path("enterpriseId") idEmpresa: Int): Call<ResponseBody>

@POST("api/enterprise/registrarSaida/{enterpriseId}")
fun registrarSaida(@Path("enterpriseId") idEmpresa: Int): Call<ResponseBody>

// API de Mongo/WebSocket

@GET("chats/empresa/{enterpriseId}")
Expand All @@ -130,14 +146,20 @@ interface ApiService {
@Query("chatId") idChat: Long
): Call<List<ChatDTO>>

@PATCH("/chats/marcarComoLida/{chatId}")
fun marcarComoLida(@Path("chatId") chatId: Long): Call<Void>

// API de Chatbot

// @POST("iniciar_chat")
// fun iniciarChat(@Body request: IniciarChatRequest): Call<IniciarChatResponse>
//
// @POST("executar_fluxo")
// fun enviarMensagem(@Body request: ChatRequest): Call<ChatResponse>
//
// @GET("obter_historico")
// fun obterHistorico(@Query("session_id") sessionId: String): Call<HistoricoResponse>
@POST("iniciar_chat")
fun iniciarChat(@Body request: IniciarChatRequest): Call<IniciarChatResponse>

@POST("executar_fluxo")
fun enviarMensagem(@Body request: ChatRequest): Call<ChatResponse>

@POST("historico_funcionario")
fun obterHistoricoFuncionario(@Body request: Map<String, Int>): Call<HistoricoResponse>

@POST("historico_sessao")
fun obterHistoricoSessao(@Body request: HistoricoSessaoRequest): Call<HistoricoResponse>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.example.projetosaveit.api.network

import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit

object ChatBotClient {
private const val BASE_URL = "http://3.92.141.56:8000"

val okHttpClient = OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.readTimeout(120, TimeUnit.SECONDS)
.writeTimeout(120, TimeUnit.SECONDS)
.build()

val instance: ApiService by lazy {
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build()

retrofit.create(ApiService::class.java)
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package com.example.projetosaveit.api.network

import com.example.projetosaveit.BuildConfig
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import okhttp3.OkHttpClient

object RetrofitClientSql {

const val apiToken = BuildConfig.API_TOKEN

private const val BASE_URL = "https://apisaveit.onrender.com"
private const val API_TOKEN = "essentiasaveit-193812-paoea-oei"
private val API_TOKEN = apiToken ?: ""

private val client = OkHttpClient.Builder()
.addInterceptor { chain ->
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.example.projetosaveit.api.repository

import com.example.projetosaveit.api.network.RetrofitClientMongo
import com.example.projetosaveit.api.network.RetrofitClientSql
import com.example.projetosaveit.model.ChatDTO
import retrofit2.Call

Expand All @@ -20,4 +21,8 @@ class ChatRepository {
fun getChatHistorico(idChat: Long): Call<List<ChatDTO>> {
return RetrofitClientMongo.instance.getChatsHistorico(idChat)
}

fun marcarComoLida(chatId: Long): Call<Void> {
return RetrofitClientSql.instance.marcarComoLida(chatId)
}
}
Loading