ApprovalObjectType.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Models\Enums;
  3. use App\Models\Container;
  4. use App\Models\Project;
  5. use App\Models\Requirement;
  6. use App\Models\Task;
  7. enum ApprovalObjectType: string
  8. {
  9. case PROJECT = "project";
  10. case REQUIREMENT = "requirement";
  11. case TASK = "task";
  12. case CONTAINER = "container";
  13. case CONTAINER_FILE = "container_file";
  14. public function modelBuilder(): \Illuminate\Database\Eloquent\Builder
  15. {
  16. return match ($this) {
  17. self::PROJECT => Project::query(),
  18. self::TASK => Task::query(),
  19. self::REQUIREMENT => Requirement::query(),
  20. self::CONTAINER, self::CONTAINER_FILE => Container::query(),
  21. };
  22. }
  23. public function flowType(): ApprovalFlowType
  24. {
  25. return match ($this) {
  26. self::PROJECT => ApprovalFlowType::PROJECT,
  27. self::TASK => ApprovalFlowType::TASK,
  28. self::REQUIREMENT => ApprovalFlowType::REQUIREMENT,
  29. self::CONTAINER => ApprovalFlowType::CONTAINER,
  30. self::CONTAINER_FILE => ApprovalFlowType::CONTAINER_FILE,
  31. };
  32. }
  33. public function actionObjectType(): ActionObjectType
  34. {
  35. return match ($this) {
  36. self::PROJECT => ActionObjectType::PROJECT,
  37. self::TASK => ActionObjectType::TASK,
  38. self::REQUIREMENT => ActionObjectType::REQUIREMENT,
  39. self::CONTAINER => ActionObjectType::CONTAINER,
  40. self::CONTAINER_FILE => ActionObjectType::CONTAINER_FILE,
  41. };
  42. }
  43. public function modelBuilderAllowed(string $id = null): \Illuminate\Database\Eloquent\Builder
  44. {
  45. return match ($this) {
  46. self::PROJECT => Project::query()->allowed($id),
  47. self::TASK => Task::query()->allowed($id),
  48. self::REQUIREMENT => Requirement::query(),
  49. self::CONTAINER, self::CONTAINER_FILE => Container::query()->allowed($id),
  50. };
  51. }
  52. public function nameField(): string
  53. {
  54. return match ($this) {
  55. self::REQUIREMENT => "title",
  56. default => "name",
  57. };
  58. }
  59. }