* переписал функции прототипов в сервисы
* оптимизация доставки контента до клиента * переписал запросы выборок * убрал из подсчета переведенных * добавил сохранение метрикам для вывода в дашборд
This commit is contained in:
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user