mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-10-04 17:04:53 +02:00
bubble fraicheur des completions ajouté
This commit is contained in:
parent
cd8369d08c
commit
93086eba60
18 changed files with 179 additions and 66 deletions
|
@ -16,6 +16,7 @@ use Symfony\Component\HttpFoundation\Request;
|
|||
use function uuid_create;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Twig\Environment;
|
||||
|
||||
final class AdminController extends AbstractController
|
||||
{
|
||||
|
@ -23,7 +24,8 @@ final class AdminController extends AbstractController
|
|||
public function __construct(
|
||||
private EntityManagerInterface $entityManager,
|
||||
private Motocultrice $motocultrice,
|
||||
private BudgetService $budgetService
|
||||
private BudgetService $budgetService,
|
||||
private Environment $twig
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -99,6 +101,10 @@ final class AdminController extends AbstractController
|
|||
$this->entityManager->persist($place);
|
||||
$stats->addPlace($place);
|
||||
$processedCount++;
|
||||
|
||||
// Générer le contenu de l'email avec le template
|
||||
$emailContent = $this->twig->render('admin/email_content.html.twig', ['place' => $place]);
|
||||
$place->setEmailContent($emailContent);
|
||||
} elseif ($updateExisting) {
|
||||
// Mettre à jour les données depuis Overpass uniquement si updateExisting est true
|
||||
$existingPlace->update_place_from_overpass_data($placeData);
|
||||
|
@ -443,6 +449,8 @@ final class AdminController extends AbstractController
|
|||
|
||||
$overpass_osm_ids = array_map(fn($place) => $place['id'], $places_overpass);
|
||||
|
||||
$batchSize = 200;
|
||||
$i = 0;
|
||||
foreach ($places_overpass as $placeData) {
|
||||
// Vérifier si le lieu existe déjà (optimisé)
|
||||
$existingPlace = $placesByOsmId[$placeData['id']] ?? null;
|
||||
|
@ -471,6 +479,10 @@ final class AdminController extends AbstractController
|
|||
$this->entityManager->persist($place);
|
||||
$stats->addPlace($place);
|
||||
$processedCount++;
|
||||
|
||||
// Générer le contenu de l'email avec le template
|
||||
$emailContent = $this->twig->render('admin/email_content.html.twig', ['place' => $place]);
|
||||
$place->setEmailContent($emailContent);
|
||||
} elseif ($updateExisting) {
|
||||
$existingPlace->setDead(false);
|
||||
$existingPlace->update_place_from_overpass_data($placeData);
|
||||
|
@ -478,19 +490,19 @@ final class AdminController extends AbstractController
|
|||
$this->entityManager->persist($existingPlace);
|
||||
$updatedCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// Supprimer les lieux qui ne sont plus dans la réponse Overpass, si activé
|
||||
if ($deleteMissing) {
|
||||
$db_places = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $insee_code]);
|
||||
foreach ($db_places as $db_place) {
|
||||
if (!in_array($db_place->getOsmId(), $overpass_osm_ids)) {
|
||||
$this->entityManager->remove($db_place);
|
||||
$deletedCount++;
|
||||
}
|
||||
$i++;
|
||||
// Flush/clear Doctrine tous les X lieux pour éviter l'explosion mémoire
|
||||
if (($i % $batchSize) === 0) {
|
||||
$this->entityManager->flush();
|
||||
$this->entityManager->clear();
|
||||
// Recharger les stats après clear
|
||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]);
|
||||
}
|
||||
}
|
||||
|
||||
// Flush final
|
||||
$this->entityManager->flush();
|
||||
$this->entityManager->clear();
|
||||
|
||||
// Récupérer tous les commerces de la zone qui n'ont pas été supprimés
|
||||
$commerces = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $insee_code]);
|
||||
|
||||
|
|
|
@ -120,6 +120,12 @@ class Place
|
|||
#[ORM\Column(nullable: true)]
|
||||
private ?int $osm_changeset = null;
|
||||
|
||||
#[ORM\Column(type: Types::TEXT, nullable: true, options: ['charset' => 'utf8mb4'])]
|
||||
private ?string $emailContent = null;
|
||||
|
||||
#[ORM\Column(type: Types::INTEGER, nullable: true)]
|
||||
private ?int $place_count = null;
|
||||
|
||||
public function getPlaceTypeName(): ?string
|
||||
{
|
||||
if ($this->main_tag == 'amenity=restaurant') {
|
||||
|
@ -734,4 +740,15 @@ class Place
|
|||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getEmailContent(): ?string
|
||||
{
|
||||
return $this->emailContent;
|
||||
}
|
||||
|
||||
public function setEmailContent(?string $emailContent): static
|
||||
{
|
||||
$this->emailContent = $emailContent;
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -252,16 +252,21 @@ out meta;';
|
|||
}
|
||||
|
||||
public function get_city_osm_from_zip_code($zip_code) {
|
||||
// Détection spéciale pour Paris, Lyon, Marseille
|
||||
if (preg_match('/^75(0[1-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|6[0-9]|7[0-9]|8[0-9]|9[0-9])$/', $zip_code)) {
|
||||
$arr = intval(substr($zip_code, 2, 3));
|
||||
return 'Paris ' . $arr . 'e arr.';
|
||||
}
|
||||
if (preg_match('/^69(0[1-9]|1[0-9]|2[0-9])$/', $zip_code)) {
|
||||
$arr = intval(substr($zip_code, 2, 3));
|
||||
return 'Lyon ' . $arr . 'e arr.';
|
||||
}
|
||||
if (preg_match('/^13(0[1-9]|1[0-6])$/', $zip_code)) {
|
||||
$arr = intval(substr($zip_code, 2, 3));
|
||||
return 'Marseille ' . $arr . 'e arr.';
|
||||
}
|
||||
// Requête Overpass pour obtenir la zone administrative de niveau 8 avec un nom
|
||||
$query = "[out:json][timeout:25];
|
||||
area[\"ref:INSEE\"=\"{$zip_code}\"]->.searchArea;
|
||||
(
|
||||
relation[\"admin_level\"=\"8\"][\"name\"][\"type\"=\"boundary\"][\"boundary\"=\"administrative\"](area.searchArea);
|
||||
);
|
||||
out body;
|
||||
>;
|
||||
out skel qt;";
|
||||
|
||||
$query = "[out:json][timeout:25];\n area[\"ref:INSEE\"=\"{$zip_code}\"]->.searchArea;\n (\n relation[\"admin_level\"=\"8\"][\"name\"][\"type\"=\"boundary\"][\"boundary\"=\"administrative\"](area.searchArea);\n );\n out body;\n >;\n out skel qt;";
|
||||
$response = $this->client->request('POST', $this->overpassApiUrl, [
|
||||
'body' => ['data' => $query]
|
||||
]);
|
||||
|
@ -389,10 +394,6 @@ out meta;';
|
|||
|
||||
|
||||
|
||||
public static function uuid_create_static() {
|
||||
return $this->uuid_create();
|
||||
}
|
||||
|
||||
public function uuid_create() {
|
||||
return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
|
||||
// 32 bits for "time_low"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue