/
itp_practice
/
itp_backend
Обзор
Документация
Войти
/
itp_practice
/
itp_backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/Repositories/Admin/ArrayPurchaseRepository.php
152 строки
5 KB
vivanenko
refactoring
21 май 2025, 20:24
21 май 2025, 20:24
1a1e745
Код
Авторство
О чём код?
<?php namespace App\Repositories\Admin; use App\Contracts\Admin\PurchaseRepositoryInterface; use App\DTOs\Admin\PurchaseData; use App\DTOs\Admin\PurchaseDTO; use Carbon\Carbon; class ArrayPurchaseRepository implements PurchaseRepositoryInterface { private array $purchases = []; public function __construct() { // Add some mock data $this->purchases = [ 1 => [ 'id' => 1, 'user_id' => 1, 'tariff_level' => 'Pro', 'amount' => 29.99, 'currency' => 'USD', 'status' => 'completed', 'payment_method' => 'stripe', 'transaction_id' => 'txn_123456', 'payment_details' => [ 'card_last4' => '4242', 'card_brand' => 'visa', ], 'created_at' => '2024-03-01 10:00:00', 'updated_at' => '2024-03-01 10:00:00', ], 2 => [ 'id' => 2, 'user_id' => 2, 'tariff_level' => 'Enterprise', 'amount' => 99.99, 'currency' => 'USD', 'status' => 'pending', 'payment_method' => 'crypto', 'transaction_id' => null, 'payment_details' => [ 'wallet_address' => '0x1234...', 'network' => 'ETH', ], 'created_at' => '2024-03-15 15:30:00', 'updated_at' => '2024-03-15 15:30:00', ], ]; } public function all(array $columns = ['*']): array { return array_map(fn ($purchase) => PurchaseDTO::fromArray($purchase), $this->purchases); } public function paginate(int $perPage = 15, array $columns = ['*']): array { $page = request()->get('page', 1); $total = count($this->purchases); $offset = ($page - 1) * $perPage; $items = array_slice($this->purchases, $offset, $perPage); return [ 'data' => array_map(fn ($purchase) => PurchaseDTO::fromArray($purchase), $items), 'total' => $total, 'per_page' => $perPage, 'current_page' => $page, 'last_page' => ceil($total / $perPage), ]; } public function find(int $id, array $columns = ['*']): ?PurchaseData { return isset($this->purchases[$id]) ? PurchaseDTO::fromArray($this->purchases[$id]) : null; } public function create(array $data): PurchaseData { $id = count($this->purchases) + 1; $now = Carbon::now()->format('Y-m-d H:i:s'); $purchase = array_merge($data, [ 'id' => $id, 'created_at' => $now, 'updated_at' => $now, ]); $this->purchases[$id] = $purchase; return PurchaseData::fromArray($purchase); } public function update(int $id, array $data): PurchaseData { $this->purchases[$id] = array_merge($this->purchases[$id], $data, [ 'updated_at' => Carbon::now()->format('Y-m-d H:i:s'), ]); return PurchaseData::fromArray($this->purchases[$id]); } public function delete(int $id): bool { if (!isset($this->purchases[$id])) { return false; } unset($this->purchases[$id]); return true; } public function findByUserId(int $userId): array { $purchases = array_filter($this->purchases, fn($p) => $p['user_id'] === $userId); return array_map(fn($p) => PurchaseDTO::fromArray($p), $purchases); } public function findByStatus(string $status): array { $purchases = array_filter($this->purchases, fn($p) => $p['status'] === $status); return array_map(fn($p) => PurchaseDTO::fromArray($p), $purchases); } public function findByTariffLevel(string $tariffLevel): array { $purchases = array_filter($this->purchases, fn($p) => $p['tariff_level'] === $tariffLevel); return array_map(fn($p) => PurchaseDTO::fromArray($p), $purchases); } public function updateStatus(int $id, string $status): bool { if (!isset($this->purchases[$id])) { return false; } $this->purchases[$id]['status'] = $status; $this->purchases[$id]['updated_at'] = Carbon::now()->format('Y-m-d H:i:s'); return true; } public function updatePaymentDetails(int $id, array $paymentDetails): bool { if (!isset($this->purchases[$id])) { return false; } $this->purchases[$id]['payment_details'] = $paymentDetails; $this->purchases[$id]['updated_at'] = Carbon::now()->format('Y-m-d H:i:s'); return true; } }