From 85bc5ce595e541443efe70401cf9d9b74a34a8c1 Mon Sep 17 00:00:00 2001
From: Alejandro Celaya <alejandro@alejandrocelaya.com>
Date: Sun, 31 Jan 2021 13:12:56 +0100
Subject: [PATCH] Moved transformer to constructor in some actions, to avoid
 creating it over and over

---
 .../src/Action/ShortUrl/AbstractCreateShortUrlAction.php  | 8 +++-----
 module/Rest/src/Action/ShortUrl/ListShortUrlsAction.php   | 8 +++-----
 module/Rest/src/Action/ShortUrl/ResolveShortUrlAction.php | 7 +++----
 3 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/module/Rest/src/Action/ShortUrl/AbstractCreateShortUrlAction.php b/module/Rest/src/Action/ShortUrl/AbstractCreateShortUrlAction.php
index cfec8cac..a7278457 100644
--- a/module/Rest/src/Action/ShortUrl/AbstractCreateShortUrlAction.php
+++ b/module/Rest/src/Action/ShortUrl/AbstractCreateShortUrlAction.php
@@ -16,22 +16,20 @@ use Shlinkio\Shlink\Rest\Action\AbstractRestAction;
 abstract class AbstractCreateShortUrlAction extends AbstractRestAction
 {
     private UrlShortenerInterface $urlShortener;
-    private array $domainConfig;
+    private ShortUrlDataTransformer $transformer;
 
     public function __construct(UrlShortenerInterface $urlShortener, array $domainConfig)
     {
         $this->urlShortener = $urlShortener;
-        $this->domainConfig = $domainConfig;
+        $this->transformer = new ShortUrlDataTransformer($domainConfig);
     }
 
     public function handle(Request $request): Response
     {
         $shortUrlMeta = $this->buildShortUrlData($request);
-
         $shortUrl = $this->urlShortener->shorten($shortUrlMeta);
-        $transformer = new ShortUrlDataTransformer($this->domainConfig);
 
-        return new JsonResponse($transformer->transform($shortUrl));
+        return new JsonResponse($this->transformer->transform($shortUrl));
     }
 
     /**
diff --git a/module/Rest/src/Action/ShortUrl/ListShortUrlsAction.php b/module/Rest/src/Action/ShortUrl/ListShortUrlsAction.php
index 8da502cf..cd1bb4af 100644
--- a/module/Rest/src/Action/ShortUrl/ListShortUrlsAction.php
+++ b/module/Rest/src/Action/ShortUrl/ListShortUrlsAction.php
@@ -22,12 +22,12 @@ class ListShortUrlsAction extends AbstractRestAction
     protected const ROUTE_ALLOWED_METHODS = [self::METHOD_GET];
 
     private ShortUrlServiceInterface $shortUrlService;
-    private array $domainConfig;
+    private ShortUrlDataTransformer $transformer;
 
     public function __construct(ShortUrlServiceInterface $shortUrlService, array $domainConfig)
     {
         $this->shortUrlService = $shortUrlService;
-        $this->domainConfig = $domainConfig;
+        $this->transformer = new ShortUrlDataTransformer($domainConfig);
     }
 
     public function handle(Request $request): Response
@@ -36,8 +36,6 @@ class ListShortUrlsAction extends AbstractRestAction
             ShortUrlsParams::fromRawData($request->getQueryParams()),
             AuthenticationMiddleware::apiKeyFromRequest($request),
         );
-        return new JsonResponse(['shortUrls' => $this->serializePaginator($shortUrls, new ShortUrlDataTransformer(
-            $this->domainConfig,
-        ))]);
+        return new JsonResponse(['shortUrls' => $this->serializePaginator($shortUrls, $this->transformer)]);
     }
 }
diff --git a/module/Rest/src/Action/ShortUrl/ResolveShortUrlAction.php b/module/Rest/src/Action/ShortUrl/ResolveShortUrlAction.php
index 99e58fee..fafd15df 100644
--- a/module/Rest/src/Action/ShortUrl/ResolveShortUrlAction.php
+++ b/module/Rest/src/Action/ShortUrl/ResolveShortUrlAction.php
@@ -19,22 +19,21 @@ class ResolveShortUrlAction extends AbstractRestAction
     protected const ROUTE_ALLOWED_METHODS = [self::METHOD_GET];
 
     private ShortUrlResolverInterface $urlResolver;
-    private array $domainConfig;
+    private ShortUrlDataTransformer $transformer;
 
     public function __construct(ShortUrlResolverInterface $urlResolver, array $domainConfig)
     {
         $this->urlResolver = $urlResolver;
-        $this->domainConfig = $domainConfig;
+        $this->transformer = new ShortUrlDataTransformer($domainConfig);
     }
 
     public function handle(Request $request): Response
     {
-        $transformer = new ShortUrlDataTransformer($this->domainConfig);
         $url = $this->urlResolver->resolveShortUrl(
             ShortUrlIdentifier::fromApiRequest($request),
             AuthenticationMiddleware::apiKeyFromRequest($request),
         );
 
-        return new JsonResponse($transformer->transform($url));
+        return new JsonResponse($this->transformer->transform($url));
     }
 }