'datetime', ]; // ────────────────────────────────────────────────────────────── // 상수 // ────────────────────────────────────────────────────────────── /** * 우선순위 */ public const PRIORITY_HIGH = 'high'; public const PRIORITY_MEDIUM = 'medium'; public const PRIORITY_LOW = 'low'; public const PRIORITIES = [ self::PRIORITY_HIGH, self::PRIORITY_MEDIUM, self::PRIORITY_LOW, ]; /** * 상태 */ public const STATUS_OPEN = 'open'; public const STATUS_IN_PROGRESS = 'in_progress'; public const STATUS_RESOLVED = 'resolved'; public const STATUSES = [ self::STATUS_OPEN, self::STATUS_IN_PROGRESS, self::STATUS_RESOLVED, ]; // ────────────────────────────────────────────────────────────── // 관계 // ────────────────────────────────────────────────────────────── /** * 작업지시 */ public function workOrder(): BelongsTo { return $this->belongsTo(WorkOrder::class); } /** * 보고자 */ public function reporter(): BelongsTo { return $this->belongsTo(User::class, 'reported_by'); } /** * 해결자 */ public function resolver(): BelongsTo { return $this->belongsTo(User::class, 'resolved_by'); } // ────────────────────────────────────────────────────────────── // 스코프 // ────────────────────────────────────────────────────────────── /** * 열린 이슈 */ public function scopeOpen($query) { return $query->where('status', self::STATUS_OPEN); } /** * 미해결 이슈 (open + in_progress) */ public function scopeUnresolved($query) { return $query->whereIn('status', [self::STATUS_OPEN, self::STATUS_IN_PROGRESS]); } /** * 해결된 이슈 */ public function scopeResolved($query) { return $query->where('status', self::STATUS_RESOLVED); } /** * 우선순위별 */ public function scopePriority($query, string $priority) { return $query->where('priority', $priority); } /** * 높은 우선순위 */ public function scopeHighPriority($query) { return $query->where('priority', self::PRIORITY_HIGH); } // ────────────────────────────────────────────────────────────── // 헬퍼 메서드 // ────────────────────────────────────────────────────────────── /** * 해결되었는지 확인 */ public function isResolved(): bool { return $this->status === self::STATUS_RESOLVED; } /** * 이슈 해결 처리 */ public function resolve(int $userId): void { $this->status = self::STATUS_RESOLVED; $this->resolved_by = $userId; $this->resolved_at = now(); $this->save(); } }