Backup #1174

ID1174
Dateipfad/var/www/dev.campus.systemische-tools.de/src/Infrastructure/Persistence/TaskAssignmentRepository.php
Version3
Typ modified
Größe4.1 KB
Hash1ca2c0a39f0c232c75452b989e0028e9ffcc25b5eaacd05eda11f295cc53f753
Datum2025-12-25 10:32:07
Geändert vonclaude-code-hook
GrundClaude Code Pre-Hook Backup vor Edit-Operation
Datei existiert Ja

Dateiinhalt

<?php

declare(strict_types=1);

namespace Infrastructure\Persistence;

// @responsibility: Persistenz für Task-Zuweisungen (human, AI)

use Domain\Entity\TaskAssignment;
use Infrastructure\Config\DatabaseFactory;

class TaskAssignmentRepository
{
    private \PDO $pdo;

    public function __construct(?\PDO $pdo = null)
    {
        $this->pdo = $pdo ?? DatabaseFactory::dev();
    }

    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]);
    }
}

Vollständig herunterladen

Aktionen

Herunterladen

Andere Versionen dieser Datei

ID Version Typ Größe Datum
1264 5 modified 4.0 KB 2025-12-25 12:51
1191 4 modified 4.1 KB 2025-12-25 10:32
1174 3 modified 4.1 KB 2025-12-25 10:32
775 2 modified 4.0 KB 2025-12-23 08:04
435 1 modified 4.3 KB 2025-12-22 10:11

← Zurück zur Übersicht