api update

This commit is contained in:
mohanmd 2026-06-02 13:04:49 +05:30
parent b42bd4c6c5
commit c851f2e4da
3 changed files with 60 additions and 10 deletions

View File

@ -73,12 +73,21 @@ public function updateProfile(Request $request)
/** @var User $employer */ /** @var User $employer */
$employer = $request->attributes->get('employer'); $employer = $request->attributes->get('employer');
$sponsor = \App\Models\Sponsor::where('email', $employer->email)->first();
$validator = Validator::make($request->all(), [ $validator = Validator::make($request->all(), [
'name' => 'required|string|max:255', 'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users,email,' . $employer->id, 'email' => [
'required',
'string',
'email',
'max:255',
'unique:users,email,' . $employer->id,
$sponsor ? 'unique:sponsors,email,' . $sponsor->id : 'unique:sponsors,email',
],
'phone' => 'required|string|max:255', 'phone' => 'required|string|max:255',
'company_name' => 'required|string|max:255', 'company_name' => 'required|string|max:255',
'language' => 'required|string|in:English,Arabic', 'language' => 'required|string|in:English,Arabic,english,arabic',
'notifications' => 'required|boolean', 'notifications' => 'required|boolean',
'current_password' => 'nullable|required_with:new_password|string', 'current_password' => 'nullable|required_with:new_password|string',
'new_password' => 'nullable|string|min:8|confirmed', 'new_password' => 'nullable|string|min:8|confirmed',
@ -106,12 +115,25 @@ public function updateProfile(Request $request)
} }
} }
// Find old email before update to locate the correct sponsor record
$oldEmail = $employer->getOriginal('email') ?? $employer->email;
// Update user table // Update user table
$employer->update([ $employer->update([
'name' => $request->name, 'name' => $request->name,
'email' => $request->email, 'email' => $request->email,
]); ]);
// Sync with corresponding sponsor record if found
$matchingSponsor = \App\Models\Sponsor::where('email', $oldEmail)->first();
if ($matchingSponsor) {
$matchingSponsor->update([
'full_name' => $request->name,
'email' => $request->email,
'mobile' => $request->phone,
]);
}
// Update employer_profiles table // Update employer_profiles table
$profile = $employer->employerProfile; $profile = $employer->employerProfile;
if (!$profile) { if (!$profile) {
@ -119,7 +141,7 @@ public function updateProfile(Request $request)
} }
$profile->company_name = $request->company_name; $profile->company_name = $request->company_name;
$profile->phone = $request->phone; $profile->phone = $request->phone;
$profile->language = $request->language; $profile->language = ucfirst(strtolower($request->language));
$profile->notifications = $request->notifications; $profile->notifications = $request->notifications;
$profile->save(); $profile->save();

View File

@ -82,12 +82,21 @@ public function update(Request $request)
return back()->withErrors(['general' => 'User session not found.']); return back()->withErrors(['general' => 'User session not found.']);
} }
$sponsor = \App\Models\Sponsor::where('email', $user->email)->first();
$request->validate([ $request->validate([
'name' => 'required|string|max:255', 'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users,email,' . $user->id, 'email' => [
'required',
'string',
'email',
'max:255',
'unique:users,email,' . $user->id,
$sponsor ? 'unique:sponsors,email,' . $sponsor->id : 'unique:sponsors,email',
],
'phone' => 'required|string|max:255', 'phone' => 'required|string|max:255',
'company_name' => 'required|string|max:255', 'company_name' => 'required|string|max:255',
'language' => 'required|string|in:English,Arabic', 'language' => 'required|string|in:English,Arabic,english,arabic',
'notifications' => 'required|boolean', 'notifications' => 'required|boolean',
'nationality' => 'nullable|string|max:255', 'nationality' => 'nullable|string|max:255',
'family_size' => 'nullable|string|max:255', 'family_size' => 'nullable|string|max:255',
@ -99,12 +108,24 @@ public function update(Request $request)
'new_password' => 'nullable|string|min:8|confirmed', 'new_password' => 'nullable|string|min:8|confirmed',
]); ]);
$oldEmail = $user->getOriginal('email') ?? $user->email;
// Update User Model // Update User Model
$user->update([ $user->update([
'name' => $request->name, 'name' => $request->name,
'email' => $request->email, 'email' => $request->email,
]); ]);
// Sync with corresponding sponsor record if found
$matchingSponsor = \App\Models\Sponsor::where('email', $oldEmail)->first();
if ($matchingSponsor) {
$matchingSponsor->update([
'full_name' => $request->name,
'email' => $request->email,
'mobile' => $request->phone,
]);
}
// Update EmployerProfile // Update EmployerProfile
$profile = $user->employerProfile; $profile = $user->employerProfile;
if (!$profile) { if (!$profile) {
@ -112,7 +133,7 @@ public function update(Request $request)
} }
$profile->company_name = $request->company_name; $profile->company_name = $request->company_name;
$profile->phone = $request->phone; $profile->phone = $request->phone;
$profile->language = $request->language; $profile->language = ucfirst(strtolower($request->language));
$profile->notifications = $request->notifications; $profile->notifications = $request->notifications;
$profile->nationality = $request->nationality; $profile->nationality = $request->nationality;

View File

@ -1908,7 +1908,9 @@
"type": "string", "type": "string",
"enum": [ "enum": [
"English", "English",
"Arabic" "Arabic",
"english",
"arabic"
], ],
"example": "English" "example": "English"
}, },
@ -2086,7 +2088,10 @@
"items": { "items": {
"type": "string" "type": "string"
}, },
"example": ["childcare", "cooking"] "example": [
"childcare",
"cooking"
]
}, },
"availability_status": { "availability_status": {
"type": "string", "type": "string",
@ -2117,7 +2122,10 @@
"items": { "items": {
"type": "string" "type": "string"
}, },
"example": ["English", "Tagalog"] "example": [
"English",
"Tagalog"
]
}, },
"age": { "age": {
"type": "integer", "type": "integer",
@ -2176,7 +2184,6 @@
} }
}, },
"/employers/candidates": { "/employers/candidates": {
"get": { "get": {
"tags": [ "tags": [
"Employer/Pipeline" "Employer/Pipeline"