messages view

This commit is contained in:
amazuecos
2024-11-28 09:14:59 +01:00
parent 3400c5f77c
commit 093aa42e67
23 changed files with 1030 additions and 19 deletions

View File

@ -3,12 +3,13 @@
namespace App\Models\Chat;
use App\Models\ChatNotification;
use App\Models\ChatUser;
use App\Models\Facturas\FacturaModel;
use App\Models\Pedidos\PedidoModel;
use App\Models\Presupuestos\PresupuestoModel;
use App\Models\Usuarios\UserModel;
use CodeIgniter\Model;
use stdClass;
use CodeIgniter\Database\BaseBuilder;
class ChatModel extends Model
{
@ -623,5 +624,126 @@ class ChatModel extends Model
return $q;
}
public function getChatFirstUser(int $chat_id) : object
{
$q = $this->builder()->select(["users.id",
"CONCAT(users.first_name,' ',users.last_name) as userFullName",
])
->join("chat_messages","chat_messages.chat_id = chats.id",'left')
->join("users","users.id = chat_messages.sender_id","left")
->where("chats.id",$chat_id)
->where("chat_messages.deleted_at",null)
->orderBy("chat_messages.created_at",'ASC');
return $q->get()->getFirstRow();
}
/**
* Check if all messages of a chat sended to an user have been viewed.
*
* @param integer $chat_id
* @param integer $user_id
* @return boolean True : All messages readed
*/
public function isMessageChatViewed(int $chat_id, int $user_id) : bool
{
$q = $this->builder()->select(["chat_notifications.id"])
->join("chat_messages","chat_messages.chat_id = chats.id",'left')
->join("chat_notifications","chat_notifications.chat_message_id = chat_messages.id",'left')
->where("chats.id",$chat_id)
->where("chat_notifications.user_id",$user_id)
->where("chat_notifications.viewed",false);
$unread_messages_count = $q->countAllResults();
if($unread_messages_count > 0){
$result = false;
}else{
$result = true;
}
return $result;
}
public function getQueryDatatable(): BaseBuilder
{
$query = $this->builder()
->select([
"chats.id",
"chats.created_at",
"chats.updated_at",
"chats.title",
])
->where("chat_department_id",null)
->where("pedido_id",null)
->where("presupuesto_id",null)
->where("factura_id",null)
->where("title is NOT NULL",NULL,FALSE)
->orderBy("created_at", "DESC");
return $query;
}
public function createNewDirectChat(string $title,string $message,array $users)
{
$chatMessageModel = model(ChatMessageModel::class);
$chatNotificationModel = model(ChatNotification::class);
$chatUserModel = model(ChatUser::class);
$auth_user_id = auth()->user()->id;
$chat_id = $this->insert(["title" => $title]);
$chat_message_id = $chatMessageModel->insert([
"chat_id" => $chat_id,
"sender_id" => $auth_user_id,
"receiver_id" => null,
"message" => $message
]);
$chatUserModel->insert(["chat_id" => $chat_id,"user_id" => $auth_user_id]);
foreach ($users as $key => $user_id) {
$chatUserModel->insert(["chat_id" => $chat_id,"user_id" => $user_id]);
$chatNotificationModel->insert(["chat_message_id" => $chat_message_id,"user_id" => $user_id]);
}
}
/**
* Obtain users and messages from `chat_id`
*
* @param integer $chat_id
* @return array
* [
* "chat" => object,
* "messages" => array ,
* "users" => array
* ]
*/
public function getChatDirect(int $chat_id) : array
{
$auth_user = auth()->user()->id;
$chat = $this->find($chat_id);
$query = $this->builder()->select([
"users.*",
])
->join("chat_users","chat_users.chat_id = chats.id")
->join("users","users.id = chat_users.user_id","left")
->where("chats.id",$chat_id);
$users = $query->get()->getResultObject();
$query = $this->builder()->select([
"chat_messages.*",
"users.first_name as sender_first_name",
"users.last_name as sender_last_name",
])
->join("chat_messages","chat_messages.chat_id = chats.id","left")
->join("users","chat_messages.sender_id = users.id","left")
->where("chats.id",$chat_id);
$messages = $query->get()->getResultObject();
$validatedMessages = [];
foreach ($messages as $key => $message) {
if($auth_user == $message->sender_id){
$message->pos = 'right';
$validatedMessages[] = $message;
}else{
$message->pos = 'left';
$validatedMessages[] = $message;
}
}
$data = [
"chat" => $chat,
"users" => $users,
"messages" => $validatedMessages
];
return $data;
}
}