mirror = $databases->connection( (string) config('upstream_mirrors.connection', 'business_mirror'), ); } public function netBefore(string $period): ?float { if (! $this->available()) { return null; } return round((float) $this->mirror->table(self::TABLE) ->where('bill_period', '<', $period) ->sum('amount'), 2); } /** @return array{amount:float,count:int,latest_pay_date:?string} */ public function forPeriod(string $period): array { if (! $this->available()) { return ['amount' => 0.0, 'count' => 0, 'latest_pay_date' => null]; } $summary = $this->mirror->table(self::TABLE) ->where('bill_period', $period) ->selectRaw('COALESCE(SUM(amount), 0) AS amount, COUNT(*) AS rows_count, MAX(pay_date) AS latest_pay_date') ->first(); return [ 'amount' => round((float) ($summary->amount ?? 0), 2), 'count' => (int) ($summary->rows_count ?? 0), 'latest_pay_date' => $summary->latest_pay_date ?? null, ]; } private function available(): bool { return $this->mirror->getSchemaBuilder()->hasTable(self::TABLE); } }