Skip to content

Commit 47257c4

Browse files
stakoviczStakovicz
andauthored
feat (#1247): Speakers Expenses Files CleanCommand (#1288)
* feat (#1247): Speakers Expenses Files CleanCommand * feat (#1247): Ajout dans la crontab * feat (#1247): code review --------- Co-authored-by: Stakovicz <[email protected]>
1 parent a8f16fb commit 47257c4

File tree

5 files changed

+76
-16
lines changed

5 files changed

+76
-16
lines changed

app/config/services.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,11 @@ services:
247247
$legacyBasePath: "%kernel.project_dir%/../htdocs"
248248

249249
AppBundle\SpeakerInfos\SpeakersExpensesStorage:
250+
autowire: true
251+
autoconfigure: true
252+
public: false
250253
arguments:
251-
- "%kernel.project_dir%/../htdocs/uploads/speaker_expenses"
252-
- "/uploads/speaker_expenses"
254+
$basePath: "%kernel.project_dir%/../htdocs/uploads/speaker_expenses"
253255

254256
Twig_Extensions_Extension_Intl:
255257
class: Twig_Extensions_Extension_Intl

clevercloud/cron.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@
1111
"55 15 * * * $ROOT/clevercloud/scripts/deduplicate_cron.sh /usr/bin/php $ROOT/bin/console --env=prod slack-member-notification",
1212
"0 * * * * $ROOT/clevercloud/scripts/deduplicate_cron.sh /usr/bin/php $ROOT/bin/console --env=prod update-user-state",
1313
"32 * * * * $ROOT/clevercloud/scripts/deduplicate_cron.sh /usr/bin/php $ROOT/bin/console --env=prod update-company-member-state",
14-
"0 13 * * 2,4 $ROOT/clevercloud/scripts/deduplicate_cron.sh /usr/bin/php $ROOT/bin/console --env=prod videos:run-notifier"
14+
"0 13 * * 2,4 $ROOT/clevercloud/scripts/deduplicate_cron.sh /usr/bin/php $ROOT/bin/console --env=prod videos:run-notifier",
15+
"17 10 1 * * $ROOT/clevercloud/scripts/deduplicate_cron.sh /usr/bin/php $ROOT/bin/console --env=prod speaker:expenses-files-clean"
1516
]
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace AppBundle\Command;
6+
7+
use AppBundle\SpeakerInfos\SpeakersExpensesStorage;
8+
use Symfony\Component\Console\Attribute\AsCommand;
9+
use Symfony\Component\Console\Command\Command;
10+
use Symfony\Component\Console\Input\InputInterface;
11+
use Symfony\Component\Console\Output\OutputInterface;
12+
13+
#[AsCommand(name: 'speaker:expenses-files-clean')]
14+
class SpeakersExpensesFilesCleanCommand extends Command
15+
{
16+
public function __construct(private readonly SpeakersExpensesStorage $speakersExpensesStorage)
17+
{
18+
parent::__construct();
19+
}
20+
21+
protected function execute(InputInterface $input, OutputInterface $output): int
22+
{
23+
$this->speakersExpensesStorage->cleanFiles();
24+
25+
return self::SUCCESS;
26+
}
27+
}

sources/AppBundle/Event/Model/Repository/EventRepository.php

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
use AppBundle\Event\Model\Ticket;
1010
use AppBundle\Ting\DateTimeWithTimeZoneSerializer;
1111
use CCMBenchmark\Ting\Driver\Mysqli\Serializer\Boolean;
12+
use CCMBenchmark\Ting\Exception;
13+
use CCMBenchmark\Ting\Query\QueryException;
1214
use CCMBenchmark\Ting\Repository\CollectionInterface;
1315
use CCMBenchmark\Ting\Repository\HydratorArray;
1416
use CCMBenchmark\Ting\Repository\HydratorSingleObject;
@@ -217,11 +219,10 @@ public function getLastYearEvent(Event $event): Event
217219
}
218220

219221
/**
220-
* @param int $eventCount
221-
*
222-
* @return CollectionInterface
222+
* @throws QueryException
223+
* @throws Exception
223224
*/
224-
public function getPreviousEvents($eventCount)
225+
public function getPreviousEvents(int $eventCount): CollectionInterface
225226
{
226227
$query = $this->getQuery('SELECT * FROM afup_forum WHERE date_debut < NOW() ORDER BY date_debut DESC LIMIT :limit');
227228
$query->setParams(['limit' => $eventCount]);
@@ -230,11 +231,18 @@ public function getPreviousEvents($eventCount)
230231
}
231232

232233
/**
233-
* @param $path
234-
*
235-
* @return Event|null
234+
* @throws QueryException
235+
* @throws Exception
236236
*/
237-
public function getByPath($path)
237+
public function getPreviousEventsBefore(\DateTimeInterface $beforeDatetime): CollectionInterface
238+
{
239+
$query = $this->getQuery('SELECT * FROM afup_forum WHERE date_debut <= :before_date ORDER BY date_debut DESC');
240+
$query->setParams(['before_date' => $beforeDatetime->format('Y-m-d')]);
241+
242+
return $query->query($this->getCollection(new HydratorSingleObject()));
243+
}
244+
245+
public function getByPath(string $path): ?Event
238246
{
239247
return $this->getBy(['path' => $path])->first();
240248
}

sources/AppBundle/SpeakerInfos/SpeakersExpensesStorage.php

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,23 @@
55

66
namespace AppBundle\SpeakerInfos;
77

8+
use AppBundle\Event\Model\Repository\EventRepository;
89
use AppBundle\Event\Model\Speaker;
10+
use Psr\Log\LoggerInterface;
911
use Symfony\Component\Filesystem\Exception\IOException;
1012
use Symfony\Component\Filesystem\Filesystem;
1113
use Symfony\Component\Finder\Finder;
1214
use Symfony\Component\HttpFoundation\File\Exception\FileException;
1315
use Symfony\Component\HttpFoundation\File\UploadedFile;
1416

15-
class SpeakersExpensesStorage
17+
final class SpeakersExpensesStorage
1618
{
17-
private $basePath;
1819
private Filesystem $filesystem;
1920

20-
public function __construct($basePath)
21-
{
22-
$this->basePath = $basePath;
21+
public function __construct(private readonly string $basePath,
22+
private readonly EventRepository $eventRepository,
23+
private readonly LoggerInterface $logger
24+
) {
2325
$this->filesystem = new Filesystem();
2426
}
2527

@@ -66,6 +68,26 @@ public function getFiles(Speaker $speaker): array
6668
return $files;
6769
}
6870

71+
public function cleanFiles($duration = 'P12M'): void
72+
{
73+
$beforeDate = new \DateTime();
74+
$beforeDate->sub(new \DateInterval($duration));
75+
76+
$this->logger->info(sprintf('Speakers Expenses Storage clean before "%s"', $beforeDate->format('Y-m-d')));
77+
78+
$events = $this->eventRepository->getPreviousEventsBefore($beforeDate);
79+
foreach ($events as $event) {
80+
$this->logger->info(sprintf('Event "%s" #%d [%s]: ', $event->getTitle(), $event->getId(), $event->getDateStart()->format('Y-m-d')));
81+
82+
$directory = $this->basePath . '/' . $event->getId();
83+
84+
if ($this->filesystem->exists($directory)) {
85+
$this->filesystem->remove($directory);
86+
$this->logger->info(sprintf('Removing "%s" directory OK', $directory));
87+
}
88+
}
89+
}
90+
6991
private function createDirectory(string $directory): void
7092
{
7193
try {

0 commit comments

Comments
 (0)