fix: [payroll] 급여 등록 500 에러 수정

- 중복 급여 등록 시 유니크 제약 위반 대신 422 응답 반환
- tenant_id null 방어 처리 (세션 값이 null인 경우 기본값 적용)
This commit is contained in:
김보곤
2026-02-27 09:48:16 +09:00
parent 857e4af147
commit 8309d457b5
3 changed files with 20 additions and 2 deletions

View File

@@ -91,6 +91,11 @@ public function store(Request $request): JsonResponse
'message' => '급여가 등록되었습니다.',
'data' => $payroll,
], 201);
} catch (\InvalidArgumentException $e) {
return response()->json([
'success' => false,
'message' => $e->getMessage(),
], 422);
} catch (\Throwable $e) {
report($e);

View File

@@ -62,7 +62,7 @@ class PayrollSetting extends Model
public function scopeForTenant($query, ?int $tenantId = null)
{
$tenantId = $tenantId ?? session('selected_tenant_id', 1);
$tenantId = $tenantId ?? session('selected_tenant_id') ?? 1;
return $query->where('tenant_id', $tenantId);
}
@@ -73,7 +73,7 @@ public function scopeForTenant($query, ?int $tenantId = null)
public static function getOrCreate(?int $tenantId = null): self
{
$tenantId = $tenantId ?? session('selected_tenant_id', 1);
$tenantId = $tenantId ?? session('selected_tenant_id') ?? 1;
return self::firstOrCreate(
['tenant_id' => $tenantId],

View File

@@ -136,6 +136,19 @@ public function storePayroll(array $data): Payroll
{
$tenantId = session('selected_tenant_id', 1);
// 동일 대상/기간 중복 체크
$exists = Payroll::where('tenant_id', $tenantId)
->where('user_id', $data['user_id'])
->where('pay_year', $data['pay_year'])
->where('pay_month', $data['pay_month'])
->exists();
if ($exists) {
throw new \InvalidArgumentException(
"해당 직원의 {$data['pay_year']}{$data['pay_month']}월 급여가 이미 등록되어 있습니다."
);
}
return DB::transaction(function () use ($data, $tenantId) {
$calculated = $this->calculateAmounts($data);