refactor(work-orders): 코드 리뷰 기반 전면 개선

## Critical 수정
- Multi-tenancy: WorkOrderItem, BendingDetail, Issue에 BelongsToTenant 적용
- 감사 로그: 상태변경, 품목수정, 이슈 등록/해결 시 로깅 추가
- 상태 전이 규칙: STATUS_TRANSITIONS + canTransitionTo() 구현

## High 수정
- 다중 담당자: work_order_assignees 피벗 테이블 및 관계 추가
- 부분 수정: 품목 ID 기반 upsert/delete 로직 구현

## 변경 파일
- Models: WorkOrder, WorkOrderAssignee(신규), 하위 모델들
- Services: WorkOrderService (assign, update 메서드 개선)
- Migrations: tenant_id 추가, assignees 테이블 생성

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-01-09 08:32:44 +09:00
parent 18aa745518
commit 349917f019
8 changed files with 490 additions and 22 deletions

View File

@@ -0,0 +1,64 @@
<?php
namespace App\Models\Production;
use App\Models\Members\User;
use App\Traits\BelongsToTenant;
use App\Traits\ModelTrait;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
/**
* 작업지시 담당자 피벗 모델
*
* 다중 담당자 지원을 위한 피벗 테이블 모델
*/
class WorkOrderAssignee extends Model
{
use BelongsToTenant, ModelTrait;
protected $table = 'work_order_assignees';
protected $fillable = [
'tenant_id',
'work_order_id',
'user_id',
'is_primary',
];
protected $casts = [
'is_primary' => 'boolean',
];
// ──────────────────────────────────────────────────────────────
// 관계
// ──────────────────────────────────────────────────────────────
/**
* 작업지시
*/
public function workOrder(): BelongsTo
{
return $this->belongsTo(WorkOrder::class);
}
/**
* 담당자
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
// ──────────────────────────────────────────────────────────────
// 스코프
// ──────────────────────────────────────────────────────────────
/**
* 주 담당자만
*/
public function scopePrimary($query)
{
return $query->where('is_primary', true);
}
}