refs #734 Control of errores and http codes in controler
parent
c5fd09704b
commit
b1c699dbea
|
@ -11,6 +11,7 @@
|
|||
"doctrine/doctrine-bundle": "^2.0",
|
||||
"doctrine/doctrine-migrations-bundle": "^3.0",
|
||||
"doctrine/orm": "^2.7",
|
||||
"guzzlehttp/guzzle": "^7.9",
|
||||
"nelmio/api-doc-bundle": "^4.29",
|
||||
"phpdocumentor/reflection-docblock": "^5.0",
|
||||
"phpstan/phpdoc-parser": "^1.13",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
namespace App\OgGitBundle\Controller;
|
||||
use OpenApi\Annotations as OA;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use App\OgGitBundle\Service\CurlRequestService;
|
||||
use App\OgGitBundle\Service\OgGitService;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
|
@ -22,12 +22,12 @@ class OgGitController
|
|||
* @OA\Info(title="OgGit API", version="1.0")
|
||||
*/
|
||||
|
||||
private $curlRequestService;
|
||||
private $ogGitService;
|
||||
private $httpClient;
|
||||
private $params;
|
||||
public function __construct(CurlRequestService $curlRequestService, LoggerInterface $logger, HttpClientInterface $httpClient, ParameterBagInterface $params)
|
||||
public function __construct(OgGitService $ogGitService, LoggerInterface $logger, HttpClientInterface $httpClient, ParameterBagInterface $params)
|
||||
{
|
||||
$this->curlRequestService = $curlRequestService;
|
||||
$this->ogGitService = $ogGitService;
|
||||
$this->logger = $logger;
|
||||
$this->httpClient = $httpClient;
|
||||
$this->params = $params;
|
||||
|
@ -74,38 +74,83 @@ public function getStatus(): Response
|
|||
* type="array",
|
||||
* @OA\Items(
|
||||
* type="object",
|
||||
* @OA\Property(property="id", type="string", description="ID del repositorio"),
|
||||
* @OA\Property(property="name", type="string", description="Nombre del repositorio"),
|
||||
* @OA\Property(property="createdAt", type="string", format="date-time", description="Fecha de creación del repositorio"),
|
||||
* @OA\Property(property="lastModified", type="string", format="date-time", description="Última modificación del repositorio")
|
||||
* @OA\Property(property="name", type="string", description="Nombre del repositorio")
|
||||
* )
|
||||
* )
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response=500,
|
||||
* description="Error interno del servidor"
|
||||
* description="Error al conectar con el servicio externo"
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function getRepositories(): JsonResponse
|
||||
{
|
||||
// Lógica para obtener los repositorios (por ahora, devolvemos un mensaje de prueba)
|
||||
return new JsonResponse([
|
||||
[
|
||||
'id' => '1',
|
||||
'name' => 'Repositorio 1',
|
||||
'createdAt' => '2024-09-12T10:00:00Z',
|
||||
'lastModified' => '2024-09-12T12:00:00Z'
|
||||
],
|
||||
[
|
||||
'id' => '2',
|
||||
'name' => 'Repositorio 2',
|
||||
'createdAt' => '2024-09-11T08:30:00Z',
|
||||
'lastModified' => '2024-09-12T09:00:00Z'
|
||||
]
|
||||
], 200);
|
||||
// Hacer la solicitud al servicio Python utilizando makeRequest
|
||||
$response = $this->ogGitService->makeRequest('GET', '/repositories');
|
||||
|
||||
// Verificar si la solicitud al servicio Python falló
|
||||
if (isset($response['error'])) {
|
||||
return new JsonResponse(['error' => 'No se pudo conectar con el servicio externo'], 500);
|
||||
}
|
||||
|
||||
// Devolver la lista de repositorios
|
||||
return new JsonResponse($response, 200);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @Route("/oggit/v1/repositories", methods={"POST"})
|
||||
* @OA\Post(
|
||||
* path="/oggit/v1/repositories",
|
||||
* summary="Crear un nuevo repositorio",
|
||||
* tags={"Repositories"},
|
||||
* @OA\RequestBody(
|
||||
* required=true,
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
* @OA\Property(property="name", type="string", description="Nombre del repositorio")
|
||||
* )
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response=201,
|
||||
* description="Repositorio creado con éxito"
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response=400,
|
||||
* description="Nombre de repositorio inválido"
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response=500,
|
||||
* description="Error al conectar con el servicio externo"
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function createRepository(Request $request): JsonResponse
|
||||
{
|
||||
// Obtener el contenido JSON del cuerpo de la solicitud
|
||||
$data = json_decode($request->getContent(), true);
|
||||
$name = $data['name'] ?? '';
|
||||
|
||||
// Validar el nombre del repositorio usando isValidBranchName
|
||||
if (!$this->ogGitService->isValidBranchName($name)) {
|
||||
return new JsonResponse(['error' => 'Nombre de repositorio inválido'], 400);
|
||||
}
|
||||
|
||||
// Hacer la solicitud para crear el repositorio
|
||||
$response = $this->ogGitService->makeRequest('PUT', "/repositories/{$name}");
|
||||
|
||||
// Manejar la respuesta en función de si el repositorio fue creado o ya existía
|
||||
if ($response['status'] === 'Repository created') {
|
||||
return new JsonResponse(['message' => 'Repositorio creado con éxito'], 201);
|
||||
} elseif ($response['status'] === 'Repository already exists') {
|
||||
return new JsonResponse(['message' => 'El repositorio ya existe'], 200);
|
||||
}
|
||||
|
||||
// Respuesta por defecto en caso de otro resultado inesperado
|
||||
return new JsonResponse(['error' => 'Error desconocido'], 500);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/oggit/v1/repositories/{id}", methods={"DELETE"})
|
||||
* @OA\Delete(
|
||||
|
@ -117,10 +162,11 @@ public function getStatus(): Response
|
|||
* in="path",
|
||||
* required=true,
|
||||
* description="ID del repositorio a eliminar",
|
||||
* example="linux.git",
|
||||
* @OA\Schema(type="string")
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response=204,
|
||||
* response=200,
|
||||
* description="Repositorio eliminado exitosamente"
|
||||
* ),
|
||||
* @OA\Response(
|
||||
|
@ -129,17 +175,68 @@ public function getStatus(): Response
|
|||
* ),
|
||||
* @OA\Response(
|
||||
* response=500,
|
||||
* description="Error en el servidor"
|
||||
* description="Error al conectar con el servicio externo"
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function deleteRepository($id): JsonResponse
|
||||
{
|
||||
return new JsonResponse([
|
||||
'message' => "Llamando a la función deleteRepository para eliminar el repositorio con ID $id."
|
||||
], 204);
|
||||
// Hacer la solicitud al servicio externo para eliminar el repositorio
|
||||
$response = $this->ogGitService->makeRequest('DELETE', "/repositories/{$id}");
|
||||
|
||||
// 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'] === 'Repository deleted') {
|
||||
return new JsonResponse(['message' => 'Repositorio eliminado exitosamente'], 200);
|
||||
}
|
||||
|
||||
// Devolver exactamente lo que devuelve tu compañero, incluyendo 404
|
||||
if (isset($response['error']) && $response['error'] === 'Repository not found') {
|
||||
return new JsonResponse(['error' => 'Repository not found'], 404);
|
||||
}
|
||||
|
||||
// Respuesta por defecto en caso de un error inesperado
|
||||
return new JsonResponse(['error' => 'Error desconocido'], 500);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/oggit/v1/repositories/{id}/compact", methods={"POST"})
|
||||
* @OA\Post(
|
||||
* path="/oggit/v1/repositories/{id}/compact",
|
||||
* summary="Realizar la compactación del repositorio Git",
|
||||
* tags={"Repositories"},
|
||||
* @OA\Parameter(
|
||||
* name="id",
|
||||
* in="path",
|
||||
* required=true,
|
||||
* description="ID del repositorio para compactar",
|
||||
* @OA\Schema(type="string")
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="Compactación realizada con éxito"
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response=500,
|
||||
* description="Error al realizar la compactación"
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function compactRepository($id): JsonResponse
|
||||
{
|
||||
// Llamar a la función del servicio para compactar el repositorio
|
||||
$result = $this->ogGitService->makeRequest('POST', '/repositories/' . $id . '/compact');
|
||||
|
||||
if ($result['success']) {
|
||||
return new JsonResponse(['message' => "Compactación realizada con éxito para el repositorio: {$id}"], 200);
|
||||
}
|
||||
|
||||
return new JsonResponse(['error' => 'Error al realizar la compactación'], 500);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/oggit/v1/repositories/{id}/branches", methods={"GET"})
|
||||
|
@ -156,22 +253,75 @@ public function getStatus(): Response
|
|||
* ),
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="Operación exitosa",
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
* @OA\Property(property="message", type="string")
|
||||
* )
|
||||
* description="Lista de ramas obtenida con éxito"
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response=500,
|
||||
* description="Error al obtener las ramas"
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function getBranches($id): JsonResponse
|
||||
{
|
||||
return new JsonResponse([
|
||||
'message' => "Llamando a la función getBranches con estos parámetros: id = $id"
|
||||
], 200);
|
||||
// Llamar a la función makeRequest del servicio OgGitService
|
||||
$response = $this->ogGitService->makeRequest('GET', "/repositories/{$id}/branches");
|
||||
|
||||
if (isset($response['branches'])) {
|
||||
return new JsonResponse(['branches' => $response['branches']], 200);
|
||||
}
|
||||
|
||||
return new JsonResponse(['error' => 'No se pudieron obtener las ramas del repositorio'], 500);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/oggit/v1/repositories/{repoId}/branches", methods={"POST"})
|
||||
* @OA\Post(
|
||||
* path="/oggit/v1/repositories/{repoId}/branches",
|
||||
* summary="Crear una nueva rama en un repositorio",
|
||||
* tags={"Branches"},
|
||||
* @OA\Parameter(
|
||||
* name="repoId",
|
||||
* in="path",
|
||||
* required=true,
|
||||
* description="ID del repositorio",
|
||||
* @OA\Schema(type="string")
|
||||
* ),
|
||||
* @OA\RequestBody(
|
||||
* required=true,
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
* @OA\Property(property="branchName", type="string", description="Nombre de la nueva rama")
|
||||
* )
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response=201,
|
||||
* description="Rama creada con éxito"
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response=400,
|
||||
* description="Nombre de rama inválido"
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function createBranch(Request $request, $repoId): JsonResponse
|
||||
{
|
||||
// Obtener el contenido JSON del cuerpo de la solicitud
|
||||
$data = json_decode($request->getContent(), true);
|
||||
$branchName = $data['branchName'] ?? '';
|
||||
|
||||
// Validar el nombre de la rama usando isValidBranchName
|
||||
if (!$this->ogGitService->isValidBranchName($branchName)) {
|
||||
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
|
||||
|
||||
return new JsonResponse([
|
||||
'message' => 'Rama creada con éxito',
|
||||
'branchName' => $branchName,
|
||||
'repository' => $repoId
|
||||
], 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/oggit/v1/repositories/{repoId}/branches/{branchId}", methods={"DELETE"})
|
||||
|
|
Loading…
Reference in New Issue