feat: [pmis] PmisWorker 모델 분리 및 개인정보 관리 개선

- pmis_workers 전용 모델 생성 (SAM 사원관리와 분리)
- 프로필 API 응답 worker 키로 변경
- 직책/소속업체 편집 기능 추가
- React 컴포넌트 data.user → data.worker 전환
This commit is contained in:
김보곤
2026-03-12 12:22:55 +09:00
parent 05d096b08f
commit 3b694230a7
3 changed files with 138 additions and 32 deletions

View File

@@ -3,6 +3,7 @@
namespace App\Http\Controllers\Juil;
use App\Http\Controllers\Controller;
use App\Models\Juil\PmisWorker;
use App\Services\WeatherService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -58,24 +59,24 @@ public function pmisProfile(): JsonResponse
{
$user = auth()->user();
$tenantId = session('current_tenant_id', 1);
$departments = $user->getDepartmentsForTenant($tenantId);
$roles = $user->getRolesForTenant($tenantId);
$worker = PmisWorker::findOrCreateFromUser($user, $tenantId);
return response()->json([
'user' => [
'name' => $user->name,
'user_id' => $user->user_id,
'email' => $user->email,
'phone' => $user->phone,
'role' => $user->role,
'profile_photo_path' => $user->profile_photo_path,
'department' => $departments->first()?->name ?? '-',
'position' => $user->getOption('position') ?? '-',
'gender' => data_get($user->options, 'gender', ''),
'role_names' => $roles->pluck('name')->join(', ') ?: '-',
'created_at' => $user->created_at?->format('Y-m-d'),
'last_login_at' => $user->last_login_at?->format('Y-m-d H:i'),
'worker' => [
'id' => $worker->id,
'name' => $worker->name,
'login_id' => $worker->login_id,
'phone' => $worker->phone,
'email' => $worker->email,
'department' => $worker->department ?? '-',
'position' => $worker->position ?? '-',
'role_type' => $worker->role_type ?? '-',
'gender' => $worker->gender ?? '',
'company' => $worker->company ?? '-',
'profile_photo_path' => $worker->profile_photo_path,
'created_at' => $worker->created_at?->format('Y-m-d'),
'last_login_at' => $worker->last_login_at?->format('Y-m-d H:i')
?? $user->last_login_at?->format('Y-m-d H:i'),
],
]);
}
@@ -86,18 +87,21 @@ public function pmisProfileUpdate(Request $request): JsonResponse
'phone' => ['nullable', 'string', 'max:20'],
'email' => ['nullable', 'email', 'max:255'],
'gender' => ['nullable', 'string', 'in:남,여'],
'position' => ['nullable', 'string', 'max:50'],
'company' => ['nullable', 'string', 'max:100'],
]);
$user = auth()->user();
$user->phone = $request->input('phone');
$user->email = $request->input('email');
$tenantId = session('current_tenant_id', 1);
$worker = PmisWorker::findOrCreateFromUser($user, $tenantId);
$options = $user->options ?? [];
$options['gender'] = $request->input('gender');
$user->options = $options;
$user->updated_by = $user->id;
$user->save();
$worker->update([
'phone' => $request->input('phone'),
'email' => $request->input('email'),
'gender' => $request->input('gender'),
'position' => $request->input('position'),
'company' => $request->input('company'),
]);
return response()->json(['success' => true, 'message' => '개인정보가 저장되었습니다.']);
}