bp/app/Modules/Tasks/Models/TaskAssigneeModel.php

77 lines
2.2 KiB
PHP

<?php
namespace App\Modules\Tasks\Models;
use CodeIgniter\Model;
class TaskAssigneeModel extends Model
{
protected $table = 'task_assignees';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
protected $returnType = 'array';
protected $useSoftDeletes = false;
protected $allowedFields = [
'task_id',
'user_id',
'role',
'assigned_at',
];
/**
* Получить всех исполнителей задачи
*/
public function getAssigneesByTask(int $taskId): array
{
return $this->select('task_assignees.*, users.name as user_name, users.email as user_email')
->join('users', 'task_assignees.user_id = users.id', 'left')
->where('task_id', $taskId)
->findAll();
}
/**
* Получить задачи пользователя
*/
public function getTasksByUser(int $userId, int $organizationId): array
{
return $this->select('tasks.*')
->join('tasks', 'task_assignees.task_id = tasks.id')
->where('task_assignees.user_id', $userId)
->where('tasks.organization_id', $organizationId)
->findAll();
}
/**
* Добавить исполнителя
*/
public function addAssignee(int $taskId, int $userId, string $role = 'assignee'): int
{
return $this->insert([
'task_id' => $taskId,
'user_id' => $userId,
'role' => $role,
'assigned_at' => date('Y-m-d H:i:s'),
]);
}
/**
* Удалить исполнителя
*/
public function removeAssignee(int $taskId, int $userId): bool
{
return $this->where('task_id', $taskId)
->where('user_id', $userId)
->delete() > 0;
}
/**
* Проверить, является ли пользователь исполнителем
*/
public function isAssignee(int $taskId, int $userId): bool
{
return $this->where('task_id', $taskId)
->where('user_id', $userId)
->countAllResults() > 0;
}
}