25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
3.0KB

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Repositories;
  4. use App\Models\CardMovement;
  5. use Core\Repository;
  6. class CardMovementRepository extends Repository
  7. {
  8. protected string $table = 'card_movements';
  9. public function insert(CardMovement $movement): CardMovement
  10. {
  11. $this->database->execute(
  12. 'INSERT INTO card_movements
  13. (card_id, from_column_id, from_column_name, to_column_id, to_column_name,
  14. from_swim_lane_id, from_swim_lane_name, to_swim_lane_id, to_swim_lane_name,
  15. moved_at, moved_by)
  16. VALUES
  17. (:card_id, :from_column_id, :from_column_name, :to_column_id, :to_column_name,
  18. :from_swim_lane_id, :from_swim_lane_name, :to_swim_lane_id, :to_swim_lane_name,
  19. :moved_at, :moved_by)',
  20. [
  21. 'card_id' => $movement->cardId,
  22. 'from_column_id' => $movement->fromColumnId,
  23. 'from_column_name' => $movement->fromColumnName,
  24. 'to_column_id' => $movement->toColumnId,
  25. 'to_column_name' => $movement->toColumnName,
  26. 'from_swim_lane_id' => $movement->fromSwimLaneId,
  27. 'from_swim_lane_name' => $movement->fromSwimLaneName,
  28. 'to_swim_lane_id' => $movement->toSwimLaneId,
  29. 'to_swim_lane_name' => $movement->toSwimLaneName,
  30. 'moved_at' => $movement->movedAt,
  31. 'moved_by' => $movement->movedBy,
  32. ]
  33. );
  34. $row = $this->database->first('SELECT last_insert_rowid() AS id');
  35. $movement->id = (int) ($row['id'] ?? 0);
  36. return $movement;
  37. }
  38. /** @return CardMovement[] */
  39. public function findByCardId(int $cardId): array
  40. {
  41. $rows = $this->database->query(
  42. 'SELECT * FROM card_movements WHERE card_id = :card_id ORDER BY moved_at DESC, id DESC',
  43. ['card_id' => $cardId]
  44. );
  45. return array_map(fn(array $r) => CardMovement::fromRow($r), $rows);
  46. }
  47. public function deleteByCardId(int $cardId): void
  48. {
  49. $this->database->execute('DELETE FROM card_movements WHERE card_id = :card_id', ['card_id' => $cardId]);
  50. }
  51. public function deleteByBoardId(int $boardId): void
  52. {
  53. $this->database->execute(
  54. 'DELETE FROM card_movements WHERE card_id IN (SELECT id FROM cards WHERE board_id = :board_id)',
  55. ['board_id' => $boardId]
  56. );
  57. }
  58. public function deleteByColumnId(int $columnId): void
  59. {
  60. $this->database->execute(
  61. 'DELETE FROM card_movements WHERE card_id IN (SELECT id FROM cards WHERE column_id = :column_id)',
  62. ['column_id' => $columnId]
  63. );
  64. }
  65. public function deleteBySwimLaneId(int $swimLaneId): void
  66. {
  67. $this->database->execute(
  68. 'DELETE FROM card_movements WHERE card_id IN (SELECT id FROM cards WHERE swim_lane_id = :swim_lane_id)',
  69. ['swim_lane_id' => $swimLaneId]
  70. );
  71. }
  72. }

Powered by TurnKey Linux.