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"})
|
||||
* @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(
|
||||
* path="/oggit/v1/repositories/{id}",
|
||||
* path="/oggit/v1/repositories/{repoId}",
|
||||
* tags={"Repositories"},
|
||||
* summary="Eliminar un repositorio",
|
||||
* @OA\Parameter(
|
||||
* name="id",
|
||||
* name="repoId",
|
||||
* in="path",
|
||||
* required=true,
|
||||
* 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
|
||||
$response = $this->ogGitService->makeRequest('DELETE', "/repositories/{$id}");
|
||||
$response = $this->ogGitService->makeRequest('DELETE', "/repositories/{$repoId}");
|
||||
|
||||
// Comprobar si la solicitud falló
|
||||
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(
|
||||
* path="/oggit/v1/repositories/{id}/compact",
|
||||
* path="/oggit/v1/repositories/{repoId}/compact",
|
||||
* summary="Realizar la compactación del repositorio Git",
|
||||
* tags={"Repositories"},
|
||||
* @OA\Parameter(
|
||||
* name="id",
|
||||
* name="repoId",
|
||||
* in="path",
|
||||
* required=true,
|
||||
* 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
|
||||
$result = $this->ogGitService->makeRequest('POST', '/repositories/' . $id . '/compact');
|
||||
$result = $this->ogGitService->makeRequest('POST', '/repositories/' . $repoId . '/compact');
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* @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(
|
||||
* 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",
|
||||
* tags={"Branches"},
|
||||
* @OA\Parameter(
|
||||
* name="id",
|
||||
* name="repoId",
|
||||
* in="path",
|
||||
* required=true,
|
||||
* 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
|
||||
$response = $this->ogGitService->makeRequest('GET', "/repositories/{$id}/branches");
|
||||
$response = $this->ogGitService->makeRequest('GET', "/repositories/{$repoId}/branches");
|
||||
|
||||
if (isset($response['branches'])) {
|
||||
return new JsonResponse(['branches' => $response['branches']], 200);
|
||||
|
@ -300,6 +533,10 @@ public function getStatus(): Response
|
|||
* @OA\Response(
|
||||
* response=400,
|
||||
* 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);
|
||||
}
|
||||
|
||||
// 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([
|
||||
'message' => 'Rama creada con éxito',
|
||||
'branchName' => $branchName,
|
||||
'repository' => $repoId
|
||||
], 201);
|
||||
// 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 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(
|
||||
* response=500,
|
||||
* description="Error en el servidor"
|
||||
* description="Error al conectar con el servicio externo"
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function deleteBranch($repoId, $branchId): JsonResponse
|
||||
{
|
||||
return new JsonResponse([
|
||||
'message' => "Llamando a la función deleteBranch para eliminar la rama con ID $branchId del repositorio con ID $repoId."
|
||||
], 204);
|
||||
// Hacer la solicitud al servicio externo para eliminar la rama
|
||||
$response = $this->ogGitService->makeRequest('DELETE', "/repositories/{$repoId}/branches/{$branchId}");
|
||||
|
||||
// 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