From fa6e8da3cbd6de31c868b1e1c90e9b8056929f94 Mon Sep 17 00:00:00 2001 From: pavithrak27 Date: Wed, 24 Jun 2026 21:28:38 +0530 Subject: [PATCH 1/6] ocr sposer ocr --- .../Api/EmployerAuthController.php | 3 + .../Api/EmployerProfileController.php | 30 ++++++- .../Controllers/Api/SponsorAuthController.php | 81 ++++++++++++++++++- .../Controllers/Api/SponsorController.php | 28 +++++++ app/Models/EmployerProfile.php | 2 + app/Models/Sponsor.php | 5 ++ app/Services/OcrDocumentService.php | 2 +- ...6_add_license_number_to_sponsors_table.php | 28 +++++++ ...838_add_license_data_to_sponsors_table.php | 28 +++++++ ..._add_emirates_id_nationality_to_tables.php | 34 ++++++++ ...11842_add_emirates_id_gender_to_tables.php | 34 ++++++++ public/swagger.json | 74 ++++++++++++++--- 12 files changed, 328 insertions(+), 21 deletions(-) create mode 100644 database/migrations/2026_06_24_203706_add_license_number_to_sponsors_table.php create mode 100644 database/migrations/2026_06_24_203838_add_license_data_to_sponsors_table.php create mode 100644 database/migrations/2026_06_24_211116_add_emirates_id_nationality_to_tables.php create mode 100644 database/migrations/2026_06_24_211842_add_emirates_id_gender_to_tables.php diff --git a/app/Http/Controllers/Api/EmployerAuthController.php b/app/Http/Controllers/Api/EmployerAuthController.php index 43ff95a..cc22750 100644 --- a/app/Http/Controllers/Api/EmployerAuthController.php +++ b/app/Http/Controllers/Api/EmployerAuthController.php @@ -234,6 +234,7 @@ public function register(Request $request) $emiratesIdName = $emiratesIdInput['name'] ?? null; $emiratesIdDob = $emiratesIdInput['date_of_birth'] ?? $emiratesIdInput['date of birth'] ?? $emiratesIdInput['dob'] ?? null; $emiratesIdNationality = $emiratesIdInput['nationality'] ?? null; + $emiratesIdGender = $emiratesIdInput['gender'] ?? $emiratesIdInput['sex'] ?? null; $emiratesIdIssueDate = $emiratesIdInput['issue_date'] ?? $emiratesIdInput['issue date'] ?? null; $emiratesIdEmployer = $emiratesIdInput['employer'] ?? null; $emiratesIdIssuePlace = $emiratesIdInput['issue_place'] ?? $emiratesIdInput['issue place'] ?? null; @@ -269,6 +270,8 @@ public function register(Request $request) 'emirates_id_employer' => $emiratesIdEmployer, 'emirates_id_issue_place' => $emiratesIdIssuePlace, 'emirates_id_occupation' => $emiratesIdOccupation, + 'emirates_id_nationality' => $emiratesIdNationality, + 'emirates_id_gender' => $emiratesIdGender, 'address' => $request->address, ]); diff --git a/app/Http/Controllers/Api/EmployerProfileController.php b/app/Http/Controllers/Api/EmployerProfileController.php index 92230df..87227ff 100644 --- a/app/Http/Controllers/Api/EmployerProfileController.php +++ b/app/Http/Controllers/Api/EmployerProfileController.php @@ -39,11 +39,22 @@ public function getProfile(Request $request) 'email' => $employer->email, 'company_name' => $profile->company_name, 'phone' => $profile->phone, + 'country' => $profile->country, 'language' => $profile->language ?? 'English', 'notifications' => (bool)($profile->notifications ?? true), 'verification_status' => $profile->verification_status ?? 'approved', - 'emirates_id_number' => $profile->emirates_id_number, - 'emirates_id_expiry' => $profile->emirates_id_expiry, + 'emirates_id' => [ + 'emirates_id_number' => $profile->emirates_id_number, + 'name' => $profile->emirates_id_name, + 'date_of_birth' => $profile->emirates_id_dob, + 'issue_date' => $profile->emirates_id_issue_date, + 'expiry_date' => $profile->emirates_id_expiry, + 'employer' => $profile->emirates_id_employer, + 'issue_place' => $profile->emirates_id_issue_place, + 'occupation' => $profile->emirates_id_occupation, + 'nationality' => $profile->emirates_id_nationality, + 'gender' => $profile->emirates_id_gender, + ], ]; return response()->json([ @@ -170,11 +181,22 @@ public function updateProfile(Request $request) 'email' => $employer->email, 'company_name' => $profile->company_name, 'phone' => $profile->phone, + 'country' => $profile->country, 'language' => $profile->language, 'notifications' => (bool)$profile->notifications, 'verification_status' => $profile->verification_status ?? 'approved', - 'emirates_id_number' => $profile->emirates_id_number, - 'emirates_id_expiry' => $profile->emirates_id_expiry, + 'emirates_id' => [ + 'emirates_id_number' => $profile->emirates_id_number, + 'name' => $profile->emirates_id_name, + 'date_of_birth' => $profile->emirates_id_dob, + 'issue_date' => $profile->emirates_id_issue_date, + 'expiry_date' => $profile->emirates_id_expiry, + 'employer' => $profile->emirates_id_employer, + 'issue_place' => $profile->emirates_id_issue_place, + 'occupation' => $profile->emirates_id_occupation, + 'nationality' => $profile->emirates_id_nationality, + 'gender' => $profile->emirates_id_gender, + ], ]; return response()->json([ diff --git a/app/Http/Controllers/Api/SponsorAuthController.php b/app/Http/Controllers/Api/SponsorAuthController.php index 831c8b7..4fb57f7 100644 --- a/app/Http/Controllers/Api/SponsorAuthController.php +++ b/app/Http/Controllers/Api/SponsorAuthController.php @@ -59,8 +59,13 @@ public function register(Request $request) $licenseExpiry = $request->license_expiry; $licenseInput = $request->input('license'); + $licenseNumber = null; if (is_array($licenseInput)) { - $licenseExpiry = $licenseExpiry ?? ($licenseInput['expiry_date'] ?? $licenseInput['license_expiry'] ?? null); + $rawExpiry = $licenseInput['expiry_date'] ?? $licenseInput['license_expiry'] ?? null; + if ($rawExpiry) { + $licenseExpiry = $licenseExpiry ?? \App\Services\OcrDocumentService::normaliseDate($rawExpiry); + } + $licenseNumber = $licenseInput['license_number'] ?? $licenseInput['license_no'] ?? $licenseInput['document_number'] ?? null; } $emiratesIdInput = $request->input('emirates_id'); @@ -80,6 +85,7 @@ public function register(Request $request) $emiratesIdName = $emiratesIdInput['name'] ?? null; $emiratesIdDob = $emiratesIdInput['date_of_birth'] ?? $emiratesIdInput['date of birth'] ?? $emiratesIdInput['dob'] ?? null; $emiratesIdNationality = $emiratesIdInput['nationality'] ?? null; + $emiratesIdGender = $emiratesIdInput['gender'] ?? $emiratesIdInput['sex'] ?? null; $emiratesIdIssueDate = $emiratesIdInput['issue_date'] ?? $emiratesIdInput['issue date'] ?? null; $emiratesIdEmployer = $emiratesIdInput['employer'] ?? null; $emiratesIdIssuePlace = $emiratesIdInput['issue_place'] ?? $emiratesIdInput['issue place'] ?? null; @@ -92,7 +98,7 @@ public function register(Request $request) $apiToken = Str::random(80); $sponsor = DB::transaction(function () use ( - $request, $email, $licensePath, $emiratesIdPath, $emiratesId, $apiToken, $licenseExpiry, + $request, $email, $licensePath, $emiratesIdPath, $emiratesId, $apiToken, $licenseExpiry, $licenseNumber, $licenseInput, $emiratesIdExpiry, $emiratesIdName, $emiratesIdDob, $emiratesIdIssueDate, $emiratesIdEmployer, $emiratesIdIssuePlace, $emiratesIdOccupation ) { @@ -110,6 +116,8 @@ public function register(Request $request) 'emirates_id_file' => $emiratesIdPath, 'emirates_id' => $emiratesId, 'license_expiry' => $licenseExpiry, + 'license_number' => $licenseNumber, + 'license_data' => $licenseInput, 'status' => 'active', 'is_verified' => false, 'subscription_status' => 'none', @@ -122,6 +130,8 @@ public function register(Request $request) 'emirates_id_employer' => $emiratesIdEmployer, 'emirates_id_issue_place' => $emiratesIdIssuePlace, 'emirates_id_occupation' => $emiratesIdOccupation, + 'emirates_id_nationality' => $emiratesIdNationality, + 'emirates_id_gender' => $emiratesIdGender, ]); }); @@ -137,7 +147,38 @@ public function register(Request $request) 'success' => true, 'message' => 'Sponsor account registered successfully. Your license is pending admin review.', 'data' => [ - 'sponsor' => $sponsor->makeHidden(['password', 'api_token']), + 'sponsor' => [ + 'id' => $sponsor->id, + 'full_name' => $sponsor->full_name, + 'organization_name' => $sponsor->organization_name, + 'mobile' => $sponsor->mobile, + 'email' => $sponsor->email, + 'nationality' => $sponsor->nationality, + 'city' => $sponsor->city, + 'address' => $sponsor->address, + 'country_code' => $sponsor->country_code, + 'is_verified' => $sponsor->is_verified, + 'status' => $sponsor->status, + 'license_file' => $sponsor->license_file ? asset($sponsor->license_file) : null, + 'emirates_id_file' => $sponsor->emirates_id_file ? asset($sponsor->emirates_id_file) : null, + 'license_expiry' => $sponsor->license_expiry ? $sponsor->license_expiry->toDateString() : null, + 'license_number' => $sponsor->license_number, + 'license' => $sponsor->license_data, + 'validity' => $sponsor->license_expiry ? ($sponsor->license_expiry->isFuture() ? 'Valid' : 'Expired') : 'Pending Review', + 'joined_at' => $sponsor->created_at->toIso8601String(), + 'emirates_id' => [ + 'emirates_id_number' => $sponsor->emirates_id, + 'name' => $sponsor->emirates_id_name, + 'date_of_birth' => $sponsor->emirates_id_dob, + 'issue_date' => $sponsor->emirates_id_issue_date, + 'expiry_date' => $sponsor->emirates_id_expiry, + 'employer' => $sponsor->emirates_id_employer, + 'issue_place' => $sponsor->emirates_id_issue_place, + 'occupation' => $sponsor->emirates_id_occupation, + 'nationality' => $sponsor->emirates_id_nationality, + 'gender' => $sponsor->emirates_id_gender, + ], + ], 'token' => $apiToken, ] ], 201); @@ -213,7 +254,36 @@ public function login(Request $request) 'success' => true, 'message' => 'Login successful.', 'data' => [ - 'sponsor' => $sponsor->makeHidden(['password', 'api_token']), + 'sponsor' => [ + 'id' => $sponsor->id, + 'full_name' => $sponsor->full_name, + 'organization_name' => $sponsor->organization_name, + 'mobile' => $sponsor->mobile, + 'email' => $sponsor->email, + 'nationality' => $sponsor->nationality, + 'city' => $sponsor->city, + 'address' => $sponsor->address, + 'country_code' => $sponsor->country_code, + 'is_verified' => $sponsor->is_verified, + 'status' => $sponsor->status, + 'license_file' => $sponsor->license_file ? asset($sponsor->license_file) : null, + 'emirates_id_file' => $sponsor->emirates_id_file ? asset($sponsor->emirates_id_file) : null, + 'license_expiry' => $sponsor->license_expiry ? $sponsor->license_expiry->toDateString() : null, + 'license_number' => $sponsor->license_number, + 'license' => $sponsor->license_data, + 'validity' => $sponsor->license_expiry ? ($sponsor->license_expiry->isFuture() ? 'Valid' : 'Expired') : 'Pending Review', + 'joined_at' => $sponsor->created_at->toIso8601String(), + 'emirates_id' => [ + 'emirates_id_number' => $sponsor->emirates_id, + 'name' => $sponsor->emirates_id_name, + 'date_of_birth' => $sponsor->emirates_id_dob, + 'issue_date' => $sponsor->emirates_id_issue_date, + 'expiry_date' => $sponsor->emirates_id_expiry, + 'employer' => $sponsor->emirates_id_employer, + 'issue_place' => $sponsor->emirates_id_issue_place, + 'occupation' => $sponsor->emirates_id_occupation, + ], + ], 'token' => $apiToken, ] ], 200); @@ -257,10 +327,13 @@ public function uploadLicense(Request $request) $licenseFile = $request->file('license_file'); $ocrLicense = \App\Services\OcrDocumentService::extractSponsorLicenseData($licenseFile); $extractedExpiry = $ocrLicense['expiry_date']; + $extractedNumber = $ocrLicense['license_number']; $sponsor->update([ 'license_file' => null, 'license_expiry' => $extractedExpiry, + 'license_number' => $extractedNumber, + 'license_data' => $ocrLicense, ]); return response()->json([ diff --git a/app/Http/Controllers/Api/SponsorController.php b/app/Http/Controllers/Api/SponsorController.php index 79db18b..27c5f85 100644 --- a/app/Http/Controllers/Api/SponsorController.php +++ b/app/Http/Controllers/Api/SponsorController.php @@ -66,8 +66,22 @@ public function getDashboard(Request $request) 'license_file' => $sponsor->license_file ? asset($sponsor->license_file) : null, 'emirates_id_file' => $sponsor->emirates_id_file ? asset($sponsor->emirates_id_file) : null, 'license_expiry' => $sponsor->license_expiry ? $sponsor->license_expiry->toDateString() : null, + 'license_number' => $sponsor->license_number, + 'license' => $sponsor->license_data, 'validity' => $sponsor->license_expiry ? ($sponsor->license_expiry->isFuture() ? 'Valid' : 'Expired') : 'Pending Review', 'joined_at' => $sponsor->created_at->toIso8601String(), + 'emirates_id' => [ + 'emirates_id_number' => $sponsor->emirates_id, + 'name' => $sponsor->emirates_id_name, + 'date_of_birth' => $sponsor->emirates_id_dob, + 'issue_date' => $sponsor->emirates_id_issue_date, + 'expiry_date' => $sponsor->emirates_id_expiry, + 'employer' => $sponsor->emirates_id_employer, + 'issue_place' => $sponsor->emirates_id_issue_place, + 'occupation' => $sponsor->emirates_id_occupation, + 'nationality' => $sponsor->emirates_id_nationality, + 'gender' => $sponsor->emirates_id_gender, + ], ], 'recent_charity_events' => $recentEvents, 'total_events' => Announcement::where(function ($q) use ($sponsorId) { @@ -320,8 +334,22 @@ public function getProfile(Request $request) 'license_file' => $sponsor->license_file ? asset($sponsor->license_file) : null, 'emirates_id_file' => $sponsor->emirates_id_file ? asset($sponsor->emirates_id_file) : null, 'license_expiry' => $sponsor->license_expiry ? $sponsor->license_expiry->toDateString() : null, + 'license_number' => $sponsor->license_number, + 'license' => $sponsor->license_data, 'validity' => $sponsor->license_expiry ? ($sponsor->license_expiry->isFuture() ? 'Valid' : 'Expired') : 'Pending Review', 'joined_at' => $sponsor->created_at->toIso8601String(), + 'emirates_id' => [ + 'emirates_id_number' => $sponsor->emirates_id, + 'name' => $sponsor->emirates_id_name, + 'date_of_birth' => $sponsor->emirates_id_dob, + 'issue_date' => $sponsor->emirates_id_issue_date, + 'expiry_date' => $sponsor->emirates_id_expiry, + 'employer' => $sponsor->emirates_id_employer, + 'issue_place' => $sponsor->emirates_id_issue_place, + 'occupation' => $sponsor->emirates_id_occupation, + 'nationality' => $sponsor->emirates_id_nationality, + 'gender' => $sponsor->emirates_id_gender, + ], ] ] ], 200); diff --git a/app/Models/EmployerProfile.php b/app/Models/EmployerProfile.php index 06bbaf1..89bfce4 100644 --- a/app/Models/EmployerProfile.php +++ b/app/Models/EmployerProfile.php @@ -29,6 +29,8 @@ class EmployerProfile extends Model 'emirates_id_employer', 'emirates_id_issue_place', 'emirates_id_occupation', + 'emirates_id_nationality', + 'emirates_id_gender', 'address', 'property_type', 'profile_photo_url', diff --git a/app/Models/Sponsor.php b/app/Models/Sponsor.php index e624722..53090ff 100644 --- a/app/Models/Sponsor.php +++ b/app/Models/Sponsor.php @@ -43,6 +43,10 @@ class Sponsor extends Authenticatable 'emirates_id_employer', 'emirates_id_issue_place', 'emirates_id_occupation', + 'emirates_id_nationality', + 'emirates_id_gender', + 'license_number', + 'license_data', ]; protected $hidden = [ @@ -57,6 +61,7 @@ class Sponsor extends Authenticatable 'subscription_end_date' => 'datetime', 'last_login_at' => 'datetime', 'license_expiry' => 'datetime', + 'license_data' => 'array', ]; public function hasActiveSubscription(): bool diff --git a/app/Services/OcrDocumentService.php b/app/Services/OcrDocumentService.php index de9eba3..6268d37 100644 --- a/app/Services/OcrDocumentService.php +++ b/app/Services/OcrDocumentService.php @@ -162,7 +162,7 @@ public static function extractPassportData(UploadedFile $file): array * "2023-04-11" → "2023-04-11" (pass-through) * "11 APR 2023" → "2023-04-11" */ - private static function normaliseDate(string $raw): string + public static function normaliseDate(string $raw): string { $raw = trim($raw); if (empty($raw)) { diff --git a/database/migrations/2026_06_24_203706_add_license_number_to_sponsors_table.php b/database/migrations/2026_06_24_203706_add_license_number_to_sponsors_table.php new file mode 100644 index 0000000..8586508 --- /dev/null +++ b/database/migrations/2026_06_24_203706_add_license_number_to_sponsors_table.php @@ -0,0 +1,28 @@ +string('license_number')->nullable()->after('license_expiry'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('sponsors', function (Blueprint $table) { + $table->dropColumn('license_number'); + }); + } +}; diff --git a/database/migrations/2026_06_24_203838_add_license_data_to_sponsors_table.php b/database/migrations/2026_06_24_203838_add_license_data_to_sponsors_table.php new file mode 100644 index 0000000..e5d9325 --- /dev/null +++ b/database/migrations/2026_06_24_203838_add_license_data_to_sponsors_table.php @@ -0,0 +1,28 @@ +json('license_data')->nullable()->after('license_number'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('sponsors', function (Blueprint $table) { + $table->dropColumn('license_data'); + }); + } +}; diff --git a/database/migrations/2026_06_24_211116_add_emirates_id_nationality_to_tables.php b/database/migrations/2026_06_24_211116_add_emirates_id_nationality_to_tables.php new file mode 100644 index 0000000..d8828d3 --- /dev/null +++ b/database/migrations/2026_06_24_211116_add_emirates_id_nationality_to_tables.php @@ -0,0 +1,34 @@ +string('emirates_id_nationality')->nullable()->after('emirates_id_name'); + }); + Schema::table('employer_profiles', function (Blueprint $table) { + $table->string('emirates_id_nationality')->nullable()->after('emirates_id_name'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('sponsors', function (Blueprint $table) { + $table->dropColumn('emirates_id_nationality'); + }); + Schema::table('employer_profiles', function (Blueprint $table) { + $table->dropColumn('emirates_id_nationality'); + }); + } +}; diff --git a/database/migrations/2026_06_24_211842_add_emirates_id_gender_to_tables.php b/database/migrations/2026_06_24_211842_add_emirates_id_gender_to_tables.php new file mode 100644 index 0000000..f3c17f6 --- /dev/null +++ b/database/migrations/2026_06_24_211842_add_emirates_id_gender_to_tables.php @@ -0,0 +1,34 @@ +string('emirates_id_gender')->nullable()->after('emirates_id_nationality'); + }); + Schema::table('employer_profiles', function (Blueprint $table) { + $table->string('emirates_id_gender')->nullable()->after('emirates_id_nationality'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('sponsors', function (Blueprint $table) { + $table->dropColumn('emirates_id_gender'); + }); + Schema::table('employer_profiles', function (Blueprint $table) { + $table->dropColumn('emirates_id_gender'); + }); + } +}; diff --git a/public/swagger.json b/public/swagger.json index 01413da..2b7fd62 100644 --- a/public/swagger.json +++ b/public/swagger.json @@ -1,4 +1,4 @@ -{ +{ "openapi": "3.0.0", "info": { "title": "Migrant Mobile API", @@ -63,17 +63,30 @@ "type": "object", "description": "Optional JSON object containing extracted organization/trade license details.", "properties": { - "license_number": { - "type": "string", - "example": "123456" - }, - "organization_name": { - "type": "string", - "example": "Al-Rashidi Charitable Foundation" - }, - "expiry_date": { - "type": "string", - "example": "2028-06-12" + "document_type": { "type": "string", "example": "dubai_commercial_license" }, + "country": { "type": "string", "example": "United Arab Emirates" }, + "authority": { "type": "string", "example": "Dubai Economy and Tourism" }, + "license_no": { "type": "string", "example": "1426961" }, + "company_name": { "type": "string", "example": "NEST CLIMATE TECHNICAL SERVICES L.L.C" }, + "business_name": { "type": "string", "example": "NEST CLIMATE TECHNICAL SERVICES L.L.C" }, + "license_category": { "type": "string", "example": "Dep. of Economic Development" }, + "legal_type": { "type": "string", "example": "Limited Liability Company(LLC)" }, + "issue_date": { "type": "string", "example": "22/10/2024" }, + "expiry_date": { "type": "string", "example": "21/10/2026" }, + "main_license_no": { "type": "string", "example": "1426961" }, + "register_no": { "type": "string", "example": "2436760" }, + "dcci_no": { "type": "string", "example": "570232" }, + "members": { + "type": "array", + "items": { + "type": "object", + "properties": { + "person_no": { "type": "string", "example": "1709285" }, + "name": { "type": "string", "example": "SEYED ABDUL RAHMAN SHERIF NISAR" }, + "nationality": { "type": "string", "example": "India" }, + "role": { "type": "string", "example": "Manager" } + } + } } } }, @@ -93,6 +106,10 @@ "type": "string", "example": "NPL" }, + "gender": { + "type": "string", + "example": "Male" + }, "date_of_birth": { "type": "string", "example": "1988-03-22" @@ -5277,6 +5294,39 @@ "type": "string", "example": "fcm_token_example" }, + "license": { + "type": "object", + "properties": { + "document_type": { "type": "string", "example": "dubai_commercial_license" }, + "country": { "type": "string", "example": "United Arab Emirates" }, + "authority": { "type": "string", "example": "Dubai Economy and Tourism" }, + "license_no": { "type": "string", "example": "1426961" }, + "company_name": { "type": "string", "example": "NEST CLIMATE TECHNICAL SERVICES L.L.C" }, + "business_name": { "type": "string", "example": "NEST CLIMATE TECHNICAL SERVICES L.L.C" }, + "license_category": { "type": "string", "example": "Dep. of Economic Development" }, + "legal_type": { "type": "string", "example": "Limited Liability Company(LLC)" }, + "issue_date": { "type": "string", "example": "22/10/2024" }, + "expiry_date": { "type": "string", "example": "21/10/2026" }, + "main_license_no": { "type": "string", "example": "1426961" }, + "register_no": { "type": "string", "example": "2436760" }, + "dcci_no": { "type": "string", "example": "570232" } + } + }, + "emirates_id": { + "type": "object", + "properties": { + "emirates_id_number": { "type": "string", "example": "784-1988-5310327-2" }, + "name": { "type": "string", "example": "KRISHNA PRASAD" }, + "date_of_birth": { "type": "string", "example": "1988-03-22" }, + "issue_date": { "type": "string", "example": "2023-04-11" }, + "expiry_date": { "type": "string", "example": "2028-04-11" }, + "employer": { "type": "string", "example": "Federal Authority" }, + "issue_place": { "type": "string", "example": "Abu Dhabi" }, + "occupation": { "type": "string", "example": "Manager" }, + "nationality": { "type": "string", "example": "NPL" }, + "gender": { "type": "string", "example": "Male" } + } + }, "created_at": { "type": "string", "format": "date-time" From 91a4e164741149f6030782d799e75be21525a1f3 Mon Sep 17 00:00:00 2001 From: pavithrak27 Date: Wed, 24 Jun 2026 21:48:32 +0530 Subject: [PATCH 2/6] swagger fix --- public/swagger.json | 73 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 15 deletions(-) diff --git a/public/swagger.json b/public/swagger.json index 08dbc44..ae5ba7b 100644 --- a/public/swagger.json +++ b/public/swagger.json @@ -63,17 +63,30 @@ "type": "object", "description": "Optional JSON object containing extracted organization/trade license details.", "properties": { - "license_number": { - "type": "string", - "example": "123456" - }, - "organization_name": { - "type": "string", - "example": "Al-Rashidi Charitable Foundation" - }, - "expiry_date": { - "type": "string", - "example": "2028-06-12" + "document_type": { "type": "string", "example": "dubai_commercial_license" }, + "country": { "type": "string", "example": "United Arab Emirates" }, + "authority": { "type": "string", "example": "Dubai Economy and Tourism" }, + "license_no": { "type": "string", "example": "1426961" }, + "company_name": { "type": "string", "example": "NEST CLIMATE TECHNICAL SERVICES L.L.C" }, + "business_name": { "type": "string", "example": "NEST CLIMATE TECHNICAL SERVICES L.L.C" }, + "license_category": { "type": "string", "example": "Dep. of Economic Development" }, + "legal_type": { "type": "string", "example": "Limited Liability Company(LLC)" }, + "issue_date": { "type": "string", "example": "22/10/2024" }, + "expiry_date": { "type": "string", "example": "21/10/2026" }, + "main_license_no": { "type": "string", "example": "1426961" }, + "register_no": { "type": "string", "example": "2436760" }, + "dcci_no": { "type": "string", "example": "570232" }, + "members": { + "type": "array", + "items": { + "type": "object", + "properties": { + "person_no": { "type": "string", "example": "1709285" }, + "name": { "type": "string", "example": "SEYED ABDUL RAHMAN SHERIF NISAR" }, + "nationality": { "type": "string", "example": "India" }, + "role": { "type": "string", "example": "Manager" } + } + } } } }, @@ -124,11 +137,8 @@ "card_number": { "type": "string", "example": "151023946" - }, - "gender": { - "type": "string", - "example": "M" } + } }, "organization_name": { @@ -6630,6 +6640,39 @@ "type": "string", "example": "fcm_token_example" }, + "license": { + "type": "object", + "properties": { + "document_type": { "type": "string", "example": "dubai_commercial_license" }, + "country": { "type": "string", "example": "United Arab Emirates" }, + "authority": { "type": "string", "example": "Dubai Economy and Tourism" }, + "license_no": { "type": "string", "example": "1426961" }, + "company_name": { "type": "string", "example": "NEST CLIMATE TECHNICAL SERVICES L.L.C" }, + "business_name": { "type": "string", "example": "NEST CLIMATE TECHNICAL SERVICES L.L.C" }, + "license_category": { "type": "string", "example": "Dep. of Economic Development" }, + "legal_type": { "type": "string", "example": "Limited Liability Company(LLC)" }, + "issue_date": { "type": "string", "example": "22/10/2024" }, + "expiry_date": { "type": "string", "example": "21/10/2026" }, + "main_license_no": { "type": "string", "example": "1426961" }, + "register_no": { "type": "string", "example": "2436760" }, + "dcci_no": { "type": "string", "example": "570232" } + } + }, + "emirates_id": { + "type": "object", + "properties": { + "emirates_id_number": { "type": "string", "example": "784-1988-5310327-2" }, + "name": { "type": "string", "example": "KRISHNA PRASAD" }, + "date_of_birth": { "type": "string", "example": "1988-03-22" }, + "issue_date": { "type": "string", "example": "2023-04-11" }, + "expiry_date": { "type": "string", "example": "2028-04-11" }, + "employer": { "type": "string", "example": "Federal Authority" }, + "issue_place": { "type": "string", "example": "Abu Dhabi" }, + "occupation": { "type": "string", "example": "Manager" }, + "nationality": { "type": "string", "example": "NPL" }, + "gender": { "type": "string", "example": "Male" } + } + }, "created_at": { "type": "string", "format": "date-time" From 5c4c453ad0f2bfe01b8aa4114b17e30a16762840 Mon Sep 17 00:00:00 2001 From: pavithrak27 Date: Wed, 24 Jun 2026 21:55:23 +0530 Subject: [PATCH 3/6] fixed api issue --- app/Http/Controllers/Api/SponsorAuthController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/SponsorAuthController.php b/app/Http/Controllers/Api/SponsorAuthController.php index fb9c641..474df9e 100644 --- a/app/Http/Controllers/Api/SponsorAuthController.php +++ b/app/Http/Controllers/Api/SponsorAuthController.php @@ -110,7 +110,7 @@ public function register(Request $request) $sponsor = DB::transaction(function () use ( $request, $email, $licensePath, $emiratesIdPath, $emiratesId, $apiToken, $licenseExpiry, $licenseNumber, $licenseInput, $emiratesIdExpiry, $emiratesIdName, $emiratesIdDob, $emiratesIdIssueDate, $emiratesIdEmployer, - $emiratesIdIssuePlace, $emiratesIdOccupation, $licenseData + $emiratesIdIssuePlace, $emiratesIdOccupation, $emiratesIdNationality, $emiratesIdGender ) { return Sponsor::create([ 'full_name' => $request->full_name, From dcbc95ba4bddfe8725ac399860ba884c67283a36 Mon Sep 17 00:00:00 2001 From: pavithrak27 Date: Wed, 24 Jun 2026 22:06:40 +0530 Subject: [PATCH 4/6] fixed api issue --- ...26_06_24_203838_add_license_data_to_sponsors_table.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/database/migrations/2026_06_24_203838_add_license_data_to_sponsors_table.php b/database/migrations/2026_06_24_203838_add_license_data_to_sponsors_table.php index e5d9325..02cc509 100644 --- a/database/migrations/2026_06_24_203838_add_license_data_to_sponsors_table.php +++ b/database/migrations/2026_06_24_203838_add_license_data_to_sponsors_table.php @@ -12,7 +12,9 @@ public function up(): void { Schema::table('sponsors', function (Blueprint $table) { - $table->json('license_data')->nullable()->after('license_number'); + if (!Schema::hasColumn('sponsors', 'license_data')) { + $table->json('license_data')->nullable()->after('license_number'); + } }); } @@ -22,7 +24,9 @@ public function up(): void public function down(): void { Schema::table('sponsors', function (Blueprint $table) { - $table->dropColumn('license_data'); + if (Schema::hasColumn('sponsors', 'license_data')) { + $table->dropColumn('license_data'); + } }); } }; From b6ada3fc4b15a526485352774274a4c2087a29b0 Mon Sep 17 00:00:00 2001 From: pavithrak27 Date: Wed, 24 Jun 2026 22:17:38 +0530 Subject: [PATCH 5/6] fixed api issue --- ...4_211842_add_emirates_id_gender_to_tables.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/database/migrations/2026_06_24_211842_add_emirates_id_gender_to_tables.php b/database/migrations/2026_06_24_211842_add_emirates_id_gender_to_tables.php index f3c17f6..7bea68f 100644 --- a/database/migrations/2026_06_24_211842_add_emirates_id_gender_to_tables.php +++ b/database/migrations/2026_06_24_211842_add_emirates_id_gender_to_tables.php @@ -12,10 +12,14 @@ public function up(): void { Schema::table('sponsors', function (Blueprint $table) { - $table->string('emirates_id_gender')->nullable()->after('emirates_id_nationality'); + if (!Schema::hasColumn('sponsors', 'emirates_id_gender')) { + $table->string('emirates_id_gender')->nullable()->after('emirates_id_nationality'); + } }); Schema::table('employer_profiles', function (Blueprint $table) { - $table->string('emirates_id_gender')->nullable()->after('emirates_id_nationality'); + if (!Schema::hasColumn('employer_profiles', 'emirates_id_gender')) { + $table->string('emirates_id_gender')->nullable()->after('emirates_id_nationality'); + } }); } @@ -25,10 +29,14 @@ public function up(): void public function down(): void { Schema::table('sponsors', function (Blueprint $table) { - $table->dropColumn('emirates_id_gender'); + if (Schema::hasColumn('sponsors', 'emirates_id_gender')) { + $table->dropColumn('emirates_id_gender'); + } }); Schema::table('employer_profiles', function (Blueprint $table) { - $table->dropColumn('emirates_id_gender'); + if (Schema::hasColumn('employer_profiles', 'emirates_id_gender')) { + $table->dropColumn('emirates_id_gender'); + } }); } }; From 0dc116afc8a24a81fe14157e0428d21d5b93b782 Mon Sep 17 00:00:00 2001 From: pavithrak27 Date: Wed, 24 Jun 2026 23:39:54 +0530 Subject: [PATCH 6/6] api fixed --- .../Controllers/Api/EmployerAuthController.php | 17 ++++++++++++++++- .../Api/EmployerProfileController.php | 4 ++++ .../Controllers/Api/SponsorAuthController.php | 12 +++++++++++- app/Http/Controllers/Api/SponsorController.php | 5 ++++- app/Models/Sponsor.php | 3 ++- ...gender_to_employer_profiles_and_sponsors.php | 16 ++++++++++++---- 6 files changed, 49 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/Api/EmployerAuthController.php b/app/Http/Controllers/Api/EmployerAuthController.php index 8955fff..8e2e1e6 100644 --- a/app/Http/Controllers/Api/EmployerAuthController.php +++ b/app/Http/Controllers/Api/EmployerAuthController.php @@ -234,6 +234,8 @@ public function register(Request $request) $emiratesIdEmployer = null; $emiratesIdIssuePlace = null; $emiratesIdOccupation = null; + $emiratesIdCardNumber = null; + $emiratesIdGender = null; if (is_array($emiratesIdInput)) { $emiratesIdNumber = $emiratesIdInput['emirates_id_number'] ?? $emiratesIdInput['id_number'] ?? $emiratesIdInput['id number'] ?? $emiratesIdInput['card_number'] ?? null; @@ -247,8 +249,9 @@ public function register(Request $request) $emiratesIdGender = $emiratesIdInput['gender'] ?? $emiratesIdInput['sex'] ?? null; $emiratesIdIssueDate = $emiratesIdInput['issue_date'] ?? $emiratesIdInput['issue date'] ?? null; $emiratesIdEmployer = $emiratesIdInput['employer'] ?? null; - $emiratesIdIssuePlace = $emiratesIdInput['issue_place'] ?? $emiratesIdInput['issue place'] ?? null; + $emiratesIdIssuePlace = $emiratesIdInput['issue_place'] ?? $emiratesIdInput['issue place'] ?? $emiratesIdInput['issuing_place'] ?? null; $emiratesIdOccupation = $emiratesIdInput['occupation'] ?? $emiratesIdInput['occuption'] ?? null; + $emiratesIdCardNumber = $emiratesIdInput['card_number'] ?? null; } // Create inactive User @@ -282,6 +285,7 @@ public function register(Request $request) 'emirates_id_occupation' => $emiratesIdOccupation, 'emirates_id_nationality' => $emiratesIdNationality, 'emirates_id_gender' => $emiratesIdGender, + 'emirates_id_card_number' => $emiratesIdCardNumber, 'address' => $request->address, ]); @@ -302,6 +306,17 @@ public function register(Request $request) 'status' => 'inactive', 'fcm_token' => $request->fcm_token, 'emirates_id' => $emiratesIdNumber, + 'emirates_id_card_number' => $emiratesIdCardNumber, + 'emirates_id_name' => $emiratesIdName, + 'emirates_id_dob' => $emiratesIdDob, + 'emirates_id_issue_date' => $emiratesIdIssueDate, + 'emirates_id_expiry' => $emiratesIdExpiry, + 'emirates_id_employer' => $emiratesIdEmployer, + 'emirates_id_issue_place' => $emiratesIdIssuePlace, + 'emirates_id_occupation' => $emiratesIdOccupation, + 'emirates_id_nationality' => $emiratesIdNationality, + 'emirates_id_gender' => $emiratesIdGender, + 'nationality' => $emiratesIdNationality, 'address' => $request->address, ]); diff --git a/app/Http/Controllers/Api/EmployerProfileController.php b/app/Http/Controllers/Api/EmployerProfileController.php index 1aa0978..2bb4cc5 100644 --- a/app/Http/Controllers/Api/EmployerProfileController.php +++ b/app/Http/Controllers/Api/EmployerProfileController.php @@ -53,6 +53,8 @@ public function getProfile(Request $request) 'occupation' => $profile->emirates_id_occupation, 'nationality' => $profile->emirates_id_nationality, 'gender' => $profile->emirates_id_gender, + 'card_number' => $profile->emirates_id_card_number, + 'country' => 'United Arab Emirates', ], ]; @@ -279,6 +281,8 @@ public function updateProfile(Request $request) 'occupation' => $profile->emirates_id_occupation, 'nationality' => $profile->emirates_id_nationality, 'gender' => $profile->emirates_id_gender, + 'card_number' => $profile->emirates_id_card_number, + 'country' => 'United Arab Emirates', ], ]; diff --git a/app/Http/Controllers/Api/SponsorAuthController.php b/app/Http/Controllers/Api/SponsorAuthController.php index 474df9e..5a7a949 100644 --- a/app/Http/Controllers/Api/SponsorAuthController.php +++ b/app/Http/Controllers/Api/SponsorAuthController.php @@ -85,6 +85,8 @@ public function register(Request $request) $emiratesIdEmployer = null; $emiratesIdIssuePlace = null; $emiratesIdOccupation = null; + $emiratesIdGender = null; + $emiratesIdCardNumber = null; if (is_array($emiratesIdInput)) { $emiratesId = $emiratesIdInput['emirates_id_number'] ?? $emiratesIdInput['id_number'] ?? $emiratesIdInput['id number'] ?? $emiratesIdInput['card_number'] ?? null; @@ -100,6 +102,7 @@ public function register(Request $request) $emiratesIdEmployer = $emiratesIdInput['employer'] ?? null; $emiratesIdIssuePlace = $emiratesIdInput['issue_place'] ?? $emiratesIdInput['issue place'] ?? null; $emiratesIdOccupation = $emiratesIdInput['occupation'] ?? $emiratesIdInput['occuption'] ?? null; + $emiratesIdCardNumber = $emiratesIdInput['card_number'] ?? null; } $emiratesIdPath = null; @@ -110,7 +113,7 @@ public function register(Request $request) $sponsor = DB::transaction(function () use ( $request, $email, $licensePath, $emiratesIdPath, $emiratesId, $apiToken, $licenseExpiry, $licenseNumber, $licenseInput, $emiratesIdExpiry, $emiratesIdName, $emiratesIdDob, $emiratesIdIssueDate, $emiratesIdEmployer, - $emiratesIdIssuePlace, $emiratesIdOccupation, $emiratesIdNationality, $emiratesIdGender + $emiratesIdIssuePlace, $emiratesIdOccupation, $emiratesIdNationality, $emiratesIdGender, $emiratesIdCardNumber ) { return Sponsor::create([ 'full_name' => $request->full_name, @@ -142,6 +145,7 @@ public function register(Request $request) 'emirates_id_occupation' => $emiratesIdOccupation, 'emirates_id_nationality' => $emiratesIdNationality, 'emirates_id_gender' => $emiratesIdGender, + 'emirates_id_card_number' => $emiratesIdCardNumber, ]); }); @@ -187,6 +191,8 @@ public function register(Request $request) 'occupation' => $sponsor->emirates_id_occupation, 'nationality' => $sponsor->emirates_id_nationality, 'gender' => $sponsor->emirates_id_gender, + 'card_number' => $sponsor->emirates_id_card_number, + 'country' => 'United Arab Emirates', ], ], 'token' => $apiToken, @@ -292,6 +298,10 @@ public function login(Request $request) 'employer' => $sponsor->emirates_id_employer, 'issue_place' => $sponsor->emirates_id_issue_place, 'occupation' => $sponsor->emirates_id_occupation, + 'nationality' => $sponsor->emirates_id_nationality, + 'gender' => $sponsor->emirates_id_gender, + 'card_number' => $sponsor->emirates_id_card_number, + 'country' => 'United Arab Emirates', ], ], 'token' => $apiToken, diff --git a/app/Http/Controllers/Api/SponsorController.php b/app/Http/Controllers/Api/SponsorController.php index 43606a7..98462a3 100644 --- a/app/Http/Controllers/Api/SponsorController.php +++ b/app/Http/Controllers/Api/SponsorController.php @@ -349,6 +349,8 @@ public function getProfile(Request $request) 'occupation' => $sponsor->emirates_id_occupation, 'nationality' => $sponsor->emirates_id_nationality, 'gender' => $sponsor->emirates_id_gender, + 'card_number' => $sponsor->emirates_id_card_number, + 'country' => 'United Arab Emirates', ], ] ] @@ -384,7 +386,7 @@ private function buildSponsorResponse(Sponsor $sponsor): array $emiratesIdData = [ 'emirates_id_number' => $sponsor->emirates_id, 'name' => $sponsor->emirates_id_name, - 'nationality' => $sponsor->nationality, + 'nationality' => $sponsor->emirates_id_nationality, 'date_of_birth' => $sponsor->emirates_id_dob, 'expiry_date' => $sponsor->emirates_id_expiry, 'issue_date' => $sponsor->emirates_id_issue_date, @@ -393,6 +395,7 @@ private function buildSponsorResponse(Sponsor $sponsor): array 'occupation' => $sponsor->emirates_id_occupation, 'card_number' => $sponsor->emirates_id_card_number, 'gender' => $sponsor->emirates_id_gender, + 'country' => 'United Arab Emirates', ]; } diff --git a/app/Models/Sponsor.php b/app/Models/Sponsor.php index f5c4913..91c835f 100644 --- a/app/Models/Sponsor.php +++ b/app/Models/Sponsor.php @@ -108,7 +108,7 @@ public function toArray() $emiratesIdData = [ 'emirates_id_number' => $this->emirates_id, 'name' => $this->emirates_id_name, - 'nationality' => $this->nationality, + 'nationality' => $this->emirates_id_nationality, 'date_of_birth' => $this->emirates_id_dob, 'expiry_date' => $this->emirates_id_expiry, 'issue_date' => $this->emirates_id_issue_date, @@ -117,6 +117,7 @@ public function toArray() 'occupation' => $this->emirates_id_occupation, 'card_number' => $this->emirates_id_card_number, 'gender' => $this->emirates_id_gender, + 'country' => 'United Arab Emirates', ]; } diff --git a/database/migrations/2026_06_23_175000_add_card_number_and_gender_to_employer_profiles_and_sponsors.php b/database/migrations/2026_06_23_175000_add_card_number_and_gender_to_employer_profiles_and_sponsors.php index c520317..6d1deb6 100644 --- a/database/migrations/2026_06_23_175000_add_card_number_and_gender_to_employer_profiles_and_sponsors.php +++ b/database/migrations/2026_06_23_175000_add_card_number_and_gender_to_employer_profiles_and_sponsors.php @@ -12,13 +12,21 @@ public function up(): void { Schema::table('employer_profiles', function (Blueprint $table) { - $table->string('emirates_id_card_number')->nullable(); - $table->string('emirates_id_gender')->nullable(); + if (!Schema::hasColumn('employer_profiles', 'emirates_id_card_number')) { + $table->string('emirates_id_card_number')->nullable(); + } + if (!Schema::hasColumn('employer_profiles', 'emirates_id_gender')) { + $table->string('emirates_id_gender')->nullable(); + } }); Schema::table('sponsors', function (Blueprint $table) { - $table->string('emirates_id_card_number')->nullable(); - $table->string('emirates_id_gender')->nullable(); + if (!Schema::hasColumn('sponsors', 'emirates_id_card_number')) { + $table->string('emirates_id_card_number')->nullable(); + } + if (!Schema::hasColumn('sponsors', 'emirates_id_gender')) { + $table->string('emirates_id_gender')->nullable(); + } }); }