From fa04dd26cce37ec7240d1918d0e1aad992d2593e Mon Sep 17 00:00:00 2001
From: Kacper Donat <kadet1090@gmail.com>
Date: Thu, 17 Sep 2020 21:02:27 +0200
Subject: [PATCH] Add integration with api for static pages

---
 src/api/dto/page.ts | 40 ++++++++++++++++++++++++++++++++++++++++
 src/api/page.tsx    | 28 +++++++---------------------
 src/data/page.ts    |  1 +
 webpack.config.js   |  5 ++---
 4 files changed, 50 insertions(+), 24 deletions(-)
 create mode 100644 src/api/dto/page.ts

diff --git a/src/api/dto/page.ts b/src/api/dto/page.ts
new file mode 100644
index 0000000..390fa03
--- /dev/null
+++ b/src/api/dto/page.ts
@@ -0,0 +1,40 @@
+import { Identifiable } from "@/data";
+import { Page } from "@/data/page";
+import { Transformer } from "@/serialization";
+
+export interface PageDTO extends Identifiable {
+    accessName: string;
+    title: string;
+    titleEng: string;
+    content: string;
+    contentEng: string;
+}
+
+export const pageDtoTransformer: Transformer<PageDTO, Page> = {
+    reverseTransform(subject: Page, context: undefined): PageDTO {
+        return {
+            id: subject.id,
+            accessName: subject.slug,
+            content: subject.content.pl,
+            contentEng: subject.content.en,
+            title: subject.title.pl,
+            titleEng: subject.title.en,
+        }
+    },
+    transform(subject: PageDTO, context: undefined): Page {
+        return {
+            slug: subject.accessName,
+            id: subject.id,
+            content: {
+                pl: subject.content,
+                en: subject.contentEng
+            },
+            title: {
+                pl: subject.title,
+                en: subject.titleEng
+            },
+        };
+    }
+}
+
+export default pageDtoTransformer;
diff --git a/src/api/page.tsx b/src/api/page.tsx
index f1c69ee..1a5cd02 100644
--- a/src/api/page.tsx
+++ b/src/api/page.tsx
@@ -1,27 +1,13 @@
-// MOCK
 import { Page } from "@/data/page";
+import { PageDTO, pageDtoTransformer } from "./dto/page"
+import { axios } from "@/api/index";
+import { prepare } from "@/routing";
 
-const tos = `<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Bestiarum vero nullum iudicium puto. Quare ad ea primum, si videtur; <b>Duo Reges: constructio interrete.</b> <i>Eam tum adesse, cum dolor omnis absit;</i> Sed ad bona praeterita redeamus. <mark>Facillimum id quidem est, inquam.</mark> Apud ceteros autem philosophos, qui quaesivit aliquid, tacet; </p>
-
-<p><a href="http://loripsum.net/" target="_blank">Quorum altera prosunt, nocent altera.</a> Eam stabilem appellas. <i>Sed nimis multa.</i> Quo plebiscito decreta a senatu est consuli quaestio Cn. Sin laboramus, quis est, qui alienae modum statuat industriae? <mark>Quod quidem nobis non saepe contingit.</mark> Si autem id non concedatur, non continuo vita beata tollitur. <a href="http://loripsum.net/" target="_blank">Illum mallem levares, quo optimum atque humanissimum virum, Cn.</a> <i>Id est enim, de quo quaerimus.</i> </p>
-
-<p>Ille vero, si insipiens-quo certe, quoniam tyrannus -, numquam beatus; Sin dicit obscurari quaedam nec apparere, quia valde parva sint, nos quoque concedimus; Et quod est munus, quod opus sapientiae? Ab hoc autem quaedam non melius quam veteres, quaedam omnino relicta. </p>
-`
+const STATIC_PAGE_ENDPOINT = "/staticPage/:slug"
 
 export async function get(slug: string): Promise<Page> {
-    if (slug === "/regulamin" || slug === "/rules") {
-        return {
-            id: "tak",
-            content: {
-                pl: tos,
-                en: tos,
-            },
-            title: {
-                pl: "Regulamin Praktyk",
-                en: "Terms of Internship",
-            },
-        }
-    }
+    const response = await axios.get<PageDTO>(prepare(STATIC_PAGE_ENDPOINT, { slug }))
+    const page = response.data;
 
-    throw new Error();
+    return pageDtoTransformer.transform(page);
 }
diff --git a/src/data/page.ts b/src/data/page.ts
index a474e82..ca7e3c9 100644
--- a/src/data/page.ts
+++ b/src/data/page.ts
@@ -3,4 +3,5 @@ import { Identifiable, Multilingual } from "@/data/common";
 export interface Page extends Identifiable {
     title: Multilingual<string>;
     content: Multilingual<string>;
+    slug: string;
 }
diff --git a/webpack.config.js b/webpack.config.js
index 94454fc..c98251d 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -51,12 +51,11 @@ const config = {
     ],
     devServer: {
         contentBase: path.resolve("./public/"),
-        port: 443,
-        host: 'system-praktyk.stg.kadet.net',
+        host: process.env.APP_HOST || 'system-praktyk-front.localhost',
         disableHostCheck: true,
         historyApiFallback: true,
         overlay: true,
-        https: true,
+        https: !!process.env.APP_HTTPS || false,
         proxy: {
             "/api": {
                 target: "http://system-praktyk-front.localhost:8080/",