get(); // return response()->json([ // 'success' => true, // 'user_ranking' => $userRanking, // 'message' => 'Data Fetch Successfully!.', // ]); // } else { // return response()->json([ // 'success' => false, // 'message' => 'Authentication failed.', // ]); // } // } catch (\Exception $e) { // \Log::error("User ranking retrieval failed: " . $e->getMessage()); // return response()->json([ // 'success' => false, // 'message' => 'Something went wrong.', // ]); // } // } public function get_user_ranking($sortOrder = 'desc') { try { $token = readHeaderToken(); if ($token) { $user_id = $token['sub']; // Retrieve the user's ranking and related user details $userRanking = LeaderboardMaster::with('user', 'user_data') ->orderBy('total_score', $sortOrder) ->get(); return response()->json([ 'success' => true, 'user_ranking' => $userRanking, 'message' => 'Data Fetch Successfully!.', ]); } else { return response()->json([ 'success' => false, 'message' => 'Authentication failed.', ]); } } catch (\Exception $e) { \Log::error("User ranking retrieval failed: " . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Something went wrong.', ]); } } public function get_user_gender(Request $request) { try { $token = readHeaderToken(); if ($token) { $user_id = $token['sub']; $filters = $request->gender; $query = LeaderboardMaster::with(['user', 'user_data']); // Apply filters if ($filters && in_array($filters, ['male', 'female'])) { $query->whereHas('user_data', function ($query) use ($filters) { $query->where('gender', '=', $filters); }); } // Add more filter conditions if needed $manage_activity = $query->get()->toArray(); return response()->json([ 'success' => true, 'message' => 'Data fetched successfully.', 'result' => $manage_activity ]); } else { return response()->json([ 'success' => false, 'message' => 'Authentication failed.', ]); } } catch (\Exception $e) { \Log::error("Activity data listing failed: " . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Something went wrong.', ]); } } public function get_user_group_level(Request $request) { try { $token = readHeaderToken(); if ($token) { $user_id = $token['sub']; $groupLevelFilter = $request->input('group_level'); $elites = null; $gameChangers = null; $underdogs = null; $elites_user_id = []; if ($groupLevelFilter === 'elites') { $elites = GroupLevelElites(); // print_r($elites['elites_user_id']); // exit; } elseif ($groupLevelFilter === 'gameChangers') { $gameChangers = GroupLevelGameChanger(); } elseif ($groupLevelFilter === 'underdogs') { $underdogs_user_id = []; $game_changer_data = GroupLevelGameChanger(); $users_id = $game_changer_data['all_top_users_id']; $underdog = LeaderboardMaster::whereNotIn('user_id', $users_id)->orderBy('total_score', 'desc')->get(); foreach ($underdog as $k => $val){ $underdogs_user_id[] = $val->user_id; } // dd($underdogs_user_id); $underdogs['underdogs'] = $underdog; $underdogs['underdogs_user_id'] = $underdogs_user_id; } else { // Invalid group level filter return response()->json([ 'success' => false, 'message' => 'Invalid group level filter.', ]); } return [ 'elites' => $elites, 'gameChangers' => $gameChangers, 'underdogs' => $underdogs, ]; } } catch (\Exception $e) { \Log::error("Activity data listing failed: " . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Something went wrong.', ]); } } // public function filter_users(Request $request) { // try { // $token = readHeaderToken(); // if ($token) { // $user_id = $token['sub']; // // $filters = $request->input('gender'); // $groupLevelFilter = $request->input('group_level'); // // $query = LeaderboardMaster::with(['user', 'user_data']); // // // Apply gender filter // if ($filters && in_array($filters, ['male', 'female'])) { // $query->whereHas('user_data', function ($query) use ($filters) { // $query->where('gender', '=', $filters); // }); // } elseif ($filters !== null) { // // Invalid gender filter // return response()->json([ // 'success' => false, // 'message' => 'Invalid gender filter.', // ]); // } // // Apply group level filter // $elites = null; // $gameChangers = null; // $underdogs = null; // $elites_user_id = []; // // if ($groupLevelFilter === 'elites') { // $elites = GroupLevelElites(); // // // Filter by gender // if ($filters && in_array($filters, ['male', 'female'])) { // $elites = array_filter($elites, function ($elite) use ($filters) { // return $elite['gender'] === $filters; // }); // } // } elseif ($groupLevelFilter === 'gameChangers') { // $gameChangers = GroupLevelGameChanger(); // // // Filter by gender // if ($filters && in_array($filters, ['male', 'female'])) { // $gameChangers = array_filter($gameChangers, function ($gameChanger) use ($filters) { // return $gameChanger['gender'] === $filters; // }); // } // } elseif ($groupLevelFilter === 'underdogs') { // $game_changer_data = GroupLevelGameChanger(); // $users_id = $game_changer_data['all_top_users_id']; // $query->whereNotIn('user_id', $users_id)->orderBy('total_score', 'desc'); // // // Apply gender filter //if ($filters && in_array($filters, ['male', 'female'])) { // $query->whereHas('user_data', function ($query) use ($filters) { // $query->where('gender', '=', $filters); // }); //} elseif ($filters !== null) { // // Invalid gender filter // return response()->json([ // 'success' => false, // 'message' => 'Invalid gender filter.', // ]); //} // // $users = $query->get()->toArray(); // // return response()->json([ // 'success' => true, // 'message' => 'Data fetched successfully.', // 'result' => [ // 'users' => $users, // 'elites' => $elites, // 'gameChangers' => $gameChangers, // 'underdogs' => $underdogs, // ], // ]); // } else { // return response()->json([ // 'success' => false, // 'message' => 'Authentication failed.', // ]); // } // } // }catch (\Exception $e) { // \Log::error("User filtering failed: " . $e->getMessage()); // return response()->json([ // 'success' => false, // 'message' => 'Something went wrong.', // ]); // } // } public function get_user_data(Request $request) { try { $token = readHeaderToken(); if ($token) { $user_id = $token['sub']; //get user data for check gender and group level $user = User::with('user_detail')->find($user_id); //request inputs $sortOrder = $request->input('sort_order'); $gender = "all"; // if($gender != "all"){ // $gender = $request->input('gender'); // } // else{ // $gender = "all"; // } $groupLevelFilter = $request->input('group_level'); // Retrieve the user's ranking and related user details $query = LeaderboardMaster::with('user', 'user_data','user.stepCount'); // for gender // $gender = "all"; if($request->has('gender')){ $gender = $request->input('gender'); // Apply gender filter if ($gender != "all") { $query->whereHas('user_data', function ($query) use ($gender) { $query->where('gender', '=', $gender); }); } } // else{ // $gender = $user->user_detail->gender; // if($gender){ // if ($gender && in_array($gender, ['male', 'female'])) { // $query->whereHas('user_data', function ($query) use ($gender) { // $query->where('gender', '=', $gender); // }); // } // } // } //for group level $elite = GroupLevelElites(); $game_changer = GroupLevelGameChanger(); $flattenedEliteArray = Arr::flatten($elite['elites_user_id']); $flattenedGameChangerArray = Arr::flatten($game_changer['all_top_users_id']); $filteredGameChangerArray = array_diff($flattenedGameChangerArray, $flattenedEliteArray); if($request->has('group_level')){ if ($groupLevelFilter === 'elites') { // Apply elites filter $group_level = "elites"; $query->whereIn('user_id', $flattenedEliteArray); } elseif ($groupLevelFilter === 'gameChangers') { // Apply gameChangers filter $group_level = "gameChangers"; $query->whereIn('user_id', $filteredGameChangerArray); } elseif ($groupLevelFilter === 'underdogs') { // Apply underdogs filter $group_level = "underdogs"; $query->whereNotIn('user_id', $flattenedGameChangerArray); } else { return response()->json([ 'success' => false, 'message' => 'Invalid group level filter.', ]); } } else{ if (in_array($user_id, $flattenedEliteArray)) { $group_level = "elites"; $query->whereIn('user_id', $flattenedEliteArray); } elseif (in_array($user_id, $filteredGameChangerArray)) { $group_level = "gameChangers"; $query->whereIn('user_id', $filteredGameChangerArray); } else { $group_level = "underdogs"; $query->whereNotIn('user_id', $flattenedGameChangerArray); } } // Apply sorting if ($sortOrder === 'asc') { $query->orderBy('total_score', 'asc'); } else { $query->orderBy('total_score', 'desc'); } //final query $user_data = $query->get()->toArray(); return response()->json([ 'success' => true, // 'user_data' => $user_data, 'message' => 'Data Fetch Successfully!.', 'user_data' => $user_data, 'gender' => $gender, 'group_level' => $group_level ]); } else { return response()->json([ 'success' => false, 'message' => 'Authentication failed.', ]); } } catch (\Exception $e) { \Log::error("Data retrieval failed: " . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Something went wrong.', ]); } } public function get_user_data_home(Request $request) { try { $token = readHeaderToken(); if ($token) { $user_id = $token['sub']; //get user data for check gender and group level $user = User::with('user_detail')->find($user_id); //request inputs $sortOrder = $request->input('sort_order'); $gender = "all"; // if($gender != "all"){ // $gender = $request->input('gender'); // } // else{ // $gender = "all"; // } $groupLevelFilter = $request->input('group_level'); // Retrieve the user's ranking and related user details $query = LeaderboardMaster::with('user', 'user_data'); // for gender // $gender = "all"; if($request->has('gender')){ $gender = $request->input('gender'); // Apply gender filter if ($gender != "all") { $query->whereHas('user_data', function ($query) use ($gender) { $query->where('gender', '=', $gender); }); } } // else{ // $gender = $user->user_detail->gender; // if($gender){ // if ($gender && in_array($gender, ['male', 'female'])) { // $query->whereHas('user_data', function ($query) use ($gender) { // $query->where('gender', '=', $gender); // }); // } // } // } //for group level $elite = GroupLevelElites(); $game_changer = GroupLevelGameChanger(); $flattenedEliteArray = Arr::flatten($elite['elites_user_id']); $flattenedGameChangerArray = Arr::flatten($game_changer['all_top_users_id']); $filteredGameChangerArray = array_diff($flattenedGameChangerArray, $flattenedEliteArray); if($request->has('group_level')){ if ($groupLevelFilter === 'elites') { // Apply elites filter $group_level = "elites"; $query->whereIn('user_id', $flattenedEliteArray); } elseif ($groupLevelFilter === 'gameChangers') { // Apply gameChangers filter $group_level = "gameChangers"; $query->whereIn('user_id', $filteredGameChangerArray); } elseif ($groupLevelFilter === 'underdogs') { // Apply underdogs filter $group_level = "underdogs"; $query->whereNotIn('user_id', $flattenedGameChangerArray); } else { return response()->json([ 'success' => false, 'message' => 'Invalid group level filter.', ]); } } else{ if (in_array($user_id, $flattenedEliteArray)) { $group_level = "elites"; $query->whereIn('user_id', $flattenedEliteArray); } elseif (in_array($user_id, $filteredGameChangerArray)) { $group_level = "gameChangers"; $query->whereIn('user_id', $filteredGameChangerArray); } else { $group_level = "underdogs"; $query->whereNotIn('user_id', $flattenedGameChangerArray); } } // Apply sorting if ($sortOrder === 'asc') { $query->orderBy('total_score', 'asc'); } else { $query->orderBy('total_score', 'desc'); } //final query $user_data = $query->get()->toArray(); return response()->json([ 'success' => true, // 'user_data' => $user_data, 'message' => 'Data Fetch Successfully!.', 'user_data' => $user_data, 'gender' => $gender, 'group_level' => $group_level ]); } else { return response()->json([ 'success' => false, 'message' => 'Authentication failed.', ]); } } catch (\Exception $e) { \Log::error("Data retrieval failed: " . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Something went wrong.', ]); } } public function ranking_position(){ try { $token = readHeaderToken(); $currentYear = now()->format('Y'); // $currentYear = 2023; $currentMonth = Carbon::now()->format('m'); // $currentMonth = 9; $users = User::where('status','1')->get(); foreach ($users as $user) { $userId = $user->id; $user = User::with('user_detail')->find($userId); $query = LeaderboardMaster::with('user', 'user_data'); //get gender // $gender = $user->user_detail->gender ; // if ($gender && in_array($gender, ['male', 'female'])) { // $query->whereHas('user_data', function ($query) use ($gender) { // $query->where('gender', '=', $gender); // }); // } //for group level $elite = GroupLevelElites(); $game_changer = GroupLevelGameChanger(); $flattenedEliteArray = Arr::flatten($elite['elites_user_id']); $flattenedGameChangerArray = Arr::flatten($game_changer['all_top_users_id']); $filteredGameChangerArray = array_diff($flattenedGameChangerArray, $flattenedEliteArray); if (in_array($userId, $flattenedEliteArray)) { $group_level = 1; $query->whereIn('user_id', $flattenedEliteArray); $user_list = $query->orderBy('total_score', 'desc')->get(); } elseif (in_array($userId, $filteredGameChangerArray)) { $group_level = 2; $query->whereIn('user_id', $filteredGameChangerArray); $user_list = $query->orderBy('total_score', 'desc')->get(); } else { $group_level = 3; $query->whereNotIn('user_id', $flattenedGameChangerArray); $user_list = $query->orderBy('total_score', 'desc')->get(); } $position = null; foreach ($user_list as $index => $user){ if($user->user_id == $userId){ $position = $index + 1; break; } } $existingPositionRecord = MonthlyPosition::where([ 'user_id' => $userId, 'month' => Carbon::createFromDate($currentYear, $currentMonth, 1)->format('Y-m'), ])->first(); if ($existingPositionRecord){ if($existingPositionRecord->group_level >= $group_level){ if($position < $existingPositionRecord->position || $group_level != $existingPositionRecord->group_level) { $monthDate = Carbon::createFromDate($currentYear, $currentMonth, 1)->format('Y-m'); MonthlyPosition::updateOrCreate([ 'user_id' => $userId, 'month' => $monthDate, 'position' => $position, 'group_levels' => $group_level, ]); } } }else{ $monthDate = Carbon::createFromDate($currentYear, $currentMonth, 1)->format('Y-m'); MonthlyPosition::updateOrCreate([ 'user_id' => $userId, 'month' => $monthDate, 'position' => $position, 'group_levels' => $group_level, ]); } } return response()->json([ 'success' => true, 'message' => 'Position Stored Successfully!.', ]); } catch (Exception $ex) { \Log::error("Data retrieval failed: " . $e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Something went wrong.', ]); } } public function get_user_position(){ try { $token = readHeaderToken(); if ($token) { $user_id = $token['sub']; $currentYear = now()->format('Y'); $yearStartDate = Carbon::createFromDate($currentYear, 1, 1)->format('Y-m-d'); $yearEndDate = Carbon::createFromDate($currentYear, 12, 31)->format('Y-m-d'); // Get all the data for the user for the entire current year $user_monthly_positions = MonthlyPosition::whereBetween('month', [$yearStartDate, $yearEndDate]) ->where('user_id', $user_id) ->orderBy('month', 'asc') ->get(); // Create empty records for missing months $allMonths = collect([]); $currentMonthDate = Carbon::createFromDate($currentYear, 1, 1); for ($month = 1; $month <= 12; $month++) { $allMonths->push($currentMonthDate->format('Y-m')); $currentMonthDate->addMonth(); } // Merge empty records for missing months into the original collection $user_monthly_positions = $allMonths->map(function ($month) use ($user_monthly_positions, $user_id) { return $user_monthly_positions->firstWhere('month', $month) ?? new MonthlyPosition([ 'user_id' => $user_id, 'month' => $month, 'position' => null, // You can set a default value for the position here ]); }); return response()->json([ 'success' => true, 'message' => 'Data Fetch Successfully', 'monthly_positions' => $user_monthly_positions, ]); }else { return response()->json([ 'success' => false, 'message' => 'Authentication failed.', ]); } } catch (Exception $ex) { \Log::error("Data retrieval failed: " . $ex->getMessage()); return response()->json([ 'success' => false, 'message' => 'Something went wrong.', ]); } } public function get_daily_user_position(){ try { $token = readHeaderToken(); if ($token) { $userId = $token['sub']; $user = User::with('user_detail')->find($userId); // $user_list = LeaderboardMaster::orderBy('total_score', 'desc')->get(); $query = LeaderboardMaster::with('user', 'user_data'); //get gender // $gender = $user->user_detail->gender; // if($gender){ // if ($gender && in_array($gender, ['male', 'female'])) { // $query->whereHas('user_data', function ($query) use ($gender) { // $query->where('gender', '=', $gender); // }); // } // } //for group level $elite = GroupLevelElites(); $game_changer = GroupLevelGameChanger(); $flattenedEliteArray = Arr::flatten($elite['elites_user_id']); $flattenedGameChangerArray = Arr::flatten($game_changer['all_top_users_id']); $filteredGameChangerArray = array_diff($flattenedGameChangerArray, $flattenedEliteArray); if (in_array($userId, $flattenedEliteArray)) { $group_level = "elites"; $query->whereIn('user_id', $flattenedEliteArray); } elseif (in_array($userId, $filteredGameChangerArray)) { $group_level = "gameChangers"; $query->whereIn('user_id', $filteredGameChangerArray); } else { $group_level = "underdogs"; $query->whereNotIn('user_id', $flattenedGameChangerArray); } //final query $user_list = $query->orderBy('total_score', 'desc')->get(); $position = null; foreach ($user_list as $index => $user){ if($user->user_id == $userId){ $position = $index + 1; break; } } return response()->json([ 'success' => true, 'message' => 'Data Fetch Successfully', 'daily_position' => $position, ]); }else { return response()->json([ 'success' => false, 'message' => 'Authentication failed.', ]); } } catch (Exception $ex) { \Log::error("Data retrieval failed: " . $ex->getMessage()); return response()->json([ 'success' => false, 'message' => 'Something went wrong.', ]); } } }