fetchesCompany = $fetchesCompany; } /** * @return array */ protected function notification():array { return [ 'title' => 'Fetch Company Average Spending', 'message' => 'You have successfully fetched company average spending' ]; } /** @var FetchesCompany */ private $fetchesCompany; /** * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function logic(Request $request): JsonResponse { $company = $this->fetchesCompany->execute(['id' => $request->route('id')]); $totalPaymentsAmount = 0; foreach ($company->bookings as $booking) { $transaction = $booking->transactions()->where('type', TransactionType::PAYMENT)->sum('amount'); $totalPaymentsAmount += $transaction; } $date_age = date_diff($company->created_at, date_create('now'))->format("%a"); $average = $totalPaymentsAmount / $date_age; return $this->response(['average_spending' => $average]); } }