Files
yuezi-saas/backend/app/Http/Controllers/Client/MealController.php
T

94 lines
2.5 KiB
PHP

<?php
namespace App\Http\Controllers\Client;
use App\Http\Controllers\Controller;
use App\Models\Crm\Customer;
use App\Models\Meal\DailyMealPlan;
use App\Models\Meal\MealReview;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
class MealController extends Controller
{
/**
* 我的用膳列表(分页)
*/
public function list(Request $request): JsonResponse
{
/** @var Customer $customer */
$customer = $request->user();
$query = DailyMealPlan::withoutGlobalScope('store')
->where('customer_id', $customer->id)
->with('review');
// 按指定日期筛选
if ($request->filled('date')) {
$query->whereDate('plan_date', $request->input('date'));
}
// 最近N天
if ($request->filled('days') && !$request->filled('date')) {
$days = (int) $request->input('days', 7);
$query->where('plan_date', '>=', Carbon::today()->subDays($days - 1));
}
return $this->paginate(
$query->orderByDesc('plan_date')->paginate(20)
);
}
/**
* 今日用膳
*/
public function today(Request $request): JsonResponse
{
/** @var Customer $customer */
$customer = $request->user();
$list = DailyMealPlan::withoutGlobalScope('store')
->where('customer_id', $customer->id)
->whereDate('plan_date', today())
->get();
return $this->success($list);
}
/**
* 提交膳食点评
*/
public function review(Request $request, int $planId): JsonResponse
{
/** @var Customer $customer */
$customer = $request->user();
$validated = $request->validate([
'rating' => 'required|integer|min:1|max:5',
'content' => 'nullable|string|max:500',
]);
// 确认该膳食计划属于当前客户
$plan = DailyMealPlan::withoutGlobalScope('store')
->where('id', $planId)
->where('customer_id', $customer->id)
->first();
if (!$plan) {
return $this->error('膳食记录不存在或无权操作', 40401, 404);
}
$review = MealReview::updateOrCreate(
['daily_meal_plan_id' => $planId],
[
'score' => $validated['rating'],
'content' => $validated['content'] ?? null,
'customer_id' => $customer->id,
]
);
return $this->success($review);
}
}