pdo = $pdo; } public function find(int $id): ?TaskAssignment { $stmt = $this->pdo->prepare('SELECT * FROM task_assignments WHERE id = :id'); $stmt->execute(['id' => $id]); $row = $stmt->fetch(); return $row !== false ? TaskAssignment::fromArray($row) : null; } public function findByTaskId(int $taskId): array { $stmt = $this->pdo->prepare( 'SELECT * FROM task_assignments WHERE task_id = :task_id ORDER BY assigned_at DESC' ); $stmt->execute(['task_id' => $taskId]); $assignments = []; while ($row = $stmt->fetch()) { $assignments[] = TaskAssignment::fromArray($row); } return $assignments; } public function findByAssignee(string $assignee, int $limit = 50): array { $stmt = $this->pdo->prepare( 'SELECT * FROM task_assignments WHERE assignee = :assignee ORDER BY assigned_at DESC LIMIT :limit' ); $stmt->bindValue(':assignee', $assignee); $stmt->bindValue(':limit', $limit, \PDO::PARAM_INT); $stmt->execute(); $assignments = []; while ($row = $stmt->fetch()) { $assignments[] = TaskAssignment::fromArray($row); } return $assignments; } public function findActiveByAssignee(string $assignee): array { $stmt = $this->pdo->prepare( "SELECT * FROM task_assignments WHERE assignee = :assignee AND status IN ('pending', 'accepted', 'in_progress') ORDER BY assigned_at DESC" ); $stmt->execute(['assignee' => $assignee]); $assignments = []; while ($row = $stmt->fetch()) { $assignments[] = TaskAssignment::fromArray($row); } return $assignments; } public function save(TaskAssignment $assignment): int { $sql = 'INSERT INTO task_assignments ( task_id, assignee, assignee_type, model_name, assigned_by, assigned_by_type, status, assigned_at, accepted_at, completed_at, notes ) VALUES ( :task_id, :assignee, :assignee_type, :model_name, :assigned_by, :assigned_by_type, :status, :assigned_at, :accepted_at, :completed_at, :notes )'; $stmt = $this->pdo->prepare($sql); $data = $assignment->toArray(); $stmt->execute([ 'task_id' => $data['task_id'], 'assignee' => $data['assignee'], 'assignee_type' => $data['assignee_type'], 'model_name' => $data['model_name'], 'assigned_by' => $data['assigned_by'], 'assigned_by_type' => $data['assigned_by_type'], 'status' => $data['status'], 'assigned_at' => $data['assigned_at'], 'accepted_at' => $data['accepted_at'], 'completed_at' => $data['completed_at'], 'notes' => $data['notes'], ]); return (int) $this->pdo->lastInsertId(); } public function update(TaskAssignment $assignment): bool { $sql = 'UPDATE task_assignments SET status = :status, accepted_at = :accepted_at, completed_at = :completed_at, notes = :notes WHERE id = :id'; $stmt = $this->pdo->prepare($sql); $data = $assignment->toArray(); return $stmt->execute([ 'id' => $data['id'], 'status' => $data['status'], 'accepted_at' => $data['accepted_at'], 'completed_at' => $data['completed_at'], 'notes' => $data['notes'], ]); } public function delete(int $id): bool { $stmt = $this->pdo->prepare('DELETE FROM task_assignments WHERE id = :id'); return $stmt->execute(['id' => $id]); } }