all(), [ 'email' => 'required|email', 'password' => 'required|string', ]); if ($validator->fails()) { return response()->json([ 'success' => false, 'message' => 'Validation error.', 'errors' => $validator->errors() ], 422); } try { $user = User::where('email', $request->email)->where('role', 'employer')->first(); if (!$user || !Hash::check($request->password, $user->password)) { return response()->json([ 'success' => false, 'message' => 'Invalid email or password.' ], 401); } $profile = EmployerProfile::where('user_id', $user->id)->first(); $verification_status = $profile ? $profile->verification_status : 'approved'; if ($verification_status === 'pending') { return response()->json([ 'success' => false, 'message' => 'Your account is pending verification.' ], 403); } if ($verification_status === 'rejected') { return response()->json([ 'success' => false, 'message' => 'Your account verification has been rejected.', 'reason' => $profile->rejection_reason ?? 'Verification rejected.' ], 403); } // Generate and assign a fresh API token $apiToken = Str::random(80); $user->update(['api_token' => $apiToken]); return response()->json([ 'success' => true, 'message' => 'Employer logged in successfully.', 'data' => [ 'employer' => $user->load('employerProfile'), 'token' => $apiToken ] ], 200); } catch (\Exception $e) { logger()->error('Mobile Employer Login Failure: ' . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'An error occurred during login. Please try again.', 'error' => app()->environment('local') ? $e->getMessage() : 'Internal Server Error' ], 500); } } /** * Register a new employer via API. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\JsonResponse */ public function register(Request $request) { $validator = Validator::make($request->all(), [ 'company_name' => 'required|string|max:255', 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users,email', 'phone' => 'required|string|max:50', 'password' => 'required|string|min:8|confirmed', ]); if ($validator->fails()) { return response()->json([ 'success' => false, 'message' => 'Validation error.', 'errors' => $validator->errors() ], 422); } try { // Generate API token $apiToken = Str::random(80); $user = null; \Illuminate\Support\Facades\DB::transaction(function () use ($request, $apiToken, &$user) { $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), 'role' => 'employer', 'subscription_status' => 'active', // Auto-active 'subscription_expires_at' => now()->addDays(30), 'api_token' => $apiToken, ]); EmployerProfile::create([ 'user_id' => $user->id, 'company_name' => $request->company_name, 'phone' => $request->phone, 'country' => 'United Arab Emirates', 'verification_status' => 'approved', // Auto-approved 'language' => 'English', 'notifications' => true, ]); // Create active premium subscription \Illuminate\Support\Facades\DB::table('subscriptions')->insert([ 'user_id' => $user->id, 'plan_id' => 'premium', 'amount_aed' => 199.00, 'starts_at' => now(), 'expires_at' => now()->addDays(30), 'status' => 'active', 'created_at' => now(), 'updated_at' => now(), ]); }); return response()->json([ 'success' => true, 'message' => 'Employer registered successfully.', 'data' => [ 'employer' => $user->load('employerProfile'), 'token' => $apiToken ] ], 201); } catch (\Exception $e) { logger()->error('Mobile Employer Registration Failure: ' . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'An error occurred during registration. Please try again.', 'error' => app()->environment('local') ? $e->getMessage() : 'Internal Server Error' ], 500); } } }