Spaces:
Running
Running
File size: 3,904 Bytes
0b3a267 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | <?php
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,
],
],
];
}
}
|