dynamic remote project CRUD
This commit is contained in:
parent
6569af4720
commit
f08bf51c70
1
.env
1
.env
|
|
@ -74,3 +74,4 @@ AWS_ENDPOINT=https://s3.amazonaws.com
|
|||
AWS_S3_PORTAL_URL=https://s3.amazonaws.com/portal
|
||||
###< aws/aws-sdk-php-symfony ###
|
||||
APP_URL='https://example.com'
|
||||
APP_DOMAIN='example.com'
|
||||
|
|
@ -22,7 +22,7 @@ export const TABULATOR_FR_LANG = {
|
|||
};
|
||||
|
||||
export function eyeIconLink(url) {
|
||||
return `<a href="${url}" class="p-3 align-middle color-primary" title="Accéder au profil" target="_blank">
|
||||
return `<a href="${url}" class="p-3 align-middle color-primary" title="Accéder au profil" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
width="35px"
|
||||
height="35px"
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ parameters:
|
|||
aws_public_url: '%env(AWS_ENDPOINT)%'
|
||||
aws_bucket: '%env(S3_PORTAL_BUCKET)%'
|
||||
app_url: '%env(APP_URL)%'
|
||||
app_domain: '%env(APP_DOMAIN)%'
|
||||
mercure_secret: '%env(MERCURE_JWT_SECRET)%'
|
||||
logos_directory: '%kernel.project_dir%/public/uploads/logos'
|
||||
oauth_sso_identifier: '%env(OAUTH_SSO_IDENTIFIER)%'
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ use Symfony\Component\Routing\Attribute\Route;
|
|||
|
||||
final class ProjectController extends AbstractController
|
||||
{
|
||||
|
||||
public function __construct(private readonly EntityManagerInterface $entityManager,
|
||||
private readonly OrganizationsRepository $organizationsRepository,
|
||||
private readonly ProjectRepository $projectRepository,
|
||||
|
|
@ -83,16 +84,20 @@ final class ProjectController extends AbstractController
|
|||
|
||||
$this->entityManager->persist($project);
|
||||
$this->entityManager->flush(); //On met le flush avant parce qu'on a besoin de l'ID du projet pour la création distante.
|
||||
//Oui ducoup c'est chiant parce que le projet est crée même s'il y a une erreur API, mais OH ffs at that point.
|
||||
//Oui ducoup c'est chiant parce que le projet est créé même s'il y a une erreur API, mais OH ffs at that point. ducoup s'il y a un pb, vue que la gestion de projet et fait pas le super admin, il faudra recree le projet dans la bdd corespondant à l'appli qui fonctionne pas
|
||||
// Remote creation logic
|
||||
|
||||
try {
|
||||
$this->SSOProjectService->createRemoteProject('http://api.solutions-easy.moi', $project);
|
||||
foreach ($project->getApplications() as $appId) {
|
||||
$app = $this->appsRepository->find($appId);
|
||||
$clientUrl = 'http://' . $app->getSubDomain() . '.' .$this->getParameter('app_domain') ;
|
||||
$this->SSOProjectService->createRemoteProject($clientUrl, $project);
|
||||
}
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return new JsonResponse(['error' => 'Remote creation failed: ' . $e->getMessage()], 500);
|
||||
}
|
||||
|
||||
|
||||
|
||||
return new JsonResponse(['message' => 'Project created successfully'], 201);
|
||||
}
|
||||
|
||||
|
|
@ -129,7 +134,12 @@ final class ProjectController extends AbstractController
|
|||
$this->entityManager->persist($project);
|
||||
// Remote editing logic
|
||||
try {
|
||||
$this->SSOProjectService->editRemoteProject('http://api.solutions-easy.moi', $project);
|
||||
foreach ($project->getApplications() as $appId) {
|
||||
$app = $this->appsRepository->find($appId);
|
||||
$clientUrl = 'http://' . $app->getSubDomain() . '.' .$this->getParameter('app_domain') ;
|
||||
$this->SSOProjectService->editRemoteProject($clientUrl, $project);
|
||||
}
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return new JsonResponse(['error' => 'Remote creation failed: ' . $e->getMessage()], 500);
|
||||
}
|
||||
|
|
@ -208,6 +218,16 @@ final class ProjectController extends AbstractController
|
|||
return new JsonResponse(['error' => 'Project not found'], Response::HTTP_NOT_FOUND);
|
||||
}
|
||||
$project->setIsDeleted(true);
|
||||
try {
|
||||
foreach ($project->getApplications() as $appId) {
|
||||
$app = $this->appsRepository->find($appId);
|
||||
$clientUrl = 'http://' . $app->getSubDomain() . '.' .$this->getParameter('app_domain') ;
|
||||
$this->SSOProjectService->deleteRemoteProject($clientUrl, $project->getId());
|
||||
}
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return new JsonResponse(['error' => 'Remote creation failed: ' . $e->getMessage()], 500);
|
||||
}
|
||||
$this->entityManager->persist($project);
|
||||
$this->entityManager->flush();
|
||||
return new JsonResponse(['message' => 'Project deleted successfully'], Response::HTTP_OK);
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ class ProjectService
|
|||
|
||||
$accessToken = $tokenResponse->toArray()['access_token'];
|
||||
// data must match easy check database
|
||||
$projectJson = $this->getTokenResponse($project);
|
||||
$projectJson = $this->getProjectToJson($project);
|
||||
|
||||
|
||||
// 2. Call the Client Application's Webhook/API
|
||||
|
|
@ -50,6 +50,18 @@ class ProjectService
|
|||
}
|
||||
|
||||
|
||||
public function deleteRemoteProject(string $clientAppUrl, int $projectId): void
|
||||
{
|
||||
$tokenResponse = $this->getTokenResponse();
|
||||
|
||||
$accessToken = $tokenResponse->toArray()['access_token'];
|
||||
|
||||
// 2. Call the Client Application's Webhook/API
|
||||
$this->httpClient->request('DELETE', $clientAppUrl . '/api/v1/project/delete/'. $projectId, [
|
||||
'headers' => ['Authorization' => 'Bearer ' . $accessToken],
|
||||
]);
|
||||
}
|
||||
|
||||
public function getTokenResponse(): ResponseInterface{
|
||||
$portalClient = $this->entityManager->getRepository(Client::class)->findOneBy(['identifier' => $this->clientIdentifier]);
|
||||
return $this->httpClient->request('POST', $this->appUrl . 'token', [
|
||||
|
|
@ -64,7 +76,7 @@ class ProjectService
|
|||
return [
|
||||
'id' => $project->getId(),
|
||||
'projet' => $project->getName(),
|
||||
'entity_id' => 3,
|
||||
'entity_id' => $project->getOrganization()->getId(),
|
||||
'bdd' => $project->getBddName(),
|
||||
'isactive' => $project->isActive(),
|
||||
'logo' => $project->getLogo(),
|
||||
|
|
|
|||
Loading…
Reference in New Issue