From 43a67247aad4a37d52ee2642435fdf0706789a35 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Vesel=C3=BD?= <veselj57@fel.cvut.cz>
Date: Thu, 17 Dec 2020 00:05:39 +0100
Subject: [PATCH] docker deploy

---
 backend/build.gradle                          |  13 +-
 backend/dockerfile                            |  16 +
 .../cz/cvut/fel/veselj57/api/RandomMemeAPI.kt |  24 +-
 backend/test/ApplicationTest.kt               |  11 +-
 docker-compose.yml                            |  25 +
 frontend/.env                                 |   1 +
 frontend/dockerfile                           |  22 +
 frontend/package.json                         |   2 +-
 frontend/src/App.vue                          |   7 +-
 frontend/src/api/meme_bot_api.js              |  22 +
 frontend/src/components/NewMeme.vue           |  44 +-
 frontend/src/components/RandomMeme.vue        |  44 +-
 frontend/src/sadf.js                          | 999 ++++++++++++++++++
 readme.MD                                     |   1 +
 swagger.json                                  |  96 ++
 15 files changed, 1274 insertions(+), 53 deletions(-)
 create mode 100644 backend/dockerfile
 create mode 100644 docker-compose.yml
 create mode 100644 frontend/.env
 create mode 100644 frontend/dockerfile
 create mode 100644 frontend/src/api/meme_bot_api.js
 create mode 100644 frontend/src/sadf.js
 create mode 100644 readme.MD
 create mode 100644 swagger.json

diff --git a/backend/build.gradle b/backend/build.gradle
index ad2a941..4ea43cf 100644
--- a/backend/build.gradle
+++ b/backend/build.gradle
@@ -10,9 +10,11 @@ buildscript {
 
 plugins{
     id 'org.jetbrains.kotlin.plugin.serialization' version "$kotlin_version"
+    id "com.github.johnrengelman.shadow" version "6.1.0"
 }
 
 apply plugin: 'kotlin'
+
 apply plugin: 'application'
 
 group 'cz.cvut.fel.veselj57'
@@ -26,8 +28,6 @@ sourceSets {
     test.resources.srcDirs = ['testresources']
 }
 
-
-
 repositories {
     mavenLocal()
     jcenter()
@@ -55,3 +55,12 @@ dependencies {
     implementation 'org.kodein.di:kodein-di-framework-ktor-server-jvm:6.4.1'
     testImplementation "io.ktor:ktor-server-tests:$ktor_version"
 }
+
+mainClassName = "io.ktor.server.netty.EngineMain"
+
+
+shadowJar {
+    archiveBaseName.set( 'application')
+    archiveClassifier.set('')
+    archiveVersion.set('')
+}
diff --git a/backend/dockerfile b/backend/dockerfile
new file mode 100644
index 0000000..3bec7f2
--- /dev/null
+++ b/backend/dockerfile
@@ -0,0 +1,16 @@
+FROM openjdk:8-jre-alpine
+
+ENV APPLICATION_USER ktor
+RUN adduser -D -g '' $APPLICATION_USER
+
+RUN mkdir /app
+RUN chown -R $APPLICATION_USER /app
+
+USER $APPLICATION_USER
+
+COPY ./build/libs/application.jar /app/application.jar
+WORKDIR /app
+
+CMD ["java", "-server", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-XX:InitialRAMFraction=2", "-XX:MinRAMFraction=2", "-XX:MaxRAMFraction=2", "-XX:+UseG1GC", "-XX:MaxGCPauseMillis=100", "-XX:+UseStringDeduplication", "-jar", "application.jar"]
+
+EXPOSE 8000
\ No newline at end of file
diff --git a/backend/src/cz/cvut/fel/veselj57/api/RandomMemeAPI.kt b/backend/src/cz/cvut/fel/veselj57/api/RandomMemeAPI.kt
index 1dbbf97..7ea7e01 100644
--- a/backend/src/cz/cvut/fel/veselj57/api/RandomMemeAPI.kt
+++ b/backend/src/cz/cvut/fel/veselj57/api/RandomMemeAPI.kt
@@ -21,9 +21,23 @@ fun Application.RandomMemeAPI(){
             val jokeAPI by kodein().instance<JokeAPI>()
             val generatorAPI by kodein().instance<MemeGeneratorAPI>()
 
-            val type = call.parameters["type"]?.let { it1 -> JokeType.valueOf(it1) }
-            val topic = call.parameters["topic"]?.let { it1 -> JokeTopic.valueOf(it1)} ?: JokeTopic.Any
-            val meme = call.parameters["meme"] ?: "Bad-Luck-Brian"
+            val type = try {
+                JokeType.valueOf(call.parameters["type"]!!)
+            }catch (e: Exception){
+                throw BadRequestException("Missing or not  correctly formatted type parameter")
+            }
+
+            val topic = try {
+               JokeTopic.valueOf(call.parameters["topic"]!!)
+            }catch (e: Exception){
+                throw BadRequestException("Missing or not  correctly formatted topic parameter")
+            }
+
+            val meme = try {
+                call.parameters["image"]!!
+            }catch (e: Exception){
+                throw BadRequestException("Missing or not  correctly formatted image parameter")
+            }
 
             val joke = jokeAPI.getRandomJoke(topic, type)
 
@@ -36,8 +50,8 @@ fun Application.RandomMemeAPI(){
         get("/generate") {
             val generatorAPI by kodein().instance<MemeGeneratorAPI>()
 
-            val top = call.parameters["top"]
-            val bottom = call.parameters["bottom"]
+            val top = call.parameters["top_text"]
+            val bottom = call.parameters["bottom_text"]
             val meme = call.parameters["image"]
 
             if (meme == null)
diff --git a/backend/test/ApplicationTest.kt b/backend/test/ApplicationTest.kt
index 0a065e1..a287dfe 100644
--- a/backend/test/ApplicationTest.kt
+++ b/backend/test/ApplicationTest.kt
@@ -1,18 +1,9 @@
 package cz.cvut.fel.veselj57
 
-import cz.cvut.fel.veselj57.cz.cvut.fel.veselj57.module
 import io.ktor.http.*
 import kotlin.test.*
 import io.ktor.server.testing.*
 
 class ApplicationTest {
-    @Test
-    fun testRoot() {
-        withTestApplication({ module(testing = true) }) {
-            handleRequest(HttpMethod.Get, "/").apply {
-                assertEquals(HttpStatusCode.OK, response.status())
-                assertEquals("HELLO WORLD!", response.content)
-            }
-        }
-    }
+
 }
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..e903b68
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,25 @@
+version: "3.6"
+services:
+
+  frontend:
+    build: ./frontend
+    ports:
+      - "8080:8080"
+    depends_on:
+      - "backend"
+      
+  backend:
+    build: ./backend
+    ports:
+      - "8000:8000"
+      
+  swagger-ui:
+    image: swaggerapi/swagger-ui
+    container_name: "swagger-ui"
+    ports:
+      - "8081:8080"
+    volumes:
+      - ./swagger.json:/openapi.json
+    environment:
+      SWAGGER_JSON: /openapi.json
+
diff --git a/frontend/.env b/frontend/.env
new file mode 100644
index 0000000..9d5af08
--- /dev/null
+++ b/frontend/.env
@@ -0,0 +1 @@
+VUE_APP_MEME_BOT_API=http://localhost:8000
\ No newline at end of file
diff --git a/frontend/dockerfile b/frontend/dockerfile
new file mode 100644
index 0000000..acc5fc8
--- /dev/null
+++ b/frontend/dockerfile
@@ -0,0 +1,22 @@
+FROM node:lts-alpine
+
+# install simple http server for serving static content
+RUN npm install -g http-server
+
+# make the 'app' folder the current working directory
+WORKDIR /app
+
+# copy both 'package.json' and 'package-lock.json' (if available)
+COPY package*.json ./
+
+# install project dependencies
+RUN npm install
+
+# copy project files and folders to the current working directory (i.e. 'app' folder)
+COPY . .
+
+# build app for production with minification
+RUN npm run build
+
+EXPOSE 8080
+CMD [ "http-server", "dist" ]
diff --git a/frontend/package.json b/frontend/package.json
index 6e5a183..f58dab7 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -3,7 +3,7 @@
   "version": "0.1.0",
   "private": true,
   "scripts": {
-    "serve": "vue-cli-service serve",
+    "serve": "vue-cli-service serve --port 8080",
     "build": "vue-cli-service build",
     "lint": "vue-cli-service lint"
   },
diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 5736104..d6ffb5c 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -3,18 +3,15 @@
 
   <main class="container">
 
-
     <div class="my-3 p-3 bg-white rounded shadow-sm">
       <div class="jumbotron">
-        <h1 class="display-4">Hello, world!</h1>
-        <p class="lead">This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p>
+        <h1 class="display-4">MemeBot</h1>
         <hr class="my-4">
-        <p>It uses utility classes for typography and spacing to space content out within the larger container.</p>
+        <p>Propojili jsme pro Vás MEME generator s databází vtipů. Už vtipy nemusíte číst, stačí vidět MEME. </p>
         <p class="lead">
           <router-link to="/random" class="btn btn-primary btn-lg">Náhodné MEME</router-link>
 
           <router-link to="/new" class="btn btn-primary btn-lg" style="margin-left: 50px">VlastnĂ­ MEME</router-link>
-
         </p>
 
       </div>
diff --git a/frontend/src/api/meme_bot_api.js b/frontend/src/api/meme_bot_api.js
new file mode 100644
index 0000000..731b61f
--- /dev/null
+++ b/frontend/src/api/meme_bot_api.js
@@ -0,0 +1,22 @@
+
+export default {
+    types: [
+        {name: "Jednořádkový", value: "SINGLE"},
+        {name: "Dvouřádkový", value: "TWOPART"}
+    ],
+    images: [
+        {name: "Advice Dog", value: "Advice-Dog"},
+        {name: "Advice Doge", value: "Advice-Doge"},
+        {name: "Advice Peeta", value: "Advice-Peeta"},
+    ],
+    topics: [
+        {name: "Programování", value: "Programming"},
+        {name: "ÄŚernĂ˝ humor", value: "Dark"},
+        {name: "Strašvalueelný", value: "Spooky"},
+        {name: "Vánoce", value: "Christmas"},
+        {name: "Náhodný", value: "Any"},
+        {name: "Smíšený", value: "Miscellaneous"},
+        {name: "Slovní hříčka", value: "Pun"},
+    ]
+
+}
\ No newline at end of file
diff --git a/frontend/src/components/NewMeme.vue b/frontend/src/components/NewMeme.vue
index e060383..a4646fb 100644
--- a/frontend/src/components/NewMeme.vue
+++ b/frontend/src/components/NewMeme.vue
@@ -5,35 +5,35 @@
       <h2>Generovat meme </h2>
 
       <div class="row">
-        <form class="col-md-6">
+        <form class="col-md-6" @submit="fetch_meme">
 
           <div class="form-group">
-            <label for="inputEmail4">HornĂ­ text</label>
-            <input type="email" class="form-control" id="inputEmail4" placeholder="Email">
+            <label for="top_text">HornĂ­ text</label>
+            <input type="text" class="form-control" id="top_text" placeholder="Yo mama is so .." v-model="top_text">
           </div>
 
           <div class="form-group">
-            <label for="inputPassword4">DolnĂ­ text</label>
-            <input type="password" class="form-control" id="inputPassword4" placeholder="Password">
+            <label for="bottom_text">DolnĂ­ text</label>
+            <input type="text" class="form-control" id="bottom_text" placeholder="That I ..." v-model="bottom_text">
           </div>
 
           <div class="form-group">
-            <label for="inputState">Obrázek</label>
-            <select id="inputState" class="form-control">
-              <option selected>Choose...</option>
-              <option>...</option>
+            <label for="image">Obrázek</label>
+            <select id="image" class="form-control" v-model="image">
+              <option v-for="type in settings.images" v-bind:key="type.value" v-bind:value="type.value" >
+                {{ type.name }}
+              </option>
             </select>
           </div>
 
-          <button type="submit" class="btn btn-primary">Sign in</button>
+          <button type="submit" class="btn btn-primary">Zasmát se </button>
         </form>
 
         <div class="col-md-6">
-          <img src="../assets/logo.png" class="rounded mx-auto d-block">
+          <img v-bind:src="meme" class="rounded mx-auto d-block">
         </div>
       </div>
 
-
     </div>
 
 </div>
@@ -43,11 +43,27 @@
 <script>
 
 import 'bootstrap';
+import meme_bot_api from "@/api/meme_bot_api";
 
 export default {
   name: 'App',
-  components: {
-
+  data: function () {
+    return {
+      image: "",
+      top_text: "",
+      bottom_text: "",
+      meme: "logo.png",
+      settings: meme_bot_api,
+    }
+  },
+  methods: {
+    fetch_meme: function (e) {
+      e.preventDefault()
+
+      console.log(this.top_text)
+
+      this.meme = process.env.VUE_APP_MEME_BOT_API + `/generate?top_text=${this.top_text}&bottom_text=${this.bottom_text}&image=${this.image}`
+    }
   }
 }
 </script>
diff --git a/frontend/src/components/RandomMeme.vue b/frontend/src/components/RandomMeme.vue
index 3260f64..6b0b344 100644
--- a/frontend/src/components/RandomMeme.vue
+++ b/frontend/src/components/RandomMeme.vue
@@ -3,27 +3,37 @@
 
    <div class="p-3 bg-white rounded shadow-sm">
       <h2>Náhodné meme </h2>
-     <div class="row"  @submit="fetch_meme">
-       <form class="col-md-6">
+     <div class="row">
+       <form class="col-md-6"  @submit="fetch_meme">
 
          <div class="form-group">
            <label for="type">Typ</label>
-           <select id="type" class="form-control">
-             <option v-for="type in types" v-bind:key="type.id">
+           <select id="type" class="form-control" v-model="type">
+             <option v-for="type in settings.types" v-bind:key="type.value" v-bind:value="type.value">
                {{ type.name }}
              </option>
            </select>
          </div>
 
          <div class="form-group">
-           <label for="cateogry">Kategorie</label>
-           <select id="cateogry" class="form-control">
-             <option selected>Choose...</option>
-             <option>...</option>
+           <label for="category">TĂ©ma</label>
+           <select id="category" class="form-control" v-model="topic">
+             <option v-for="type in settings.topics" v-bind:key="type.value" v-bind:value="type.value">
+               {{ type.name }}
+             </option>
+           </select>
+         </div>
+
+         <div class="form-group">
+           <label for="image">Podkladový obrázek </label>
+           <select id="image" class="form-control" v-model="image">
+             <option v-for="type in settings.images" v-bind:key="type.value" v-bind:value="type.value" >
+               {{ type.name }}
+             </option>
            </select>
          </div>
 
-         <button type="submit" class="btn btn-primary">Sign in</button>
+         <button type="submit" class="btn btn-primary">Zasmát se</button>
        </form>
 
        <div class="col-md-6">
@@ -32,7 +42,6 @@
      </div>
     </div>
 
-
 </div>
 
 </template>
@@ -40,17 +49,21 @@
 <script>
 
 import 'bootstrap';
+import meme_bot_api from "@/api/meme_bot_api";
 
 export default {
-  name: 'App',
+  name: 'RandomMeme',
   components: {
 
   },
   data: function () {
+
     return {
+      image: "",
+      topic: "",
+      type: "",
       meme: "logo.png",
-      types: [{name: "Jednořádkový", id: "single"}, {name: "Dvouřádkový", id: "twopart"}]
-      category: [{name: "Jednořádkový", id: "single"}, {name: "Dvouřádkový", id: "twopart"}]
+      settings: meme_bot_api,
     }
   },
 
@@ -58,10 +71,9 @@ export default {
     fetch_meme: function (e) {
       e.preventDefault()
 
+      console.log(this.topic)
 
-
-
-      this.meme = "http://apimeme.com/meme?meme=10-Guy&top=Top+text&bottom=Bottom+text"
+      this.meme = process.env.VUE_APP_MEME_BOT_API + `/random?type=${this.type}&topic=${this.topic}&image=${this.image}`
     }
   }
 }
diff --git a/frontend/src/sadf.js b/frontend/src/sadf.js
new file mode 100644
index 0000000..d1a61f6
--- /dev/null
+++ b/frontend/src/sadf.js
@@ -0,0 +1,999 @@
+10-Guy
+1950s-Middle-Finger
+1990s-First-World-Problems
+1st-World-Canadian-Problems
+2nd-Term-Obama
+Aaaaand-Its-Gone
+Ace-Primo
+Actual-Advice-Mallard
+Adalia-Rose
+Admiral-Ackbar-Relationship-Expert
+Advice-Dog
+Advice-Doge
+Advice-God
+Advice-Peeta
+Advice-Tam
+Advice-Yoda
+Afraid-To-Ask-Andy
+Afraid-To-Ask-Andy-Closeup
+Aint-Nobody-Got-Time-For-That
+Alan-Greenspan
+Alarm-Clock
+Albert-Cagestein
+Albert-Einstein-1
+Alien-Meeting-Suggestion
+Alright-Gentlemen-We-Need-A-New-Idea
+Always-Has-Been
+Alyssa-Silent-Hill
+Am-I-The-Only-One-Around-Here
+American-Chopper-Argument
+Ancient-Aliens
+And-everybody-loses-their-minds
+And-then-I-said-Obama
+Angry-Asian
+Angry-Baby
+Angry-Birds-Pig
+Angry-Bride
+Angry-Chef-Gordon-Ramsay
+Angry-Chicken-Boss
+Angry-Dumbledore
+Angry-Koala
+Angry-Rant-Randy
+Angry-Toddler
+Annoying-Childhood-Friend
+Annoying-Facebook-Girl
+Anri-Stares
+Anti-Joke-Chicken
+Apathetic-Xbox-Laser
+Archer
+Are-Your-Parents-Brother-And-Sister
+Are-you-a-Wizard
+Arrogant-Rich-Man
+Art-Attack
+Art-Student-Owl
+Arthur-Fist
+Asshole-Ref
+Aunt-Carol
+Austin-Powers-Honestly
+Aw-Yeah-Rage-Face
+Awkward-Moment-Sealion
+Awkward-Olympics
+BANE-AND-BRUCE
+BM-Employees
+Babushkas-On-Facebook
+Baby-Cry
+Baby-Godfather
+Baby-Insanity-Wolf
+Back-In-My-Day
+Bad-Advice-Cat
+Bad-Joke-Eel
+Bad-Luck-Bear
+Bad-Luck-Brian
+Bad-Luck-Hannah
+Bad-Pun-Anna-Kendrick
+Bad-Pun-Dog
+Bad-Wife-Worse-Mom
+Bah-Humbug
+Bane
+Bane-Permission
+Barack-And-Kumar-2013
+Barba
+Barbosa-And-Sparrow
+Barney-Stinson-Win
+Baromney
+Baron-Creater
+Bart-Simpson-Peeking
+Batman-And-Superman
+Batman-Slapping-Robin
+Batman-Smiles
+Batmobile
+Bazooka-Squirrel
+Be-Like-Bill
+Bear-Grylls
+Beard-Baby
+Bebo
+Because-Race-Car
+Ben-Barba-Pointing
+Bender
+Benito
+Bernie-I-Am-Once-Again-Asking-For-Your-Support
+Beyonce-Knowles-Superbowl
+Beyonce-Knowles-Superbowl-Face
+Beyonce-Superbowl-Yell
+Big-Bird
+Big-Bird-And-Mitt-Romney
+Big-Bird-And-Snuffy
+Big-Ego-Man
+Big-Family-Comeback
+Bike-Fall
+Bill-Murray-Golf
+Bill-Nye-The-Science-Guy
+Bill-OReilly
+Billy-Graham-Mitt-Romney
+Bitch-Please
+Black-Girl-Wat
+Blank-Blue-Background
+Blank-Colored-Background
+Blank-Comic-Panel-1x2
+Blank-Comic-Panel-2x1
+Blank-Comic-Panel-2x2
+Blank-Nut-Button
+Blank-Starter-Pack
+Blank-Transparent-Square
+Blank-Yellow-Sign
+Blob
+Blue-Futurama-Fry
+Boardroom-Meeting-Suggestion
+Bonobo-Lyfe
+Booty-Warrior
+Bothered-Bond
+Brace-Yourselves-X-is-Coming
+Brian-Burke-On-The-Phone
+Brian-Griffin
+Brian-Williams-Was-There
+Brian-Williams-Was-There-2
+Brian-Williams-Was-There-3
+Brian-Wilson-Vs-ZZ-Top
+Britney-Spears
+Bubba-And-Barack
+Buddy-Christ
+Buddy-The-Elf
+Buff-Doge-vs-Cheems
+Bullets
+Burn-Kitty
+Business-Cat
+But-Thats-None-Of-My-Business
+But-Thats-None-Of-My-Business-Neutral
+Butthurt-Dweller
+CASHWAG-Crew
+CURLEY
+Captain-Hindsight
+Captain-Phillips-Im-The-Captain-Now
+Captain-Picard-Facepalm
+Car-Salesman-Slaps-Hood
+Casper
+Castaway-Fire
+Ceiling-Cat
+Cel-Jesuno
+Cereal-Guy
+Cereal-Guy-Spitting
+Cereal-Guys-Daddy
+Chad-Johnson
+Chainsaw-Bear
+Challenge-Accepted-Rage-Face
+Change-My-Mind
+Charlie-Sheen-Derp
+Chavez
+Chef-Gordon-Ramsay
+Chemistry-Cat
+Chester-The-Cat
+Chicken-Bob
+Chief-Keef
+Chihuahua-dog
+Chill-Out-Lemur
+Chinese-Cat
+Chocolate-Spongebob
+Chubby-Bubbles-Girl
+Chuck-Norris
+Chuck-Norris-Approves
+Chuck-Norris-Finger
+Chuck-Norris-Flex
+Chuck-Norris-Guns
+Chuck-Norris-Laughing
+Chuck-Norris-Phone
+Chuck-Norris-With-Guns
+Chuckchuckchuck
+City-Bear
+Cleavage-Girl
+Clefable
+Close-Enough
+Clown-Applying-Makeup
+College-Freshman
+College-Liberal
+Comic-Book-Guy
+Computer-Guy
+Computer-Guy-Facepalm
+Computer-Horse
+Condescending-Goku
+Condescending-Wonka
+Confession-Bear
+Confused-Cam
+Confused-Gandalf
+Confused-Granddad
+Confused-Lebowski
+Confused-Mel-Gibson
+Conspiracy-Keanu
+Consuela
+Contradictory-Chris
+Cool-Cat-Stroll
+Cool-Obama
+Cool-Story-Bro
+Corona
+Costanza
+Coulson
+Courage-Wolf
+Crazy-Dawg
+Crazy-Girlfriend-Praying-Mantis
+Crazy-Hispanic-Man
+Creeper-Dog
+Creepy-Condescending-Wonka
+Criana
+Crosseyed-Goku
+Crying-Because-Of-Cute
+Cute-Cat
+Cute-Dog
+Cute-Puppies
+DJ-Pauly-D
+Dad-Joke-Dog
+Dafuq-Did-I-Just-Read
+Dallas-Cowboys
+Dancing-Trollmom
+Darth-Maul
+Darti-Boy
+Dat-Ass
+Dat-Boi
+Dating-Site-Murderer
+Dave-Chappelle
+Dead-Space
+Deadpool-Pick-Up-Lines
+Deadpool-Surprised
+Depressed-Cat
+Depression-Dog
+Derp
+Derpina
+Determined-Guy-Rage-Face
+Dexter
+Dick-Cheney
+Disappointed-Tyson
+Disaster-Girl
+Distracted-Boyfriend
+Do-I-Care-Doe
+Doge
+Doge-2
+Dolph-Ziggler-Sells
+Donald-Trump-sewing-his-name-into-the-American-Flag
+Dont-You-Squidward
+DoucheBag-DJ
+Doug
+Down-Syndrome
+Downcast-Dark-Souls
+Downvoting-Roman
+Dr-Crane
+Dr-Evil
+Dr-Evil-Laser
+Drake-Bad-Good
+Drake-Hotline-Bling
+Drunk-Baby
+Duck-Face
+Duck-Face-Chicks
+Dumb-Blonde
+Dwight-Schrute
+Dwight-Schrute-2
+ERMAHGERD-TWERLERT
+Edu-Camargo
+Edward-Elric-1
+Efrain-Juarez
+Eighties-Teen
+Eminem
+Empty-Red-And-Black
+Endel-Tulviste
+Engineering-Professor
+Epic-Handshake
+Epicurist-Kid
+Ermahgerd-Berks
+Ermahgerd-Beyonce
+Ermahgerd-IPHERN-3GM
+Error-404
+Evil-Baby
+Evil-Cows
+Evil-Kermit
+Evil-Otter
+Evil-Plotting-Raccoon
+Evil-Toddler
+Excited-Cat
+Excited-Minions
+Expanding-Brain
+Eye-Of-Sauron
+FFFFFFFUUUUUUUUUUUU
+FRANGO
+Fabulous-Frank-And-His-Snake
+Face-You-Make-Robert-Downey-Jr
+Facepalm-Bear
+Fake-Hurricane-Guy
+Family-Guy-Brian
+Family-Guy-Peter
+Family-Tech-Support-Guy
+Fast-Furious-Johnny-Tran
+Fat-Cat
+Fat-Val-Kilmer
+Father-Ted
+Fear-And-Loathing-Cat
+Feels-Bad-Frog---Feels-Bad-Man
+Felix-Baumgartner
+Felix-Baumgartner-Lulz
+Fernando-Litre
+Fifa-E-Call-Of-Duty
+Fim-De-Semana
+Finding-Neverland
+Fini
+Finn-The-Human
+First-Day-On-The-Internet-Kid
+First-World-Frat-Guy
+First-World-Problems
+First-World-Problems-Cat
+First-World-Stoner-Problems
+Fk-Yeah
+Flavor-Flav
+Foal-Of-Mine
+Folean-Dynamite
+Forever-Alone
+Forever-Alone-Christmas
+Forever-Alone-Happy
+Foul-Bachelor-Frog
+Foul-Bachelorette-Frog
+Friend-Zone-Fiona
+Frowning-Nun
+Frustrated-Boromir
+Frustrating-Mom
+Futurama-Fry
+Futurama-Leela
+Futurama-Zoidberg
+Gaga-Baby
+Gandhi
+Gangnam-Style
+Gangnam-Style-PSY
+Gangnam-Style2
+Gangster-Baby
+Gasp-Rage-Face
+George-Bush
+George-Washington
+Ghetto-Jesus
+Ghost-Nappa
+Giovanni-Vernia
+Give-me-Karma---Beating-the-dead-horse
+Gladys-Falcon
+God
+Gollum
+Good-Fellas-Hilarious
+Good-Guy-Greg
+Good-Guy-Pizza-Rolls
+Good-Guy-Putin
+Good-Guy-Socially-Awkward-Penguin
+Google-Chrome
+Gordo
+Got-Room-For-One-More
+Gotta-Go-Cat
+Grandma-Finds-The-Internet
+Green-Day
+Grumpy-Cat
+Grumpy-Cat-Bed
+Grumpy-Cat-Birthday
+Grumpy-Cat-Christmas
+Grumpy-Cat-Does-Not-Believe
+Grumpy-Cat-Halloween
+Grumpy-Cat-Happy
+Grumpy-Cat-Mistletoe
+Grumpy-Cat-Not-Amused
+Grumpy-Cat-Reverse
+Grumpy-Cat-Sky
+Grumpy-Cat-Star-Wars
+Grumpy-Cat-Table
+Grumpy-Cat-Top-Hat
+Grumpy-Cats-Father
+Grumpy-Toad
+Grus-Plan
+Guinness-World-Record
+Guy-Fawkes
+Guy-Holding-Cardboard-Sign
+Hal-Jordan
+Hamtaro
+Han-Solo
+Happy-Guy-Rage-Face
+Happy-Minaj
+Happy-Minaj-2
+Happy-Star-Congratulations
+Hard-To-Swallow-Pills
+Hardworking-Guy
+Harley-Quinn
+Harmless-Scout-Leader
+Harper-WEF
+Harry-Potter-Ok
+Hawkward
+He-Needs-The-Vaccine
+He-Will-Never-Get-A-Girlfriend
+Headbanzer
+Headless-Rider-DRRR
+Heavy-Breathing-Cat
+Hedonism-Bot
+Hello-Kassem
+Hello-Kitty
+Helpful-Tyler-Durden
+Henry-David-Thoreau
+Hercules-Hades
+Heres-Johnny
+Herm-Edwards
+Hey-Internet
+Hide-Yo-Kids-Hide-Yo-Wife
+Hide-the-Pain-Harold
+High-Dog
+High-Expectations-Asian-Father
+Hillary-Clinton
+Hillary-Clinton-Cellphone
+Hipster-Ariel
+Hipster-Barista
+Hipster-Kitty
+Hohoho
+Homophobic-Seal
+Hoody-Cat
+Hora-Extra
+Hornist-Hamster
+Horny-Harry
+Hot-Caleb
+Hot-Scale
+Hotline-Miami-Richard
+House-Bunny
+How-About-No-Bear
+How-Tough-Are-You
+Hypnotoad
+Hypocritical-Islam-Terrorist
+Hysterical-Tom
+I-Am-Not-A-Gator-Im-A-X
+I-Bet-Hes-Thinking-About-Other-Women
+I-Forsee
+I-Guarantee-It
+I-Have-No-Idea-What-I-Am-Doing
+I-Have-No-Idea-What-I-Am-Doing-Dog
+I-Know-Fuck-Me-Right
+I-Know-That-Feel-Bro
+I-Lied-2
+I-See-Dead-People
+I-Should-Buy-A-Boat-Cat
+I-Too-Like-To-Live-Dangerously
+I-Was-Told-There-Would-Be
+I-Will-Find-You-And-Kill-You
+Idiot-Nerd-Girl
+Idiotaco
+If-You-Know-What-I-Mean-Bean
+Ill-Have-You-Know-Spongebob
+Ill-Just-Wait-Here
+Im-Curious-Nappa
+Im-Fabulous-Adam
+Im-The-Captain-Now
+Imagination-Spongebob
+Impossibru-Guy-Original
+Inception
+Inhaling-Seagull
+Inigo-Montoya
+Innocent-Sasha
+Insanity-Puppy
+Insanity-Wolf
+Intelligent-Dog
+Internet-Explorer
+Internet-Guide
+Interupting-Kanye
+Invalid-Argument-Vader
+Is-This-A-Pigeon
+Islam-Rage---Angry-Muslim
+Its-Finally-Over
+Its-Not-Going-To-Happen
+Its-True-All-of-It-Han-Solo
+Jack-Nicholson-The-Shining-Snow
+Jack-Sparrow-Being-Chased
+Jackie-Chan-WTF
+Jammin-Baby
+Jay-Knows-Facts
+Jehovas-Witness-Squirrel
+Jerkoff-Javert
+Jersey-Santa
+Jessica-Nigri-Cosplay
+Jesus-Talking-To-Cool-Dude
+Jim-Lehrer-The-Man
+Joe-Biden
+John-Riley-Condescension
+Joker
+Joker-Rainbow-Hands
+Jon-Stewart-Skeptical
+Joo-Espontneo
+Joseph-Ducreux
+Justin-Bieber-Suit
+Karate-Kid
+Karate-Kyle
+Keep-Calm-And-Carry-On-Aqua
+Keep-Calm-And-Carry-On-Black
+Keep-Calm-And-Carry-On-Purple
+Keep-Calm-And-Carry-On-Red
+Kevin-Hart
+Kevin-Hart-The-Hell
+Kill-You-Cat
+Kill-Yourself-Guy
+Kim-Jong-Il-Y-U-No
+Kim-Jong-Un-Sad
+Koala
+Kobe
+Kool-Kid-Klan
+Krusty-Krab-Vs-Chum-Bucket
+Krusty-Krab-Vs-Chum-Bucket-Blank
+Kyon-Face-Palm
+LIGAF
+LOL-Guy
+Lame-Pun-Coon
+Larfleeze
+Larry-The-Cable-Guy
+Laughing-Goat
+Laughing-Leo
+Laughing-Men-In-Suits
+Laughing-Villains
+Laundry-Viking
+Lazy-College-Senior
+Left-Exit-12-Off-Ramp
+Legal-Bill-Murray
+Leonardo-Dicaprio-Cheers
+Leonardo-Dicaprio-Wolf-Of-Wall-Street
+Lethal-Weapon-Danny-Glover
+Lewandowski-E-Reus
+Liam-Neeson-Taken
+Liam-Neeson-Taken-2
+Life-Sucks
+Lil-Wayne
+Lion-King
+Little-Romney
+Look-At-All-These
+Look-At-Me
+Look-Son
+Luiz-Fabiano
+Macklemore-Thrift-Store
+Mad-Money-Jim-Cramer
+Mad-Moxxi
+Malicious-Advice-Mallard
+Mamimoe
+Manning-Broncos
+Mario-Hammer-Smash
+Marked-Safe-From
+Maroney-And-Obama-Not-Impressed
+Marvel-Civil-War
+Marvel-Civil-War-1
+Marvel-Civil-War-2
+Matanza
+Matrix-Morpheus
+Maury-Lie-Detector
+Mayu-Watanabe
+McKayla-Maroney-Not-Impressed
+McKayla-Maroney-Not-Impressed2
+McMelch
+Mega-Rage-Face
+Member-Berries
+Meme-Dad-Creature
+Memeo
+Men-In-Black
+Men-Laughing
+Merida-Brave
+Metal-Jesus
+Mexican-Pizza
+Michael-Jackson-Popcorn
+Michael-Phelps-Death-Stare
+Minegishi-Minami
+Minegishi-Minami2
+Minor-Mistake-Marvin
+Misunderstood-Mitch
+Mitch-McConnell
+Mocking-Spongebob
+Modern-Warfare-3
+Molly-Weasley
+Money-Man
+Money-Money
+Monkey-Business
+Monkey-OOH
+Monkey-Puppet
+Morgan-Freeman-Good-Luck
+Morpheus
+Morty
+Mother-Of-God
+Mozart-Not-Sure
+Mr-Black-Knows-Everything
+Mr-Krabs-Blur-Meme
+Mr-Mackey
+Mr-T
+Mr-T-Pity-The-Fool
+Mugatu-So-Hot-Right-Now
+Multi-Doge
+Murica
+Muschamp
+Musically-Oblivious-8th-Grader
+NPC
+Nabilah-Jkt48
+Nailed-It
+Nakagawa-Haruka
+Natsu
+Neil-deGrasse-Tyson
+Net-Noob
+Nice-Guy-Loki
+Nickleback
+Nicolas-Cage---You-dont-say
+Nilo
+Nissim-Ourfali
+No-Bullshit-Business-Baby
+No-I-Cant-Obama
+No-Nappa-Its-A-Trick
+No-Patrick
+Not-Bad-Obama
+Not-Okay-Rage-Face
+Not-a-Meme,-Just-Boobs
+Nuclear-Explosion
+OMG-Cat
+OMG-Karen
+Obama
+Obama-Cowboy-Hat
+Obama-No-Listen
+Obama-Romney-Pointing
+Obi-Wan-Kenobi
+Oblivious-Hot-Girl
+Officer-Cartman
+Oh-My-God-Orange
+Oh-No
+Okay-Guy-Rage-Face
+Okay-Guy-Rage-Face2
+Okay-Truck
+Oku-Manami
+Onde
+One-Does-Not-Simply
+Oprah-You-Get-A
+Oprah-You-Get-A-Car-Everybody-Gets-A-Car
+Optimistic-Niall
+Ordinary-Muslim-Man
+Original-Bad-Luck-Brian
+Original-I-Lied
+Original-Stoner-Dog
+Osabama
+Our-Glorious-Leader-Nicolas-Cage
+Over-Educated-Problems
+Overjoyed
+Overly-Attached-Father
+Overly-Attached-Girlfriend
+Overly-Attached-Nicolas-Cage
+Overly-Manly-Man
+Overly-Suave-IT-Guy
+PPAP
+PTSD-Clarinet-Boy
+Packers
+Panik-Kalm-Panik
+Papa-Fking-John
+Paranoid-Parrot
+Pat-Quinn
+Pathetic-Spidey
+Patrick-Bateman
+Patrick-Henry
+Patrick-Says
+Patriotic-Eagle
+Paul-Ryan
+Paul-Wonder-Years
+Pedobear
+Pedophile-Orochimaru
+Pelosi
+Penguin-Gang
+Pentagon-Hexagon-Octagon
+Pepperidge-Farm-Remembers
+Perfection-Michael-Fassbender
+Permission-Bane
+Persian-Cat-Room-Guardian
+Persian-Cat-Room-Guardian-Single
+Perturbed-Portman
+Peter-Griffin-News
+Peter-Parker-Cry
+Philosoraptor
+Photogenic-College-Football-Player
+Photogenic-Scene-Guy
+Picard-Wtf
+Pickle-Rick
+Pickup-Line-Panda
+Pickup-Master
+Pickup-Professor
+Pillow-Pet
+Pink-Escalade
+Pinky-and-the-Brain
+Pissed-Off-Obama
+Police-Officer-Testifying
+Pony-Shrugs
+Pope-Nicolas-Cage
+Portuguese
+Pothead-Fry
+Predator
+Premature-Pete
+Presidential-Alert
+Priority-Peter
+Professor-Oak
+Proper-Lady
+Psy-Horse-Dance
+Put-It-Somewhere-Else-Patrick
+Putin
+Question-Rage-Face
+Questionable-Strategy-Kobe
+Quit-Hatin
+RPG-Fan
+Rarity
+Rasta-Science-Teacher
+Really-Evil-College-Teacher
+Rebecca-Black
+Redditors-Wife
+Rediculously-Well-Mannered-Athlete
+Redneck-Randal
+Reimu-Hakurei
+Relaxed-Office-Guy
+Religious-Couple
+Rena-Matsui
+Rich-Guy-Dont-Care
+Rich-Raven
+Richard-Benson
+Rick
+Rick-Grimes
+Rick-and-Carl
+Rick-and-Carl-3
+Rick-and-Carl-Long
+Rick-and-Carl-Longer
+Ridiculously-Photogenic-Guy
+Ridiculously-Photogenic-Judge
+Right-In-The-Childhood
+Rmoney-Again
+Rob-In-The-Hood
+Robots
+Rocket-Raccoon
+Rodgers-Doublecheck
+Roll-Safe-Think-About-It
+Romney
+Romney-And-Ryan
+Romney-Bong
+Romneys-Hindenberg
+Ron-Burgundy
+Ron-Swanson
+Running-Away-Balloon
+Ryan-Gosling
+Sad-Axl
+Sad-Baby
+Sad-Cat
+Sad-Keanu
+Sad-Pablo-Escobar
+Sad-Spiderman
+Sad-X-All-The-Y
+Sadly-I-Am-Only-An-Eel
+Samuel-Jackson-Glance
+Samuel-L-Jackson
+Sarcastic-Anthony
+Sassy-Iguana
+Satisfied-Seal
+Saw-Fulla
+Say-That-Again-I-Dare-You
+Scared-Cat
+Scary-Harry
+Scene-Wolf
+Scooby-Doo
+Scott-Howson
+Scrooge-McDuck
+Scrooge-McDuck-2
+Scumbag-Boss
+Scumbag-Brain
+Scumbag-Daylight-Savings-Time
+Scumbag-Girl
+Scumbag-Job-Market
+Scumbag-MSNBC
+Scumbag-Minecraft
+Scumbag-Miraak
+Scumbag-Muslim
+Scumbag-Parents
+Scumbag-Redditor
+Scumbag-Steve
+Secure-Parking
+See-Nobody-Cares
+Self-Loathing-Otter
+Selfish-Ozzy
+Sergeant-Hartmann
+Serious-Xzibit
+Seriously-Face
+Sexual-Deviant-Walrus
+Sexually-Oblivious-Girlfriend
+Sexually-Oblivious-Rhino
+Sexy-Railroad-Spiderman
+Shaq-Only-Smokes-The-Dankest
+Sheltering-Suburban-Mom
+Shocked-Ape
+Short-Satisfaction-VS-Truth
+Shouter
+Shrek-Cat
+Shut-Up-And-Take-My-Money-Fry
+Shutup-Batty-Boy
+Sidious-Error
+Sigmund-Freud
+Simba-Shadowy-Place
+Simpsons-Grandpa
+Simsimi
+Since-When-Were-You-Under-The-Impression
+Sinestro
+Skeptical-Baby
+Skeptical-Swardson
+Skinhead-John-Travolta
+Skype
+Sleeping-Shaq
+Slenderman
+Slick-Fry
+Slowpoke
+Small-Dog
+Small-Face-Romney
+Smilin-Biden
+Smiling-Cat
+Smiling-Jesus
+Smirk-Rage-Face
+Smug-Bear
+Snape
+Snoop
+So-God-Made-A-Farmer
+So-I-Got-That-Goin-For-Me-Which-Is-Nice
+So-I-Got-That-Goin-For-Me-Which-Is-Nice-2
+So-I-Guess-You-Can-Say-Things-Are-Getting-Pretty-Serious
+So-Many-Shirts
+So-Much-Drama
+Socially-Awesome-Awkward-Penguin
+Socially-Awesome-Penguin
+Socially-Awkward-Awesome-Penguin
+Socially-Awkward-Couple
+Socially-Awkward-Penguin
+Solemn-Lumberjack
+SonTung
+Sotally-Tober
+South-Park-Craig
+Spacey-Casey
+Spangles
+Sparta-Leonidas
+Speechless-Colbert-Face
+Spiderman-Camera
+Spiderman-Computer-Desk
+Spiderman-Hospital
+Spiderman-Laugh
+Spiderman-Peter-Parker
+Sponegebob-Coffee
+Spongebob-Ight-Imma-Head-Out
+Spongegar
+Squidward
+Star-Wars-No
+Star-Wars-Yoda
+Stephen-Harper-Podium
+Steve-Harvey
+Steve-Jobs
+Stoner-Dog
+Stoner-PhD
+Stop-Cop
+Storytelling-Grandpa
+Subtle-Pickup-Liner
+Success-Kid
+Success-Kid-Girl
+Success-Kid-Original
+Successful-Black-Man
+Sudden-Clarity-Clarence
+Sudden-Disgust-Danny
+Super-Birthday-Squirrel
+Super-Cool-Ski-Instructor
+Super-Kami-Guru-Allows-This
+Superior-Wadsworth
+Surpised-Frodo
+Surprised-CatMan
+Surprised-Coala
+Surprised-Koala
+Surprised-Pikachu
+Surprized-Vegeta
+Suspicious-Cat
+Sweaty-Concentrated-Rage-Face
+TED
+TSA-Douche
+Table-Flip-Guy
+Take-A-Seat-Cat
+Talk-To-Spongebob
+Tamou
+Team-Rocket
+Tears-Of-Joy
+Tech-Impaired-Duck
+Tennis-Defeat
+Terry-Davis
+That-Would-Be-Great
+Thats-Just-Something-X-Say
+Thats-a-paddlin
+The-Bobs
+The-Critic
+The-Most-Interesting-Cat-In-The-World
+The-Most-Interesting-Justin-Bieber
+The-Most-Interesting-Man-In-The-World
+The-Probelm-Is
+The-Problem-Is
+The-Rock-Driving
+The-Rock-It-Doesnt-Matter
+The-Scroll-Of-Truth
+These-Arent-The-Droids-You-Were-Looking-For
+Theyre-The-Same-Picture
+Think
+Third-World-Skeptical-Kid
+Third-World-Success-Kid
+This-Is-Fine
+This-Is-Where-Id-Put-My-Trophy-If-I-Had-One
+Thumbs-Up-Emoji
+Time-To-Fap
+Today-Was-A-Good-Day
+Tom-Hardy-
+Tomas-Rosicky
+Too-Damn-High
+Too-Drunk-At-Party-Tina
+Too-Kool-Kyle
+Torreshit
+Tough-Guy-Wanna-Be
+Trailer-Park-Boys-Bubbles
+Travelonshark
+Troll-Face
+Troll-Face-Colored
+True-Story
+Trump-Bill-Signing
+Turkey
+Tuxedo-Winnie-The-Pooh
+Two-Buttons
+UNO-Draw-25-Cards
+USA-Lifter
+Ugly-Twins
+Uncle-Sam
+Unhappy-Baby
+Unhelpful-High-School-Teacher
+Unicorn-MAN
+Unpopular-Opinion-Puffin
+Unsettled-Tom
+Unwanted-House-Guest
+V-For-Vendetta
+Vali-Corleone
+Vengeance-Dad
+Viking-Dudes
+Vladimir-Putin
+WTF
+Waiting-Skeleton
+Warning-Sign
+We-Will-Rebuild
+Weird-Stuff-I-Do-Potoo
+Welcome-To-The-Internets
+Well-That-Escalated-Quickly
+What-Do-We-Want
+What-Do-We-Want-3
+What-Year-Is-It
+Whisper-Sloth
+Who-Killed-Hannibal
+Why-Cant-I
+Why-Cant-I-Hold-All-These-Limes
+Why-Is-The-Rum-Gone
+Why-Not-Both
+Will-Ferrell
+Wink
+Woah-Kitty
+Woman-Yelling-At-Cat
+Wrong-Neighboorhood-Cats
+Wrong-Number-Rita
+X,-X-Everywhere
+X-All-The-Y
+X-Everywhere
+X-X-Everywhere
+Y-U-No
+Yakuza
+Yall-Got-Any-More-Of
+Yall-Got-Any-More-Of-That
+Yao-Ming
+Yo-Dawg-Heard-You
+Yo-Mamas-So-Fat
+You-Dont-Say
+You-Dont-Want-No-Part-Of-This
+You-Get-An-X-And-You-Get-An-X
+You-Should-Feel-Bad-Zoidberg
+You-The-Real-MVP
+You-The-Real-MVP-2
+You-Underestimate-My-Power
+You-Were-The-Chosen-One-Star-Wars
+Young-And-Reckless
+Young-Cardi-B
+Youre-Too-Slow-Sonic
+Yuko-With-Gun
+ZNMD
+Zoidberg-Jesus
+Zombie-Bad-Luck-Brian
+Zombie-Overly-Attached-Girlfriend
+Zorg
+Zuckerberg
+Zura-Janai-Katsura-Da
+confession-kid
\ No newline at end of file
diff --git a/readme.MD b/readme.MD
new file mode 100644
index 0000000..762ebf8
--- /dev/null
+++ b/readme.MD
@@ -0,0 +1 @@
+MemeBot propojuje dvě API a to konkrétně API pro generování MEME a API genrování náhodných vtipů. Tj. snaží se vygenerovat náhodné meme text + obrázek z různých zdrojů.\n\nPoužité API:\n- [API pro generování meme](http://swagger.io/irc/) - API vrací JPEG obrázek \n- [API pro genrování náhodných vtipů](http://swagger.io/irc/) - API vrací JSON onbjekt s vtipem 
diff --git a/swagger.json b/swagger.json
new file mode 100644
index 0000000..52b2088
--- /dev/null
+++ b/swagger.json
@@ -0,0 +1,96 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "description": " MemeBot propojuje dvě API a to konkrétně API pro generování MEME a API genrování náhodných vtipů. Tj. snaží se vygenerovat náhodné meme text + obrázek z různých zdrojů.\n\nPoužité API:\n- [API pro generování meme](http://swagger.io/irc/) - API vrací JPEG obrázek \n- [API pro genrování náhodných vtipů](http://swagger.io/irc/) - API vrací JSON onbjekt s vtipem ",
+    "version": "1.0.0",
+    "title": "Meme Bot",
+    "contact": {
+      "email": "veselj57@fel.cvut.cz"
+    }
+  },
+  "host": "petstore.swagger.io",
+  "basePath": "/",
+  "schemes": [
+    "http"
+  ],
+  "paths": {
+    "/random": {
+      "get": {
+        "summary": "Vrátí náhodné meme ve formátu JPEG podle zadaných atributů",
+        "produces": [
+          "image/jpeg"
+        ],
+        "parameters": [
+          {
+            "in": "query",
+            "name": "type",
+            "type": "string",
+            "description": "Typ meme specifikovananĂ˝ jokapi: TWOPART, SINGLE",
+            "required": true
+          },
+          {
+            "in": "query",
+            "name": "topic",
+            "type": "string",
+            "description": "Topic meme specifikovananĂ˝ jokapi: Programming, Miscellaneous, Dark, Pun, Spooky, Christmas, Any",
+            "required": true
+          },
+          {
+            "in": "query",
+            "name": "image",
+            "type": "string",
+            "description": "Podkladový obrázek specifikovananý apimeme: Advice-Dog, ... ",
+            "required": true
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Náhodně vtgenerovaný obrázek"
+          },
+          "402": {
+            "description": "Validace parametrĹŻ"
+          }
+        }
+      }
+    },
+    "/generate": {
+      "get": {
+        "summary": "Wrapper nad api meme, který vygeneruje meme na základě obrázku, horního a dolního textu",
+        "produces": [
+          "image/jpeg"
+        ],
+        "parameters": [
+          {
+            "in": "query",
+            "name": "top_text",
+            "type": "string",
+            "description": "Text na horní řádek meme",
+            "required": true
+          },
+          {
+            "in": "query",
+            "name": "bottom_text",
+            "type": "string",
+            "description": "Text na spodní řádek meme",
+            "required": true
+          },
+          {
+            "in": "query",
+            "name": "image",
+            "type": "string",
+            "description": "Podkladový obrázek specifikovananý apimeme: Advice-Dog, ... ",
+            "required": true
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Vygenerované meme na základě vstupních parametrů"
+          },
+          "402": {
+            "description": "Validace parametrĹŻ"
+          }
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
-- 
GitLab