5 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
6 use Symfony\Component\DependencyInjection\ContainerInterface;
7 use Symfony\Component\HttpFoundation\JsonResponse;
16 class Api implements ContainerInjectionInterface {
23 private $requestStack;
37 public static function create(ContainerInterface $container) {
38 return new Api($container);
45 $this->requestStack = $container->get(
'request_stack');
46 $this->harvester = $container->get(
'dkan_harvest.service');
56 $rows = $this->harvester
59 return new JsonResponse(
62 [
"Access-Control-Allow-Origin" =>
"*"]
65 catch (\Exception $e) {
66 return $this->exceptionJsonResponse($e);
81 $plan = $this->harvester
82 ->getHarvestPlan($identifier);
84 return new JsonResponse(
87 [
"Access-Control-Allow-Origin" =>
"*"]
90 catch (\Exception $e) {
91 return $this->exceptionJsonResponse($e);
98 public function register() {
100 $harvest_plan = $this->requestStack->getCurrentRequest()->getContent();
101 $plan = json_decode($harvest_plan);
102 $identifier = $this->harvester
103 ->registerHarvest($plan);
105 return new JsonResponse(
107 "identifier" => $identifier,
111 "Access-Control-Allow-Origin" =>
"*",
115 catch (\Exception $e) {
116 return $this->exceptionJsonResponse($e);
128 ->deregisterHarvest($identifier);
130 return new JsonResponse(
132 "identifier" => $identifier,
135 [
"Access-Control-Allow-Origin" =>
"*"]
138 catch (\Exception $e) {
139 return $this->exceptionJsonResponse($e);
148 $payloadJson = $this->requestStack->getCurrentRequest()->getContent();
149 $payload = json_decode($payloadJson);
150 if (!isset($payload->plan_id)) {
152 "message" =>
"Invalid payload.",
153 "documentation" =>
"/api/1/harvest",
155 return $this->jsonResponse($return, 422);
158 $id = $payload->plan_id;
159 $result = $this->harvester
162 return new JsonResponse(
168 [
"Access-Control-Allow-Origin" =>
"*"]
171 catch (\Exception $e) {
172 return $this->exceptionJsonResponse($e);
182 $id = $this->requestStack->getCurrentRequest()->get(
'plan');
184 return new JsonResponse(
185 [
"message" =>
"Missing 'plan' query parameter value"],
187 [
"Access-Control-Allow-Origin" =>
"*"]
191 $response = $this->harvester
192 ->getAllHarvestRunInfo($id);
194 return new JsonResponse(
197 [
"Access-Control-Allow-Origin" =>
"*"]
200 catch (\Exception $e) {
201 return $this->exceptionJsonResponse($e);
213 $id = $this->requestStack->getCurrentRequest()->get(
'plan');
215 return new JsonResponse(
216 [
"message" =>
"Missing 'plan' query parameter value"],
218 [
"Access-Control-Allow-Origin" =>
"*"]
223 $response = $this->harvester
224 ->getHarvestRunInfo($id, $identifier);
226 return new JsonResponse(
227 json_decode($response),
229 [
"Access-Control-Allow-Origin" =>
"*"]
232 catch (\Exception $e) {
233 return $this->exceptionJsonResponse($e);
243 $id = $this->requestStack->getCurrentRequest()->get(
'plan');
245 return new JsonResponse(
246 [
"message" =>
"Missing 'plan' query parameter value"],
248 [
"Access-Control-Allow-Origin" =>
"*"]
252 $result = $this->harvester
253 ->revertHarvest($id);
255 return new JsonResponse(
262 "Access-Control-Allow-Origin" =>
"*",
266 catch (\Exception $e) {
267 return $this->exceptionJsonResponse($e);
274 private function exceptionJsonResponse(\Exception $e,
int $code = 400) {
275 return $this->jsonResponse([
'message' => $e->getMessage()], $code);
281 private function jsonResponse(array $return,
int $code = 400) {
282 return new JsonResponse(