feat : migration and chat models

This commit is contained in:
Alvaro Mazuecos Nogales
2024-09-20 11:25:34 +02:00
parent b25abc19d9
commit bfea4aa67c
9 changed files with 158 additions and 59 deletions

View File

@ -11,13 +11,17 @@ class ChatDepartments extends Migration
"id" => [
"type" => "INT",
"unsigned" => true,
"autoincrement" => true
"auto_increment" => true
],
"name" => [
"type" => "VARCHAR",
"constraint" => '45',
"unique" => true,
],
"display" => [
"type" => "VARCHAR",
"constraint" => '255',
],
];
public function up()
@ -28,22 +32,21 @@ class ChatDepartments extends Migration
"created_at" => [
"type" => "TIMESTAMP",
"default" => $currenttime,
],
"updated_at" => [
"type" => "TIMESTAMP",
"nullable" => true,
"null" => true,
],
"deleted_at" => [
"type" => "TIMESTAMP",
"nullable" => true,
"null" => true,
],
]);
$this->forge->createTable("chat_departments",true);
$this->forge->addPrimaryKey('id');
$this->forge->createTable("chat_departments", true);
}
public function down()

View File

@ -11,7 +11,7 @@ class ChatsTable extends Migration
"id" => [
"type" => "INT",
"unsigned" => true,
"autoincrement" => true
"auto_increment" => true
],
"chat_department_id" => [
"type" => "INT",
@ -23,14 +23,14 @@ class ChatsTable extends Migration
"unsigned" => true,
],
];
public function up()
{
$this->forge->dropTable("chat_conversaciones",true);
$this->forge->dropTable("chat_mensajes",true);
$this->forge->dropTable("chat_participantes",true);
$this->forge->dropTable("chat_conversaciones", true);
$this->forge->dropTable("chat_mensajes", true);
$this->forge->dropTable("chat_participantes", true);
$this->forge->addField($this->COLUMNS);
$currenttime = new RawSql("CURRENT_TIMESTAMP");
$this->forge->addField([
@ -40,24 +40,23 @@ class ChatsTable extends Migration
],
"updated_at" => [
"type" => "TIMESTAMP",
"nullable" => true,
"null" => true,
],
"deleted_at" => [
"type" => "TIMESTAMP",
"nullable" => true,
"null" => true,
],
]);
$this->forge->addPrimaryKey('id');
$this->forge->addForeignKey('pedido_id', 'pedidos', 'id');
// $this->forge->addForeignKey('chat_department_id', 'chat_departments', 'id');
$this->forge->createTable("chats",true);
$this->forge->addForeignKey('chat_department_id', 'chat_departments', 'id');
$this->forge->createTable("chats", true);
}
public function down()
{
//
$this->forge->dropTable("chats",true);
$this->forge->dropTable("chats", true);
}
}

View File

@ -10,7 +10,7 @@ class ChatMessages extends Migration
protected array $COLUMNS = [
"id" => [
"type" => "INT",
"autoincrement" => true,
"auto_increment" => true,
],
"chat_id" => [
"type" => "INT",
@ -20,7 +20,7 @@ class ChatMessages extends Migration
"user_id" => [
"type" => "INT",
"unsigned" => true,
],
"message" => [
"type" => "TEXT",
@ -31,32 +31,33 @@ class ChatMessages extends Migration
public function up()
{
$this->forge->addField($this->COLUMNS);
$this->forge->addForeignKey(['user_id'], 'users', ['id']);
$this->forge->addForeignKey(['chat_id'], 'chats', ['id']);
$currenttime = new RawSql("CURRENT_TIMESTAMP");
$this->forge->addField([
"created_at" => [
"type" => "TIMESTAMP",
"default" => $currenttime,
],
"updated_at" => [
"type" => "TIMESTAMP",
"nullable" => true,
"null" => true,
],
"deleted_at" => [
"type" => "TIMESTAMP",
"nullable" => true,
"null" => true,
],
]);
$this->forge->createTable("chat_messages",true);
$this->forge->addPrimaryKey('id');
$this->forge->addForeignKey(['user_id'], 'users', ['id']);
$this->forge->addForeignKey(['chat_id'], 'chats', ['id']);
$this->forge->createTable("chat_messages", true);
}
public function down()
{
$this->forge->dropTable("chat_messages",true);
$this->forge->dropTable("chat_messages", true);
}
}

View File

@ -8,8 +8,9 @@ use CodeIgniter\Database\RawSql;
class ChatDepartmentUsers extends Migration
{
protected array $COLUMNS = [
"chat_deparment_id" => [
"chat_department_id" => [
"type" => "INT",
"unsigned" => true,
],
"user_id" => [
"type" => "INT",
@ -19,34 +20,31 @@ class ChatDepartmentUsers extends Migration
public function up()
{
$this->forge->addField($this->COLUMNS);
$this->forge->addForeignKey(["user_id"],"users",["id"]);
$currenttime = new RawSql("CURRENT_TIMESTAMP");
$this->forge->addField([
"created_at" => [
"type" => "TIMESTAMP",
"default" => $currenttime,
],
"updated_at" => [
"type" => "TIMESTAMP",
"nullable" => true,
"null" => true,
],
"deleted_at" => [
"type" => "TIMESTAMP",
"nullable" => true,
"null" => true,
],
]);
$this->forge->createTable("chat_department_users",true);
$this->forge->addForeignKey(["user_id"], "users", ["id"]);
$this->forge->addForeignKey(["chat_department_id"], "chat_departments", ["id"]);
$this->forge->createTable("chat_department_users", true);
}
public function down()
{
$this->forge->dropTable("chat_department_users");
}
}

View File

@ -0,0 +1,83 @@
<?php
namespace App\Database\Seeds;
use App\Models\Chat\ChatDeparmentModel;
use App\Models\Chat\ChatDeparmentUserModel;
use CodeIgniter\Database\Seeder;
use App\Models\Usuarios\UserModel;
class ChatSeeder extends Seeder
{
public function run()
{
$data = [
[
"name" => "_produccion",
"display" => "Producción",
"users" => [
"mbalbaci@safekat.com",
"mari.cano@safekat.com",
"beatriz@safekat.com"
],
],
[
"name" => "_pod",
"display" => "POD",
"users" => [
"pod@safekat.com",
],
],
[
"name" => "_maquetacion",
"display" => "Maquetación",
"users" => [
"maquetacion@safekat.com",
],
],
// [
// "name" => "_comercial",
// "display" => "Comercial",
// "users" => [
// "incidencias@safekat.com",
// ],
// ],
[
"name" => "_incidencias",
"display" => "Incidencias",
"users" => [
"incidencias@safekat.com",
],
],
[
"name" => "_logistica",
"display" => "Logística",
"users" => [
"logistica@safekat.com",
],
],
[
"name" => "_admin",
"display" => "Administración",
"users" => [
"contabilidad@safekat.com",
],
],
];
$chatDeparmentModel = model(ChatDeparmentModel::class);
$chatDeparmentUsersModel = model(ChatDeparmentUserModel::class);
$userModel = model(UserModel::class);
foreach ($data as $row) {
$chatDeparmentId = $chatDeparmentModel->insert(["name" => $row["name"], "display" => $row["display"]]);
if (count($row["users"]) > 0) {
foreach ($row["users"] as $mail) {
$user = $userModel->like("username", $mail)->first();
if ($user) {
$chatDeparmentUsersModel->insert(['user_id' => $user->id, "chat_department_id" => $chatDeparmentId]);
}
}
}
};
}
}

View File

@ -1,18 +1,21 @@
<?php
namespace App\Models;
namespace App\Models\Chat;
use CodeIgniter\Model;
class ChatDeparmentModel extends Model
{
protected $table = 'chat_deparments';
protected $table = 'chat_departments';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
protected $returnType = 'array';
protected $useSoftDeletes = false;
protected $protectFields = true;
protected $allowedFields = [];
protected $allowedFields = [
"name",
"display"
];
protected bool $allowEmptyInserts = false;
protected bool $updateOnlyChanged = true;

View File

@ -1,18 +1,22 @@
<?php
namespace App\Models;
namespace App\Models\Chat;
use CodeIgniter\Model;
class ChatDeparmentUserModel extends Model
{
protected $table = 'chat_deparment_users';
protected $table = 'chat_department_users';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
protected $returnType = 'array';
protected $useSoftDeletes = false;
protected $protectFields = true;
protected $allowedFields = [];
protected $allowedFields = [
"chat_department_id",
"user_id"
];
protected bool $allowEmptyInserts = false;
protected bool $updateOnlyChanged = true;

View File

@ -1,6 +1,7 @@
<?php
namespace App\Models;
namespace App\Models\Chat;
use CodeIgniter\Model;

View File

@ -1,6 +1,7 @@
<?php
namespace App\Models;
namespace App\Models\Chat;
use CodeIgniter\Model;
@ -12,7 +13,10 @@ class ChatModel extends Model
protected $returnType = 'array';
protected $useSoftDeletes = false;
protected $protectFields = true;
protected $allowedFields = [];
protected $allowedFields = [
"pedido_id",
"chat_department_id"
];
protected bool $allowEmptyInserts = false;
protected bool $updateOnlyChanged = true;
@ -44,20 +48,23 @@ class ChatModel extends Model
protected $beforeDelete = [];
protected $afterDelete = [];
public function getChat(int $chat_id)
{
$this->db->table('chats')
->select([
"chats.id as chatId",
"users.id as userId",
"users.email",
"chat_messages.created_at as messageCreatedAt",
"chat_messages.message as messageText",
]
)
->join("users","users.id == chat_messages.user_id","left")
->join("chat_messages","chats.id == chat_messages.chat_id","left");
->select(
[
"chats.id as chatId",
"users.id as userId",
"chats.pedido_id as pedidoId",
"users.email",
"chat_messages.created_at as messageCreatedAt",
"chat_messages.message as messageText",
]
)
->join("users", "users.id == chat_messages.user_id", "left")
->join("chat_deparments", "chat_deparments.id == chats.chat_deparment_id", "left")
->join("chat_messages", "chats.id == chat_messages.chat_id", "left")
->where("chatId", $chat_id)->get()->getResultObject();
}
}