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_new(Request $request) { // try { $token = readHeaderToken(); if ($token) { $user_id = $token['sub']; // Get user data to check gender and group level $user = User::with('user_detail')->find($user_id); // Request inputs $sortOrder = $request->input('sort_order'); $gender = "all"; $groupLevelFilter = $request->input('group_level'); // Retrieve the user's ranking and related user details $query = LeaderboardMaster::with([ 'user', 'user_data', 'user.latestStepCount' ]); // Apply gender filter if present if ($request->has('gender')) { $gender = $request->input('gender'); if ($gender != "all") { $query->whereHas('user_data', function ($query) use ($gender) { $query->where('gender', '=', $gender); }); } } // Group level filtering logic $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') { $group_level = "elites"; $query->whereIn('user_id', $flattenedEliteArray); } elseif ($groupLevelFilter === 'gameChangers') { $group_level = "gameChangers"; $query->whereIn('user_id', $filteredGameChangerArray); } elseif ($groupLevelFilter === 'underdogs') { $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'); } // Fetch the query results $leaderboardData = $query->get(); // Transform the latest step count to a single element array $leaderboardData->each(function ($item) { $user = $item->user; if ($user) { // $user->append('latestStepCountArray'); $user->setHidden(['latestStepCount']); $user->latest_step_count = $user->latest_step_count_array; } }); // Convert the collection to an array $user_data = $leaderboardData->toArray(); return response()->json([ 'success' => true, '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 pd: " . $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'); // $currentMonth = Carbon::now()->format('m'); // $monthDate = Carbon::createFromDate($currentYear, $currentMonth, 1)->format('Y-m'); // $users = User::where('status', '1')->with('user_detail')->get(); // $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); // $usersGroupedByLevel = [ // 1 => $flattenedEliteArray, // 2 => $filteredGameChangerArray, // 3 => array_diff($users->pluck('id')->toArray(), $flattenedGameChangerArray) // ]; // foreach ($users as $user) { // $userId = $user->id; // $group_level = null; // foreach ($usersGroupedByLevel as $level => $userIds) { // if (in_array($userId, $userIds)) { // $group_level = $level; // $user_list = LeaderboardMaster::with('user', 'user_data') // ->whereIn('user_id', $userIds) // ->orderBy('total_score', 'desc') // ->get(); // break; // } // } // $position = null; // foreach ($user_list as $index => $listedUser) { // if ($listedUser->user_id == $userId) { // $position = $index + 1; // break; // } // } // $existingPositionRecord = MonthlyPosition::where([ // 'user_id' => $userId, // 'month' => $monthDate, // ])->first(); // if ($existingPositionRecord) { // if ($existingPositionRecord->group_level >= $group_level && // ($position < $existingPositionRecord->position || $group_level != $existingPositionRecord->group_level)) { // $existingPositionRecord->update([ // 'position' => $position, // 'group_level' => $group_level, // ]); // } // } else { // MonthlyPosition::create([ // 'user_id' => $userId, // 'month' => $monthDate, // 'position' => $position, // 'group_level' => $group_level, // ]); // } // } return response()->json([ 'success' => true, 'message' => 'Position Stored Successfully!.', ]); } catch (Exception $ex) { Log::error("Data retrieval failed: " . $ex->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.', ]); } } }