FileCacheFlusher::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 5
rs 10
1
<?php
2
3
namespace Silviooosilva\CacheerPhp\CacheStore\CacheManager;
4
5
use Silviooosilva\CacheerPhp\Exceptions\CacheFileException;
6
use Silviooosilva\CacheerPhp\Helpers\CacheFileHelper;
7
8
/**
9
 * Class FileCacheFlusher
10
 * @author Sílvio Silva <https://github.com/silviooosilva>
11
 * @package Silviooosilva\CacheerPhp
12
 */
13
class FileCacheFlusher
14
{
15
    /**
16
    * @var FileCacheManager
17
    */
18
    private FileCacheManager $fileManager;
19
20
    /**
21
    * @var string $cacheDir
22
    */
23
    private string $cacheDir;
24
25
    /**
26
    * @var string $lastFlushTimeFile
27
    */
28
    private string $lastFlushTimeFile;
29
30
    /**
31
     * FileCacheFlusher constructor.
32
     *
33
     * @param FileCacheManager $fileManager
34
     * @param string $cacheDir
35
     */
36
    public function __construct(FileCacheManager $fileManager, string $cacheDir)
37
    {
38
        $this->fileManager = $fileManager;
39
        $this->cacheDir = $cacheDir;
40
        $this->lastFlushTimeFile = "$cacheDir/last_flush_time";
41
    }
42
43
    /**
44
    * Flushes all cache items and updates the last flush timestamp.
45
    *
46
    * @return void
47
    */
48
    public function flushCache(): void
49
    {
50
        $this->fileManager->clearDirectory($this->cacheDir);
51
        file_put_contents($this->lastFlushTimeFile, time());
52
    }
53
54
    /**
55
    * Handles the auto-flush functionality based on options.
56
    *
57
    * @param array $options
58
    * @return void
59
    */
60
    public function handleAutoFlush(array $options): void
61
    {
62
        if (isset($options['flushAfter'])) {
63
            $this->scheduleFlush($options['flushAfter']);
64
        }
65
    }
66
67
    /**
68
     * Schedules a flush operation based on the provided interval.
69
     *
70
     * @param string $flushAfter
71
     * @return void
72
     * @throws CacheFileException
73
     */
74
    private function scheduleFlush(string $flushAfter): void
75
    {
76
        $flushAfterSeconds = CacheFileHelper::convertExpirationToSeconds($flushAfter);
77
78
        if (!$this->fileManager->fileExists($this->lastFlushTimeFile)) {
79
            $this->fileManager->writeFile($this->lastFlushTimeFile, time());
80
            return;
81
        }
82
83
        $lastFlushTime = (int) $this->fileManager->readFile($this->lastFlushTimeFile);
84
85
        if ((time() - $lastFlushTime) >= $flushAfterSeconds) {
86
            $this->flushCache();
87
            $this->fileManager->writeFile($this->lastFlushTimeFile, time());
88
        }
89
    }
90
}
91