Как войти в систему с помощью lat & long и найти местоположение на основе текущей позиции в Laravel? - PullRequest
1 голос
/ 22 мая 2019

В моем API входа в систему у меня есть «email» и «пароль» для входа в систему, и теперь я хочу передать lat и long в своем API входа в систему, и мой новый запрос тела будет выглядеть как this:

{
    "email":"john-smith@ovadamd.com",
    "password": "admin123",
    "lat": "12",
    "long": "22"
}

Я хочу показать, что этот пользователь принадлежит к какому объекту, и у меня есть таблица местоположения объекта, где я храню значения lat и long, и я хочу войти в систему пользователя с параметрами lat и long.

Это мой логин API:

public function fdLogin(Request $request)
{
    $credentials = $request->only('email', 'password');

    $rules = [
        'email' => 'required|email',
        'password' => 'required',
    ];

    $validator = Validator::make($credentials, $rules);

    if ($validator->fails()) {
        return response()->json([
            'status' => false,
            'message' => __('messages.validation_errors'),
            'errors' => $validator->messages()
        ]);
    }
    try {

        $is_already_loggedIn = $this->user->where('email', $request->input('email'))->value('is_loggedIn');

        if ($is_already_loggedIn) {
            return response()->json([
                'status' => false,
                'message' => 'You are already logged In on some module'
            ], 500);
        }

        $customClaims = ['exp' => Carbon::now()->addYear()->timestamp];

        // Attempt to verify the credentials and create a token for the user
        if (!$token = JWTAuth::attempt($credentials, $customClaims)) {
            return response()->json([
                'status' => false,
                'message' => 'We can`t find an account with this credentials.'
            ], 401);
        }
    } catch (JWTException $e) {
        // Something went wrong with JWT Auth.
        return response()->json([
            'status' => false,
            'message' => 'Failed to login, please try again.'
        ], 500);
    }

    $currentUser = Auth::user();


    $currentUser->basicInfo = $this->userBasicInfo->where('user_id', $currentUser->id)->first();
    $access_module = $this->userAccessModule->where('user_id', $currentUser->id)->first();


    $is_super_admin = DB::table('users')->select('users.is_super_admin')->where('id',$currentUser->id)->first();

    $specialitiesAndRoles = DB::table('roles')
        ->join('user_facility', 'roles.id', 'user_facility.role_id')
        ->where('user_facility.user_id', Auth::user()->id)
        ->select('user_facility.facility_id','user_facility.speciality_id','user_facility.is_facility_supervisor','user_facility.priv_key','roles.name','user_facility.role_id')
        ->get();

    $superadmin = $is_super_admin->is_super_admin;
    $specialities = (object) $specialitiesAndRoles;

    $response = ['is_super_admin' => $superadmin, 'facilities' => $specialities];


    $userRoles = DB::table('roles')
        ->join('user_facility', 'roles.id', 'user_facility.role_id')
        ->where('user_facility.user_id', Auth::user()->id)
        ->value('roles.name');
    if ($access_module) {
        $module = $this->modules->find($access_module->module_id);



        $user = DB::table('verify_users')->where('user_id', $currentUser->id)->first();

        if ($user) {
           DB::table('verify_users')->where('id', $user->id)->update([
                'token' => $token,
            ]);
            DB::table('verify_users')->insert([
                'token' => $token,
                'user_id' => $currentUser->id,
                'role' => $userRoles
            ]);
        } else {
            DB::table('verify_users')->insert([
                'token' => $token,
                'user_id' => $currentUser->id,
                'role' => $userRoles
            ]);
        }


        if ($module->slug == 'medical-doctors') {

            $md_db = DB::connection('doctorDB');
            $user = $md_db->table('auth_token')->where('user_id', $currentUser->id)->first();

            $md_db = DB::connection('doctorDB');
            $user = $md_db->table('auth_token')->where('user_id', $currentUser->id)->first();

            if ($user) {
                $md_db->table('auth_token')->where('id', $user->id)->update([
                    'token' => $token,
                    'isValid' => 1,

                ]);
            } else {
                $md_db->table('auth_token')->insert([
                    'token' => $token,
                    'isValid' => 1,
                    'user_id' => $currentUser->id
                ]);
            }
        }
    } else {
        $module = NULL;
    }
    $user_data = $this->GetUserInfo();
    return response()->json([
        'status' => true,
        'message' => 'Login successfully',
        'data' => [
            'token' => $token,
            'userData' => $currentUser,
            'userInfo' => $user_data,
            'privileges' => $response,
            'module' => $module
        ]
    ]);

Я обрабатываю несколько сценариев в своем API входа в систему, поэтому он выглядит большим, и теперь я хочу войти в систему с помощью lat и long с моей текущей позиции на расстоянии около 800 м от ближайшего местоположения.

Как мне добиться этой функциональности?

...