✨ feat(Gitea/Client): Ajoute le service client Gitea pour déclencher des workflows.
🔥 feat(RevendeurService): Supprime l'enregistrement DNS Cloudflare lors de la suppression du revendeur. ✨ feat(revendeur.twig): Ajoute un lien pour lancer le déploiement et un lien pour supprimer un revendeur. ✨ feat(revendeur_view.twig): Crée le template pour la vue de modification d'un revendeur. ✏️ chore(.env): Ajoute la clé API Gitea. ✨ feat(RevendeurController): Gère la suppression des revendeurs et l'ajout d'un lancement de déploiement.
This commit is contained in:
1
.env
1
.env
@@ -77,3 +77,4 @@ MAILCOW_KEY=DF0E7E-0FD059-16226F-8ECFF1-E558B3
|
||||
|
||||
DEV_URL=https://086e682e904b.ngrok-free.app
|
||||
SENTRY_BACKEND=https://dcf4ed12f5844686f088838f26082bf0@o4510197735948288.ingest.de.sentry.io/4510197737979984
|
||||
GITEA_APIKEY=725c434effbf467b1f056c738fd450a6befaff6c
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Controller\Artemis\Revendeur;
|
||||
|
||||
use App\Entity\Revendeur;
|
||||
use App\Form\Artemis\Revendeur\RevendeurType;
|
||||
use App\Service\Gitea\Client;
|
||||
use App\Service\Revendeur\RevendeurService;
|
||||
use App\Service\Revendeur\SendLinkEvent;
|
||||
use Cocur\Slugify\Slugify;
|
||||
@@ -21,11 +22,13 @@ class RevendeurController extends AbstractController
|
||||
EntityManagerInterface $entityManager,
|
||||
Request $request,
|
||||
EventDispatcherInterface $eventDispatcher,
|
||||
RevendeurService $revendeurService
|
||||
RevendeurService $revendeurService,
|
||||
Client $client,
|
||||
): Response {
|
||||
if ($request->query->has('delete')) {
|
||||
$revendeur = $revendeurService->get($request->query->get('id'));
|
||||
$revendeur = $revendeurService->get($request->query->get('delete'));
|
||||
if ($revendeur instanceof Revendeur) {
|
||||
$revendeurService->delete($revendeur);
|
||||
$entityManager->remove($revendeur);
|
||||
$entityManager->flush();
|
||||
$this->addFlash('success', 'Revendeur supprimé avec succès.');
|
||||
@@ -47,6 +50,10 @@ class RevendeurController extends AbstractController
|
||||
return $this->redirectToRoute('artemis_revendeur');
|
||||
}
|
||||
|
||||
if($request->query->has('deploy')) {
|
||||
$client->listWorkflowsReseller();
|
||||
return $this->redirectToRoute('artemis_revendeur');
|
||||
}
|
||||
return $this->render('artemis/revendeur/revendeur.twig', [
|
||||
'revendeurLists' => $revendeurService->list(),
|
||||
]);
|
||||
@@ -65,17 +72,23 @@ class RevendeurController extends AbstractController
|
||||
return $this->redirectToRoute('artemis_revendeur');
|
||||
}
|
||||
|
||||
// Votre logique ici (affichage, modification, etc.)
|
||||
|
||||
$form = $this->createForm(RevendeurType::class, $revendeur);
|
||||
$form->handleRequest($request);
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$this->addFlash('success', 'Revendeur modifiée avec succès.');
|
||||
return $this->redirectToRoute('artemis_revendeur');
|
||||
}
|
||||
return $this->render('artemis/revendeur/revendeur_view.twig', [
|
||||
'revendeur' => $revendeur,
|
||||
'form' => $form->createView(),
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/artemis/revendeur/add', name: 'artemis_revendeur_add',priority: 5)]
|
||||
public function revendeurAdd(
|
||||
Request $request,
|
||||
RevendeurService $revendeurService
|
||||
RevendeurService $revendeurService,
|
||||
Client $client,
|
||||
): Response {
|
||||
$revendeur = new Revendeur();
|
||||
$form = $this->createForm(RevendeurType::class, $revendeur);
|
||||
@@ -85,6 +98,7 @@ class RevendeurController extends AbstractController
|
||||
$slugify = new Slugify();
|
||||
$revendeur->setCode($slugify->slugify($revendeur->getRaisonSocial()));
|
||||
$revendeurService->create($revendeur);
|
||||
$client->listWorkflowsReseller();
|
||||
$this->addFlash('success', 'Revendeur créé avec succès.');
|
||||
return $this->redirectToRoute('artemis_revendeur');
|
||||
}
|
||||
|
||||
36
src/Service/Gitea/Client.php
Normal file
36
src/Service/Gitea/Client.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Service\Gitea;
|
||||
|
||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||
|
||||
class Client
|
||||
{
|
||||
public function __construct(protected HttpClientInterface $httpClient)
|
||||
{
|
||||
}
|
||||
public function listWorkflowsReseller()
|
||||
{
|
||||
$response = $this->httpClient->request('POST','https://code.esy-web.dev/api/v1/repos/SARL-SITECONSEIL/mainframe_reseller/actions/workflows/deploy.yml/dispatches',[
|
||||
'headers' => [
|
||||
'Accept' => 'application/json',
|
||||
'Authorization' => 'token '.$_ENV['GITEA_APIKEY'],
|
||||
],
|
||||
'json' => [
|
||||
'ref' => 'refs/heads/master',
|
||||
]
|
||||
]);
|
||||
}
|
||||
public function listWorkflowsWatchDogs()
|
||||
{
|
||||
$response = $this->httpClient->request('POST','https://code.esy-web.dev/api/v1/repos/SARL-SITECONSEIL/watchdog/actions/workflows/deploy.yml/dispatches',[
|
||||
'headers' => [
|
||||
'Accept' => 'application/json',
|
||||
'Authorization' => 'token '.$_ENV['GITEA_APIKEY'],
|
||||
],
|
||||
'json' => [
|
||||
'ref' => 'refs/heads/master',
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -81,4 +81,30 @@ class RevendeurService
|
||||
{
|
||||
return $this->revendeurRepository->find($id);
|
||||
}
|
||||
|
||||
public function delete(Revendeur $revendeur)
|
||||
{
|
||||
$dns = $revendeur->getCode() . self::DNS_SUFFIX;
|
||||
$token = $_ENV['CLOUDFLARE_TOKEN'] ?? '';
|
||||
$response = $this->httpClient->request('GET', sprintf(
|
||||
'https://api.cloudflare.com/client/v4/zones/%s/dns_records?type=A&name='.$dns,
|
||||
self::ZONE_ID
|
||||
), [
|
||||
'headers' => [
|
||||
'Content-Type' => 'application/json',
|
||||
'Authorization' => 'Bearer ' . $token,
|
||||
]
|
||||
]);
|
||||
$datas = json_decode($response->getContent());
|
||||
$result = $datas->result[0];
|
||||
$this->httpClient->request('DELETE', sprintf(
|
||||
'https://api.cloudflare.com/client/v4/zones/%s/dns_records/'.$result->id,
|
||||
self::ZONE_ID
|
||||
), [
|
||||
'headers' => [
|
||||
'Content-Type' => 'application/json',
|
||||
'Authorization' => 'Bearer ' . $token,
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
<div class="flex justify-between items-center mb-6">
|
||||
<h2 class="text-3xl font-semibold text-gray-800 dark:text-gray-200">Listes des revendeur</h2>
|
||||
<div>
|
||||
<a href="{{ path('artemis_revendeur',{deploy:1}) }}" class="mr-2 ml-2 px-4 py-2 bg-blue-600 text-white font-medium rounded-md shadow-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-900">
|
||||
+ Lancer le déploiement
|
||||
</a>
|
||||
<a href="{{ path('artemis_revendeur_add') }}" class="px-4 py-2 bg-blue-600 text-white font-medium rounded-md shadow-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-900">
|
||||
+ Crée un revendeur
|
||||
</a>
|
||||
@@ -29,7 +32,7 @@
|
||||
<a href="{{ path('artemis_revendeur_view',{id:revendeur.id}) }}" class="bg-blue-600 hover:bg-blue-700 text-white px-3 py-1 rounded mr-2">Modifier</a>
|
||||
<a href="{{ path('artemis_revendeur',{id:revendeur.id}) }}&sendLink=1" class="bg-blue-600 hover:bg-blue-700 text-white px-3 py-1 rounded mr-2">Envoyée le lien du revendeur</a>
|
||||
<a target="_blank" href="https://{{ revendeur.code }}-demande.esy-web.fr" class="bg-blue-600 hover:bg-blue-700 text-white px-3 py-1 rounded mr-2">Voir le lien du revendeur</a>
|
||||
<a href="{{ path('artemis_revendeur',{id:revendeur.id}) }}?delete=1" class="bg-red-600 hover:bg-red-700 text-white px-3 py-1 rounded mr-2">Supprimer</a>
|
||||
<a href="{{ path('artemis_revendeur',{delete:revendeur.id}) }}" class="bg-red-600 hover:bg-red-700 text-white px-3 py-1 rounded mr-2">Supprimer</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
37
templates/artemis/revendeur/revendeur_view.twig
Normal file
37
templates/artemis/revendeur/revendeur_view.twig
Normal file
@@ -0,0 +1,37 @@
|
||||
{% extends 'artemis/base.twig' %}
|
||||
{% block title %}Revendeur - {{ revendeur.raisonSocial }}{% endblock %}
|
||||
{% block content %}
|
||||
<div class="flex justify-between items-center mb-6">
|
||||
<h2 class="text-3xl font-semibold text-gray-800 dark:text-gray-200">Revendeur</h2>
|
||||
|
||||
</div>
|
||||
<div class="bg-gray-800 rounded-lg shadow p-6 mb-6">
|
||||
{{ form_start(form) }}
|
||||
<div class="flex space-x-4">
|
||||
<div class="flex-1">
|
||||
{{ form_row(form.raisonSocial) }}
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
{{ form_row(form.name) }}
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
{{ form_row(form.surname) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex space-x-4">
|
||||
<div class="flex-1">
|
||||
{{ form_row(form.email) }}
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
{{ form_row(form.phone) }}
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
{{ form_row(form.parent) }}
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="w-full bg-purple-600 hover:bg-purple-700 text-white font-semibold px-4 py-2 rounded">Enregistrer</button>
|
||||
|
||||
{{ form_end(form) }}
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user