save to codehub
This commit is contained in:
830
app/Http/Controllers/API/LeaderBordMasterContoller.php
Normal file
830
app/Http/Controllers/API/LeaderBordMasterContoller.php
Normal file
@@ -0,0 +1,830 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\API;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\LeaderboardMaster;
|
||||
use App\Models\User;
|
||||
use App\Models\UserDetail;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Arr;
|
||||
use App\Models\MonthlyPosition;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class LeaderBordMasterContoller extends Controller {
|
||||
|
||||
// public function get_user_ranking() {
|
||||
// try {
|
||||
// $token = readHeaderToken();
|
||||
// if ($token) {
|
||||
// $user_id = $token['sub'];
|
||||
//
|
||||
// // Retrieve the user's ranking and related user details
|
||||
// $userRanking = LeaderboardMaster::with('user', 'user_details')
|
||||
// ->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.',
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user