refs #734 Adds new endpoints sync and backup and status endpoint
parent
a77eb7a69e
commit
0908888fce
|
|
@ -36,31 +36,6 @@ class OgGitController
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Route("/oggit/v1/status", name="getStatus", methods={"GET"})
|
|
||||||
* @OA\Get(
|
|
||||||
* path="/oggit/v1/status",
|
|
||||||
* summary="Get oggit status",
|
|
||||||
* @OA\Response(
|
|
||||||
* response=200,
|
|
||||||
* description="Status retrieved successfully",
|
|
||||||
* @OA\JsonContent(
|
|
||||||
* type="object",
|
|
||||||
* @OA\Property(property="message", type="string")
|
|
||||||
* )
|
|
||||||
* )
|
|
||||||
* )
|
|
||||||
*/
|
|
||||||
public function getStatus(): Response
|
|
||||||
{
|
|
||||||
$response = [
|
|
||||||
'message' => 'Todo OK'
|
|
||||||
];
|
|
||||||
|
|
||||||
return new JsonResponse($response, 200);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/oggit/v1/repositories", methods={"GET"})
|
* @Route("/oggit/v1/repositories", methods={"GET"})
|
||||||
* @OA\Get(
|
* @OA\Get(
|
||||||
|
|
@ -152,13 +127,13 @@ public function getStatus(): Response
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/oggit/v1/repositories/{id}", methods={"DELETE"})
|
* @Route("/oggit/v1/repositories/{repoId}", methods={"DELETE"})
|
||||||
* @OA\Delete(
|
* @OA\Delete(
|
||||||
* path="/oggit/v1/repositories/{id}",
|
* path="/oggit/v1/repositories/{repoId}",
|
||||||
* tags={"Repositories"},
|
* tags={"Repositories"},
|
||||||
* summary="Eliminar un repositorio",
|
* summary="Eliminar un repositorio",
|
||||||
* @OA\Parameter(
|
* @OA\Parameter(
|
||||||
* name="id",
|
* name="repoId",
|
||||||
* in="path",
|
* in="path",
|
||||||
* required=true,
|
* required=true,
|
||||||
* description="ID del repositorio a eliminar",
|
* description="ID del repositorio a eliminar",
|
||||||
|
|
@ -179,10 +154,10 @@ public function getStatus(): Response
|
||||||
* )
|
* )
|
||||||
* )
|
* )
|
||||||
*/
|
*/
|
||||||
public function deleteRepository($id): JsonResponse
|
public function deleteRepository($repoId): JsonResponse
|
||||||
{
|
{
|
||||||
// Hacer la solicitud al servicio externo para eliminar el repositorio
|
// Hacer la solicitud al servicio externo para eliminar el repositorio
|
||||||
$response = $this->ogGitService->makeRequest('DELETE', "/repositories/{$id}");
|
$response = $this->ogGitService->makeRequest('DELETE', "/repositories/{$repoId}");
|
||||||
|
|
||||||
// Comprobar si la solicitud falló
|
// Comprobar si la solicitud falló
|
||||||
if (isset($response['error'])) {
|
if (isset($response['error'])) {
|
||||||
|
|
@ -204,13 +179,13 @@ public function getStatus(): Response
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/oggit/v1/repositories/{id}/compact", methods={"POST"})
|
* @Route("/oggit/v1/repositories/{repoId}/compact", methods={"POST"})
|
||||||
* @OA\Post(
|
* @OA\Post(
|
||||||
* path="/oggit/v1/repositories/{id}/compact",
|
* path="/oggit/v1/repositories/{repoId}/compact",
|
||||||
* summary="Realizar la compactación del repositorio Git",
|
* summary="Realizar la compactación del repositorio Git",
|
||||||
* tags={"Repositories"},
|
* tags={"Repositories"},
|
||||||
* @OA\Parameter(
|
* @OA\Parameter(
|
||||||
* name="id",
|
* name="repoId",
|
||||||
* in="path",
|
* in="path",
|
||||||
* required=true,
|
* required=true,
|
||||||
* description="ID del repositorio para compactar",
|
* description="ID del repositorio para compactar",
|
||||||
|
|
@ -226,26 +201,284 @@ public function getStatus(): Response
|
||||||
* )
|
* )
|
||||||
* )
|
* )
|
||||||
*/
|
*/
|
||||||
public function compactRepository($id): JsonResponse
|
public function compactRepository($repoId): JsonResponse
|
||||||
{
|
{
|
||||||
// Llamar a la función del servicio para compactar el repositorio
|
// Llamar a la función del servicio para compactar el repositorio
|
||||||
$result = $this->ogGitService->makeRequest('POST', '/repositories/' . $id . '/compact');
|
$result = $this->ogGitService->makeRequest('POST', '/repositories/' . $repoId . '/compact');
|
||||||
|
|
||||||
if ($result['success']) {
|
if ($result['success']) {
|
||||||
return new JsonResponse(['message' => "Compactación realizada con éxito para el repositorio: {$id}"], 200);
|
return new JsonResponse(['message' => "Compactación realizada con éxito para el repositorio: {$repoId}"], 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new JsonResponse(['error' => 'Error al realizar la compactación'], 500);
|
return new JsonResponse(['error' => 'Error al realizar la compactación'], 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/oggit/v1/repositories/{id}/branches", methods={"GET"})
|
* @Route("/oggit/v1/repositories/{repoId}/sync", methods={"POST"})
|
||||||
|
* @OA\Post(
|
||||||
|
* path="/oggit/v1/repositories/{repoId}/sync",
|
||||||
|
* summary="Sincronizar un repositorio con otro",
|
||||||
|
* tags={"Repositories"},
|
||||||
|
* @OA\Parameter(
|
||||||
|
* name="repoId",
|
||||||
|
* in="path",
|
||||||
|
* required=true,
|
||||||
|
* description="ID del repositorio a sincronizar",
|
||||||
|
* example="linux",
|
||||||
|
* @OA\Schema(type="string")
|
||||||
|
* ),
|
||||||
|
* @OA\RequestBody(
|
||||||
|
* required=true,
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="remote_repository", type="string", description="Repositorio remoto")
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=200,
|
||||||
|
* description="Sincronización iniciada"
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=404,
|
||||||
|
* description="Repositorio no encontrado"
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=500,
|
||||||
|
* description="Error al conectar con el servicio externo"
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
public function syncRepository(Request $request, $repoId): JsonResponse
|
||||||
|
{
|
||||||
|
// Obtener los datos del cuerpo de la solicitud
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
$remoteRepository = $data['remote_repository'] ?? '';
|
||||||
|
|
||||||
|
// Hacer la solicitud al servicio externo para la sincronización
|
||||||
|
$response = $this->ogGitService->makeRequest('POST', "/repositories/{$repoId}/sync", [
|
||||||
|
'json' => ['remote_repository' => $remoteRepository]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Comprobar si la solicitud falló
|
||||||
|
if (isset($response['error'])) {
|
||||||
|
return new JsonResponse(['error' => 'No se pudo conectar con el servicio externo'], 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Manejar la respuesta del servicio externo
|
||||||
|
if (isset($response['status']) && $response['status'] === 'Started synchronization') {
|
||||||
|
return new JsonResponse([
|
||||||
|
'message' => 'Sincronización iniciada',
|
||||||
|
'repository' => $repoId,
|
||||||
|
'remote_repository' => $remoteRepository
|
||||||
|
], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Devolver 404 si el repositorio no se encuentra
|
||||||
|
if (isset($response['error']) && $response['error'] === 'Repository not found') {
|
||||||
|
return new JsonResponse(['error' => 'Repository not found'], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new JsonResponse(['error' => 'Error desconocido'], 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Route("/oggit/v1/repositories/{repoId}/sync/status", methods={"GET"})
|
||||||
* @OA\Get(
|
* @OA\Get(
|
||||||
* path="/oggit/v1/repositories/{id}/branches",
|
* path="/oggit/v1/repositories/{repoId}/sync/status",
|
||||||
|
* summary="Consultar el estado de la sincronización de un repositorio",
|
||||||
|
* tags={"Repositories"},
|
||||||
|
* @OA\Parameter(
|
||||||
|
* name="repoId",
|
||||||
|
* in="path",
|
||||||
|
* required=true,
|
||||||
|
* description="ID del repositorio a consultar",
|
||||||
|
* example="linux",
|
||||||
|
* @OA\Schema(type="string")
|
||||||
|
* ),
|
||||||
|
* @OA\RequestBody(
|
||||||
|
* required=true,
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="remote_repository", type="string", description="Repositorio remoto")
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=200,
|
||||||
|
* description="Estado de la sincronización consultado con éxito"
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=404,
|
||||||
|
* description="Repositorio no encontrado"
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=500,
|
||||||
|
* description="Error al conectar con el servicio externo"
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
public function getSyncStatus(Request $request, $repoId): JsonResponse
|
||||||
|
{
|
||||||
|
// Obtener los datos del cuerpo de la solicitud
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
$remoteRepository = $data['remote_repository'] ?? '';
|
||||||
|
|
||||||
|
// Hacer la solicitud al servicio externo para consultar el estado de sincronización
|
||||||
|
$response = $this->ogGitService->makeRequest('GET', "/repositories/{$repoId}/sync/status", [
|
||||||
|
'json' => ['remote_repository' => $remoteRepository]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Comprobar si la solicitud falló
|
||||||
|
if (isset($response['error'])) {
|
||||||
|
return new JsonResponse(['error' => 'No se pudo conectar con el servicio externo'], 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new JsonResponse($response, 200);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @Route("/oggit/v1/repositories/{repoId}/backup", methods={"POST"})
|
||||||
|
* @OA\Post(
|
||||||
|
* path="/oggit/v1/repositories/{repoId}/backup",
|
||||||
|
* summary="Realizar una copia de seguridad de un repositorio",
|
||||||
|
* tags={"Repositories"},
|
||||||
|
* @OA\Parameter(
|
||||||
|
* name="repoId",
|
||||||
|
* in="path",
|
||||||
|
* required=true,
|
||||||
|
* description="ID del repositorio a respaldar",
|
||||||
|
* example="linux",
|
||||||
|
* @OA\Schema(type="string")
|
||||||
|
* ),
|
||||||
|
* @OA\RequestBody(
|
||||||
|
* required=true,
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="ssh_server", type="string", description="Servidor SSH"),
|
||||||
|
* @OA\Property(property="ssh_user", type="string", description="Usuario SSH"),
|
||||||
|
* @OA\Property(property="filename", type="string", description="Archivo de destino")
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=200,
|
||||||
|
* description="Copia de seguridad iniciada"
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=404,
|
||||||
|
* description="Repositorio no encontrado"
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=500,
|
||||||
|
* description="Error al conectar con el servicio externo"
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
public function backupRepository(Request $request, $repoId): JsonResponse
|
||||||
|
{
|
||||||
|
// Obtener los datos del cuerpo de la solicitud
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
$sshServer = $data['ssh_server'] ?? '';
|
||||||
|
$sshUser = $data['ssh_user'] ?? '';
|
||||||
|
$filename = $data['filename'] ?? '';
|
||||||
|
|
||||||
|
// Hacer la solicitud al servicio externo para la copia de seguridad
|
||||||
|
$response = $this->ogGitService->makeRequest('POST', "/repositories/{$repoId}/backup", [
|
||||||
|
'json' => [
|
||||||
|
'ssh_server' => $sshServer,
|
||||||
|
'ssh_user' => $sshUser,
|
||||||
|
'filename' => $filename
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Comprobar si la solicitud falló
|
||||||
|
if (isset($response['error'])) {
|
||||||
|
return new JsonResponse(['error' => 'No se pudo conectar con el servicio externo'], 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Manejar la respuesta del servicio externo y devolver los valores del response
|
||||||
|
if (isset($response['status']) && $response['status'] === 'Started backup') {
|
||||||
|
return new JsonResponse([
|
||||||
|
'message' => 'Copia de seguridad iniciada',
|
||||||
|
'repository' => $repoId,
|
||||||
|
'ssh_server' => $response['ssh_server'],
|
||||||
|
'ssh_user' => $response['ssh_user'],
|
||||||
|
'filename' => $response['filename']
|
||||||
|
], 200);
|
||||||
|
}
|
||||||
|
// Devolver 404 si el repositorio no se encuentra
|
||||||
|
if (isset($response['error']) && $response['error'] === 'Repository not found') {
|
||||||
|
return new JsonResponse(['error' => 'Repository not found'], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new JsonResponse(['error' => 'Error desconocido'], 500);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @Route("/oggit/v1/repositories/{repoId}/backup/status", methods={"GET"})
|
||||||
|
* @OA\Get(
|
||||||
|
* path="/oggit/v1/repositories/{repoId}/backup/status",
|
||||||
|
* summary="Consultar el estado de la copia de seguridad de un repositorio",
|
||||||
|
* tags={"Repositories"},
|
||||||
|
* @OA\Parameter(
|
||||||
|
* name="repoId",
|
||||||
|
* in="path",
|
||||||
|
* required=true,
|
||||||
|
* description="ID del repositorio a consultar",
|
||||||
|
* example="linux",
|
||||||
|
* @OA\Schema(type="string")
|
||||||
|
* ),
|
||||||
|
* @OA\RequestBody(
|
||||||
|
* required=true,
|
||||||
|
* @OA\JsonContent(
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="ssh_server", type="string", description="Servidor SSH"),
|
||||||
|
* @OA\Property(property="ssh_user", type="string", description="Usuario SSH"),
|
||||||
|
* @OA\Property(property="filename", type="string", description="Archivo de destino")
|
||||||
|
* )
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=200,
|
||||||
|
* description="Estado de la copia de seguridad consultado con éxito"
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=404,
|
||||||
|
* description="Repositorio no encontrado"
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=500,
|
||||||
|
* description="Error al conectar con el servicio externo"
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
public function getBackupStatus(Request $request, $repoId): JsonResponse
|
||||||
|
{
|
||||||
|
// Obtener los datos del cuerpo de la solicitud
|
||||||
|
$data = json_decode($request->getContent(), true);
|
||||||
|
$sshServer = $data['ssh_server'] ?? '';
|
||||||
|
$sshUser = $data['ssh_user'] ?? '';
|
||||||
|
$filename = $data['filename'] ?? '';
|
||||||
|
|
||||||
|
// Hacer la solicitud al servicio externo para consultar el estado de la copia de seguridad
|
||||||
|
$response = $this->ogGitService->makeRequest('GET', "/repositories/{$repoId}/backup/status", [
|
||||||
|
'json' => [
|
||||||
|
'ssh_server' => $sshServer,
|
||||||
|
'ssh_user' => $sshUser,
|
||||||
|
'filename' => $filename
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Comprobar si la solicitud falló
|
||||||
|
if (isset($response['error'])) {
|
||||||
|
return new JsonResponse(['error' => 'No se pudo conectar con el servicio externo'], 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new JsonResponse($response, 200);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @Route("/oggit/v1/repositories/{repoId}/branches", methods={"GET"})
|
||||||
|
* @OA\Get(
|
||||||
|
* path="/oggit/v1/repositories/{repoId}/branches",
|
||||||
* summary="Obtener las ramas de un repositorio",
|
* summary="Obtener las ramas de un repositorio",
|
||||||
* tags={"Branches"},
|
* tags={"Branches"},
|
||||||
* @OA\Parameter(
|
* @OA\Parameter(
|
||||||
* name="id",
|
* name="repoId",
|
||||||
* in="path",
|
* in="path",
|
||||||
* required=true,
|
* required=true,
|
||||||
* description="ID del repositorio",
|
* description="ID del repositorio",
|
||||||
|
|
@ -261,10 +494,10 @@ public function getStatus(): Response
|
||||||
* )
|
* )
|
||||||
* )
|
* )
|
||||||
*/
|
*/
|
||||||
public function getBranches($id): JsonResponse
|
public function getBranches($repoId): JsonResponse
|
||||||
{
|
{
|
||||||
// Llamar a la función makeRequest del servicio OgGitService
|
// Llamar a la función makeRequest del servicio OgGitService
|
||||||
$response = $this->ogGitService->makeRequest('GET', "/repositories/{$id}/branches");
|
$response = $this->ogGitService->makeRequest('GET', "/repositories/{$repoId}/branches");
|
||||||
|
|
||||||
if (isset($response['branches'])) {
|
if (isset($response['branches'])) {
|
||||||
return new JsonResponse(['branches' => $response['branches']], 200);
|
return new JsonResponse(['branches' => $response['branches']], 200);
|
||||||
|
|
@ -300,6 +533,10 @@ public function getStatus(): Response
|
||||||
* @OA\Response(
|
* @OA\Response(
|
||||||
* response=400,
|
* response=400,
|
||||||
* description="Nombre de rama inválido"
|
* description="Nombre de rama inválido"
|
||||||
|
* ),
|
||||||
|
* @OA\Response(
|
||||||
|
* response=500,
|
||||||
|
* description="Error al conectar con el servicio externo"
|
||||||
* )
|
* )
|
||||||
* )
|
* )
|
||||||
*/
|
*/
|
||||||
|
|
@ -314,13 +551,29 @@ public function getStatus(): Response
|
||||||
return new JsonResponse(['error' => 'Nombre de rama inválido'], 400);
|
return new JsonResponse(['error' => 'Nombre de rama inválido'], 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Aquí podrías añadir la lógica para crear la rama en el repositorio si la validación es exitosa
|
// Hacer la solicitud al servicio externo para crear la rama
|
||||||
|
$response = $this->ogGitService->makeRequest('POST', "/repositories/{$repoId}/branches/{$branchName}");
|
||||||
|
|
||||||
return new JsonResponse([
|
// Comprobar si la solicitud falló
|
||||||
'message' => 'Rama creada con éxito',
|
if (isset($response['error'])) {
|
||||||
'branchName' => $branchName,
|
return new JsonResponse(['error' => 'No se pudo conectar con el servicio externo'], 500);
|
||||||
'repository' => $repoId
|
}
|
||||||
], 201);
|
|
||||||
|
// Manejar la respuesta del servicio externo
|
||||||
|
if (isset($response['status']) && $response['status'] === 'Branch created') {
|
||||||
|
return new JsonResponse([
|
||||||
|
'message' => 'Rama creada con éxito',
|
||||||
|
'branchName' => $response['branchName'],
|
||||||
|
'repository' => $response['repoId']
|
||||||
|
], 201);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Devolver 404 si el repositorio no se encuentra
|
||||||
|
if (isset($response['error']) && $response['error'] === 'Repository not found') {
|
||||||
|
return new JsonResponse(['error' => 'Repository not found'], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new JsonResponse(['error' => 'Error desconocido'], 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -353,15 +606,31 @@ public function getStatus(): Response
|
||||||
* ),
|
* ),
|
||||||
* @OA\Response(
|
* @OA\Response(
|
||||||
* response=500,
|
* response=500,
|
||||||
* description="Error en el servidor"
|
* description="Error al conectar con el servicio externo"
|
||||||
* )
|
* )
|
||||||
* )
|
* )
|
||||||
*/
|
*/
|
||||||
public function deleteBranch($repoId, $branchId): JsonResponse
|
public function deleteBranch($repoId, $branchId): JsonResponse
|
||||||
{
|
{
|
||||||
return new JsonResponse([
|
// Hacer la solicitud al servicio externo para eliminar la rama
|
||||||
'message' => "Llamando a la función deleteBranch para eliminar la rama con ID $branchId del repositorio con ID $repoId."
|
$response = $this->ogGitService->makeRequest('DELETE', "/repositories/{$repoId}/branches/{$branchId}");
|
||||||
], 204);
|
|
||||||
|
// Comprobar si la solicitud falló
|
||||||
|
if (isset($response['error'])) {
|
||||||
|
return new JsonResponse(['error' => 'No se pudo conectar con el servicio externo'], 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Manejar la respuesta del servicio externo
|
||||||
|
if (isset($response['status']) && $response['status'] === 'Branch deleted') {
|
||||||
|
return new JsonResponse(['message' => 'Rama eliminada exitosamente'], 204);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Devolver 404 si el repositorio o la rama no se encuentran
|
||||||
|
if (isset($response['error']) && $response['error'] === 'Repository or branch not found') {
|
||||||
|
return new JsonResponse(['error' => 'Repository or branch not found'], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new JsonResponse(['error' => 'Error desconocido'], 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue