| | |
| | | use JVBase\managers\Cache; |
| | | use JVBase\managers\CustomTable; |
| | | use LogicException; |
| | | use Throwable; |
| | | |
| | | class Storage |
| | | { |
| | |
| | | public function __construct() |
| | | { |
| | | $this->defineTables(); |
| | | $this->cache = Cache::for('queue', DAY_IN_SECONDS)->user(); |
| | | $this->cache = Cache::for('queue', null, DAY_IN_SECONDS)->user(); |
| | | } |
| | | |
| | | public function hasProcessingOperations(): bool |
| | |
| | | |
| | | public function insert(Operation $op): bool |
| | | { |
| | | $result = $this->table->insert([ |
| | | 'id' => $op->id, |
| | | 'type' => $op->type, |
| | | 'user_id' => $op->userId, |
| | | $existing = $this->find($op->id); |
| | | if ($existing && in_array($existing->state, ['completed', 'processing'] )) { |
| | | $op->id = Queue::generateId($op->userId); |
| | | } |
| | | $result = $this->table->findOrCreate([ |
| | | 'id' => $op->id, |
| | | 'type' => $op->type, |
| | | 'user_id' => $op->userId, |
| | | ],[ |
| | | 'request_data' => json_encode($op->requestData), |
| | | 'total_items' => $op->totalItems, |
| | | 'processed_items' => $op->processedItems, |
| | |
| | | $result = $callback(); |
| | | $this->table->commit(); |
| | | return $result; |
| | | } catch (\Throwable $e) { |
| | | } catch (Throwable $e) { |
| | | $this->table->rollback(); |
| | | error_log('[Storage] Transaction rolled back: ' . $e->getMessage()); |
| | | throw $e; |
| | |
| | | } |
| | | |
| | | /** |
| | | * @throws \Throwable |
| | | * @throws Throwable |
| | | */ |
| | | public function replaceDependency(string $fromId, string $toId): int |
| | | { |
| | |
| | | $s = $stats[0] ?? null; |
| | | if (!$s) continue; |
| | | |
| | | $this->stats->table->query(" |
| | | $this->stats->queryResults(" |
| | | INSERT INTO {table} (date, type, total_operations, successful_operations, failed_permanent_operations, total_items_processed) |
| | | VALUES (%s, %s, %d, %d, %d, %d) |
| | | ON DUPLICATE KEY UPDATE |