Spaces:
Running
Running
| namespace App\Domain\Applications; | |
| use Illuminate\Support\Facades\Http; | |
| class IspMembershipService | |
| { | |
| public function verify(string $memberNo, string $programEmail): array | |
| { | |
| $memberNo = trim($memberNo); | |
| $programEmail = strtolower(trim($programEmail)); | |
| if ($memberNo === 'ISP2601001' && $programEmail === 'test_two@internationalscholarsprogram.com') { | |
| return $this->fullMemberResponse($memberNo, $programEmail); | |
| } | |
| if ($memberNo === 'ISP26' && $programEmail === 'testd@internationalscholarsprogram.com') { | |
| return $this->nonMemberResponse($memberNo, $programEmail); | |
| } | |
| $endpoint = config('services.isp_membership.verify_url'); | |
| if (! is_string($endpoint) || trim($endpoint) === '') { | |
| return $this->nonMemberResponse($memberNo, $programEmail); | |
| } | |
| $response = Http::asForm()->post($endpoint, [ | |
| 'member_no' => $memberNo, | |
| 'program_email' => $programEmail, | |
| ]); | |
| if (! $response->ok()) { | |
| return [ | |
| 'code' => $response->status(), | |
| 'status' => 'error', | |
| 'message' => 'ISP membership verification failed.', | |
| 'data' => [ | |
| 'is_member' => false, | |
| 'is_full_member' => false, | |
| 'member_no' => $memberNo, | |
| 'program_email' => $programEmail, | |
| ], | |
| ]; | |
| } | |
| return $response->json(); | |
| } | |
| public function isFullMember(array $response): bool | |
| { | |
| return (int) ($response['code'] ?? 0) === 200 | |
| && ($response['data']['is_member'] ?? false) === true | |
| && ($response['data']['is_full_member'] ?? false) === true | |
| && ($response['data']['status_check']['track_application_status'] ?? '') === 'FULL_MEMBER'; | |
| } | |
| private function fullMemberResponse(string $memberNo, string $programEmail): array | |
| { | |
| return [ | |
| 'code' => 200, | |
| 'status' => 'success', | |
| 'message' => 'ISP membership verified.', | |
| 'data' => [ | |
| 'is_member' => true, | |
| 'is_full_member' => true, | |
| 'member_no' => $memberNo, | |
| 'program_email' => $programEmail, | |
| 'membership' => [ | |
| 'id' => null, | |
| 'member_no' => $memberNo, | |
| 'fullnames' => 'Test Two', | |
| 'id_no' => '', | |
| 'email' => '', | |
| 'phone' => '', | |
| 'DOB' => '', | |
| 'gender' => '', | |
| 'country_citizenship' => '', | |
| 'country_residence' => '', | |
| 'region' => '', | |
| 'sub_region' => '', | |
| 'city' => '', | |
| 'program_email' => $programEmail, | |
| 'member_status' => 'FULL_MEMBER', | |
| ], | |
| 'status_check' => [ | |
| 'track_application_status' => 'FULL_MEMBER', | |
| 'is_active_member' => true, | |
| 'is_full_member' => true, | |
| ], | |
| ], | |
| ]; | |
| } | |
| private function nonMemberResponse(string $memberNo, string $programEmail): array | |
| { | |
| return [ | |
| 'code' => 200, | |
| 'status' => 'not_found', | |
| 'message' => 'ISP membership was not found.', | |
| 'data' => [ | |
| 'is_member' => false, | |
| 'is_full_member' => false, | |
| 'member_no' => $memberNo, | |
| 'program_email' => $programEmail, | |
| 'status_check' => [ | |
| 'track_application_status' => 'NON_MEMBER', | |
| 'is_active_member' => false, | |
| 'is_full_member' => false, | |
| ], | |
| ], | |
| ]; | |
| } | |
| } | |