831 lines
34 KiB
PHP
831 lines
34 KiB
PHP
<?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.',
|
|
]);
|
|
}
|
|
|
|
}
|
|
}
|