Files
vedant-chavan/app/Http/Controllers/API/UserOverviewController.php
vedant-chavan eff0228447 first commit
2024-06-12 20:29:05 +05:30

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);
}
}
}