* переписал функции прототипов в сервисы

* оптимизация доставки контента до клиента
* переписал запросы выборок
* убрал из подсчета переведенных
* добавил сохранение метрикам для вывода в дашборд
This commit is contained in:
brusnitsyn
2026-02-04 17:05:13 +09:00
parent 9ee33bc517
commit eab78a0291
16 changed files with 1644 additions and 737 deletions

View File

@@ -2,10 +2,43 @@
namespace App\Services;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
class DateRangeService
{
/**
* Получить унифицированный объект диапазона дат
*/
public function getNormalizedDateRange(User $user, ?string $startAt = null, ?string $endAt = null): DateRange
{
[$startDate, $endDate] = $this->getDateRangeForUser($user, $startAt, $endAt);
$startCarbon = Carbon::parse($startDate)->setTimeZone('Asia/Yakutsk');
$endCarbon = Carbon::parse($endDate)->setTimeZone('Asia/Yakutsk');
return new DateRange(
startDate: $startCarbon,
endDate: $endCarbon,
startDateRaw: $startDate,
endDateRaw: $endDate,
isOneDay: $this->isRangeOneDay($startDate, $endDate)
);
}
/**
* Получить диапазон дат из запроса
*/
public function getDateRangeFromRequest(Request $request, User $user): DateRange
{
return $this->getNormalizedDateRange(
$user,
$request->query('startAt', $request->get('startAt')),
$request->query('endAt', $request->get('endAt'))
);
}
public function getDateRangeForUser($user, $startAt = null, $endAt = null): array
{
if ($startAt && $endAt) {
@@ -22,9 +55,7 @@ class DateRangeService
$startDate = $this->parseDate($startAt);
$endDate = $this->parseDate($endAt);
if ($startDate->diffInDays($endDate) === 1.0) return true;
return false;
return $startDate->diffInDays($endDate) === 1.0;
}
private function getCustomDateRange($startAt, $endAt, $user): array
@@ -70,4 +101,28 @@ class DateRangeService
return Carbon::parse($dateInput, 'Asia/Yakutsk');
}
/**
* Конвертировать дату в Carbon объект
*/
public function toCarbon($date): Carbon
{
if ($date instanceof Carbon) {
return $date;
}
if (is_string($date)) {
return Carbon::parse($date, 'Asia/Yakutsk');
}
return Carbon::parse($date);
}
/**
* Получить дату в формате для SQL запроса
*/
public function toSqlFormat($date): string
{
return $this->toCarbon($date)->format('Y-m-d H:i:s');
}
}