feat: calendar

This commit is contained in:
2026-05-18 16:32:28 +02:00
parent fe78c000f0
commit 5a81c27665
4 changed files with 112 additions and 0 deletions
@@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Http\Requests\MealPostCalendarRequest;
use App\Http\Requests\MealPostsRequest;
use App\Http\Requests\MealPostStatsRequest;
use App\Http\Resources\MealPostsResource;
@@ -65,6 +66,36 @@ class MealPostController extends Controller
]);
}
public function calendar(MealPostCalendarRequest $request): JsonResponse
{
$month = $request->validated('month') ?? now()->format('Y-m');
$referenceDate = CarbonImmutable::createFromFormat('!Y-m', $month);
$startDate = $referenceDate->startOfMonth();
$endDate = $referenceDate->endOfMonth();
$days = MealPosts::query()
->where('user_id', $request->user()->getKey())
->whereBetween('eaten_at', [$startDate->startOfDay(), $endDate->endOfDay()])
->selectRaw('DATE(eaten_at) as date, COUNT(*) as meals_count')
->groupByRaw('DATE(eaten_at)')
->orderBy('date')
->get()
->map(fn (MealPosts $mealPost): array => [
'date' => CarbonImmutable::parse((string) $mealPost->date)->toDateString(),
'mealsCount' => (int) $mealPost->meals_count,
])
->values();
return response()->json([
'data' => [
'month' => $referenceDate->format('Y-m'),
'startDate' => $startDate->toDateString(),
'endDate' => $endDate->toDateString(),
'days' => $days,
],
]);
}
public function store(MealPostsRequest $request): JsonResponse
{
$data = $this->getValidatedDataWithImageUrl($request);