/
itp_practice
/
itp_backend
Обзор
Документация
Войти
/
itp_practice
/
itp_backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/Repositories/Admin/DatabaseProxyRepository.php
90 строк
3 KB
vivanenko
fix proxies edit
29 май 2025, 22:19
29 май 2025, 22:19
c282f26
Код
Авторство
О чём код?
<?php namespace App\Repositories\Admin; use App\Contracts\Admin\ProxyRepositoryInterface; use App\DTOs\Admin\ProxyDTO; use App\Enums\ProxyType; use App\Models\Proxy; use Carbon\Carbon; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Facades\DB; class DatabaseProxyRepository implements ProxyRepositoryInterface { public function paginate(int $perPage = 15, array $columns = ['*']): LengthAwarePaginator { $paginator = Proxy::query()->paginate($perPage, $columns); $items = $paginator->items(); $dtos = array_map(fn($proxy) => $this->toDTO($proxy), $items); // Laravel paginator expects Eloquent models, but for API we return DTOs // So just return paginator with mapped items for now $paginator->setCollection(collect($dtos)); return $paginator; } public function find(int $id, array $columns = ['*']): ?ProxyDTO { $proxy = Proxy::find($id, $columns); return $proxy ? $this->toDTO($proxy) : null; } public function create(array $data): ProxyDTO { $proxy = Proxy::create($data); return $this->toDTO($proxy); } public function update(int $id, array $data): ?ProxyDTO { $proxy = Proxy::find($id); if (!$proxy) { return null; } $proxy->update($data); return $this->toDTO($proxy); } public function delete(int $id): bool { return Proxy::destroy($id) > 0; } public function batchCreate(array $proxies): array { $created = []; DB::beginTransaction(); try { foreach ($proxies as $proxyData) { $created[] = $this->toDTO(Proxy::create($proxyData)); } DB::commit(); } catch (\Exception $e) { DB::rollBack(); throw $e; } return $created; } public function all(array $columns = ['*']): array { $proxies = Proxy::all($columns); return $proxies->map(fn($proxy) => $this->toDTO($proxy))->all(); } private function toDTO(Proxy $proxy): ProxyDTO { return ProxyDTO::fromArray([ 'id' => $proxy->id, 'ip' => $proxy->ip, 'port' => $proxy->port, 'type' => $proxy->type->value ?? (string)$proxy->type, 'username' => $proxy->username, 'password' => $proxy->password, 'status' => $proxy->status->value, 'active' => $proxy->is_active ? 'active' : 'inactive', 'created_at' => $proxy->created_at ? (method_exists($proxy->created_at, 'toDateTimeString') ? $proxy->created_at->toDateTimeString() : (string)$proxy->created_at) : null, 'updated_at' => $proxy->updated_at ? (method_exists($proxy->updated_at, 'toDateTimeString') ? $proxy->updated_at->toDateTimeString() : (string)$proxy->updated_at) : null, ]); } }