330 lines
14 KiB
PHP
330 lines
14 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\API;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\UserOverView;
|
|
use App\Models\LeaderboardMaster;
|
|
use App\Models\User;
|
|
use App\Models\UserDetail;
|
|
use Illuminate\Support\Carbon;
|
|
use Validator;
|
|
use Auth;
|
|
use App\Models\ActivityMaster;
|
|
|
|
class UserOverviewController extends Controller {
|
|
|
|
public function add_user_overview(Request $req) {
|
|
|
|
try {
|
|
$token = readHeaderToken();
|
|
if ($token) {
|
|
$user_id = $token['sub'];
|
|
$todaysDate = Carbon::now()->toDateString();
|
|
// dd($todaysDate);
|
|
$oldUserRankings = LeaderboardMaster::with('user')->get();
|
|
$result = UserOverView::where("user_id", $user_id)
|
|
->where('created_at', $todaysDate)
|
|
// ->orderBy('created_at', 'desc')
|
|
->exists();
|
|
if ($result) {
|
|
$lastOverview = UserOverView::where('user_id', $user_id)
|
|
->orderBy('created_at', 'desc')
|
|
// ->skip(1)
|
|
->first();
|
|
UserOverView::where('user_id', $user_id)
|
|
->whereDay('created_at', now()->day)
|
|
->update([
|
|
"muscle_rate" => $req->muscle_rate,
|
|
"body_fat" => $req->body_fat,
|
|
"skeletal_muscle" => $req->skeletal_muscle,
|
|
"protein" => $req->protein,
|
|
"bmr" => $req->bmr,
|
|
"water" => $req->water,
|
|
"age" => $req->age,
|
|
"weight" => $req->weight,
|
|
]);
|
|
$points = (100 - $req->body_fat) + $req->muscle_rate;
|
|
|
|
$leaderboard = LeaderboardMaster::where('user_id', $user_id)->first();
|
|
if ($leaderboard) {
|
|
// $lastOverview = UserOverView::where('user_id', $user_id)
|
|
// ->orderBy('created_at', 'desc')
|
|
// // ->skip(1)
|
|
// ->first();
|
|
if ($lastOverview) {
|
|
$pointsToDeduct = (100 - $lastOverview->body_fat) + $lastOverview->muscle_rate;
|
|
$leaderboard->total_score -= $pointsToDeduct;
|
|
// dd($leaderboard);
|
|
// Ensure total_score is not negative
|
|
if ($leaderboard->total_score < 0) {
|
|
$leaderboard->total_score = 0;
|
|
}
|
|
}
|
|
|
|
$leaderboard->total_score += $points;
|
|
|
|
|
|
}
|
|
$leaderboard->save();
|
|
|
|
$msg = "User Overview Updated Successfully.";
|
|
} else {
|
|
$tellobj = new UserOverView();
|
|
$tellobj->user_id = $user_id;
|
|
$tellobj->muscle_rate = $req->muscle_rate;
|
|
$tellobj->body_fat = $req->body_fat;
|
|
$tellobj->skeletal_muscle = $req->skeletal_muscle;
|
|
$tellobj->protein = $req->protein;
|
|
$tellobj->bmr = $req->bmr;
|
|
$tellobj->water = $req->water;
|
|
$tellobj->age = $req->age;
|
|
$tellobj->weight = $req->weight;
|
|
$tellobj->save();
|
|
|
|
// Calculate points based on body_fat and muscle_rate
|
|
$points = (100 - $req->body_fat) + $req->muscle_rate ;
|
|
|
|
$userDetails = UserDetail::where('user_id', $user_id)->first();
|
|
if ($userDetails && $userDetails->gender == 'female') {
|
|
$points += 25;
|
|
}else{
|
|
$points += 1;
|
|
}
|
|
|
|
$leaderboard = LeaderboardMaster::where('user_id', $user_id)->first();
|
|
if ($leaderboard) {
|
|
// Deduct points from yesterday's overview
|
|
$lastOverview = UserOverView::where('user_id', $user_id)
|
|
->orderBy('created_at', 'desc')
|
|
->skip(1)
|
|
->first();
|
|
if ($lastOverview) {
|
|
$pointsToDeduct = (100 - $lastOverview->body_fat) + $lastOverview->muscle_rate ;
|
|
$leaderboard->total_score -= $pointsToDeduct;
|
|
// Ensure total_score is not negative
|
|
if ($leaderboard->total_score < 0) {
|
|
$leaderboard->total_score = 0;
|
|
}
|
|
}
|
|
|
|
$leaderboard->total_score += $points;
|
|
} else {
|
|
$leaderboard = new LeaderboardMaster();
|
|
$leaderboard->user_id = $user_id;
|
|
$leaderboard->total_score = $points;
|
|
}
|
|
|
|
$leaderboard->save();
|
|
|
|
$msg = "User Overview Added Successfully.";
|
|
}
|
|
|
|
// Decrease 5 point for every 3 days since the previous overview
|
|
$lastOverview = UserOverView::where('user_id', $user_id)
|
|
->orderBy('created_at', 'desc')
|
|
->skip(1)
|
|
->first();
|
|
|
|
if ($lastOverview) {
|
|
$daysSinceLastOverview = $lastOverview->created_at->diffInDays(now());
|
|
$pointsToDeduct = floor($daysSinceLastOverview / 3);
|
|
|
|
$leaderboard = LeaderboardMaster::where('user_id', $user_id)->first();
|
|
if ($leaderboard) {
|
|
$leaderboard->total_score -= $pointsToDeduct;
|
|
$leaderboard->save();
|
|
}
|
|
}
|
|
$newUserRanking = LeaderboardMaster::where('user_id',$user_id)->first();
|
|
if ($oldUserRankings && $newUserRanking) {
|
|
foreach ($oldUserRankings as $ranking) {
|
|
$previousTotalScore = $ranking->total_score;
|
|
$currentTotalScore = $newUserRanking->total_score;
|
|
if($ranking->user_id==$user_id){
|
|
if ($previousTotalScore === null) {
|
|
$ranking->progress_bar = '0'; // Initial entry
|
|
} elseif ($currentTotalScore > $previousTotalScore) {
|
|
$ranking->progress_bar = '0'; // Total score increased
|
|
$message = "You earned 1 point!";
|
|
} elseif ($currentTotalScore < $previousTotalScore) {
|
|
$ranking->progress_bar = '1'; // Total score decreased
|
|
$message = "Your score decreased.";
|
|
} else {
|
|
$ranking->progress_bar = '2'; // Total score remained the same
|
|
$message = "Your score remains the same.";
|
|
}
|
|
|
|
$ranking->save(); // Save the updated progress_bar value
|
|
}
|
|
|
|
}
|
|
// dd($userRanking,$newUserRanking);
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => $msg,
|
|
'progress_bar' => $message,
|
|
]);
|
|
} else {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Authentication failed.',
|
|
]);
|
|
}
|
|
}
|
|
}catch (\Exception $e) {
|
|
\Log::error("Update Complete/Update Failed : " . $e->getMessage());
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Something Went wrong.',
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function get_user_overview_by_id() {
|
|
try {
|
|
// print_r(User::first()->user);exit;
|
|
$token = readHeaderToken();
|
|
if ($token) {
|
|
$user_id = $token['sub'];
|
|
$data = UserOverView::where('user_id', $user_id)->get();
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Data fetched successfully.',
|
|
'result' => $data
|
|
]);
|
|
} else {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Authentication failed.',
|
|
]);
|
|
}
|
|
} catch (\Exception $e) {
|
|
\Log::error("User data listing Failed : " . $e->getMessage());
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Something Went wrong.',
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function show_user_overview(Request $request) {
|
|
// dd($request->created_at);
|
|
// try {
|
|
|
|
$token = readHeaderToken();
|
|
if ($token) {
|
|
// dd($request->created_at);
|
|
$user_id = $token['sub'];
|
|
if($request->created_at)
|
|
{
|
|
$data = UserOverView::where('user_id',$user_id)->where('created_at', $request->created_at)->first();
|
|
}else{
|
|
$data = UserOverView::where('user_id',$user_id)->get();
|
|
}
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Data fetched successfully.',
|
|
'authorisation' => [
|
|
'user_data' => $data
|
|
]
|
|
]);
|
|
} else {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Authentication failed.',
|
|
]);
|
|
}
|
|
// } catch (\Exception $e) {
|
|
// \Log::error("User data listing Failed : " . $e->getMessage());
|
|
// return response()->json([
|
|
// 'success' => false,
|
|
// 'message' => 'Something Went wrong.',
|
|
// ]);
|
|
// }
|
|
}
|
|
|
|
public function showUserOverview_new(Request $request){
|
|
|
|
// dd($request->created_at);
|
|
try {
|
|
|
|
$token = readHeaderToken();
|
|
if ($token) {
|
|
// dd($request->created_at);
|
|
$user_id = $token['sub'];
|
|
if($request->created_at)
|
|
{
|
|
$data = UserOverView::where('user_id',$user_id)->where('created_at', $request->created_at)->first();
|
|
}else{
|
|
|
|
if($request->data == "week"){
|
|
$last7Days = Carbon::now()->subDays(7);
|
|
$data = UserOverView::where('user_id',$user_id)->where('created_at','>=',$last7Days)->get();
|
|
}elseif($request->data == "month"){
|
|
$last30Days = Carbon::now()->subDays(30);
|
|
$data = UserOverView::where('user_id',$user_id)->where('created_at','>=',$last30Days)->get();
|
|
}elseif($request->data == "year"){
|
|
$lastYear = Carbon::now()->subYear();
|
|
// dd($lastYear);
|
|
$data = UserOverView::where('user_id',$user_id)->where('created_at','>=',$lastYear)->get();
|
|
}
|
|
}
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Data fetched successfully.',
|
|
'authorisation' => [
|
|
'user_data' => $data
|
|
]
|
|
]);
|
|
} else {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Authentication failed.',
|
|
]);
|
|
}
|
|
} catch (\Exception $e) {
|
|
\Log::error("User data listing Failed : " . $e->getMessage());
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Something Went wrong.',
|
|
]);
|
|
}
|
|
|
|
}
|
|
|
|
public function resetPoints(){
|
|
|
|
$currentDate = date('Y-m-d');
|
|
$activityData = ActivityMaster::orderBy('id','desc')->first();
|
|
if($activityData){
|
|
$start_date = $activityData->start_date;
|
|
if($currentDate < $start_date){
|
|
$leaderBoaradData = LeaderboardMaster::all();
|
|
// dd($leaderBoaradData);
|
|
foreach($leaderBoaradData as $data){
|
|
LeaderboardMaster::where('user_id',$data->user_id)->update(['total_score' => 0]);
|
|
}
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Reset Succefully'
|
|
],200);
|
|
}else{
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Season is not end yet!'
|
|
],201);
|
|
}
|
|
}else{
|
|
return response()->json([
|
|
'success' => flase,
|
|
'message' => 'No Activity Found'
|
|
],404);
|
|
}
|
|
|
|
}
|
|
|
|
}
|