diff --git a/api.iml b/api.iml
index 4e66be83a96f1bb2028a789435f63a236ffaf9c8..357b9e22c27b6ffa2353f128c96c24ab3f4ce9ce 100644
--- a/api.iml
+++ b/api.iml
@@ -4,25 +4,34 @@
     <facet type="Spring" name="Spring">
       <configuration />
     </facet>
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/kotlin" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
     <facet type="kotlin-language" name="Kotlin">
-      <configuration version="2" platform="JVM 1.8" useProjectSettings="false">
+      <configuration version="3" platform="JVM 1.8" useProjectSettings="false">
         <compilerSettings />
         <compilerArguments>
           <option name="jvmTarget" value="1.8" />
           <option name="languageVersion" value="1.1" />
           <option name="apiVersion" value="1.1" />
-          <option name="pluginClasspaths">
-            <array>
-              <option value="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-maven-allopen/1.1.2/kotlin-maven-allopen-1.1.2.jar" />
-            </array>
-          </option>
-          <option name="coroutinesWarn" value="true" />
           <option name="pluginOptions">
             <array>
               <option value="plugin:org.jetbrains.kotlin.allopen:annotation=org.springframework.stereotype.Component" />
               <option value="plugin:org.jetbrains.kotlin.allopen:annotation=org.springframework.transaction.annotation.Transactional" />
               <option value="plugin:org.jetbrains.kotlin.allopen:annotation=org.springframework.scheduling.annotation.Async" />
               <option value="plugin:org.jetbrains.kotlin.allopen:annotation=org.springframework.cache.annotation.Cacheable" />
+              <option value="plugin:org.jetbrains.kotlin.allopen:annotation=org.springframework.boot.test.context.SpringBootTest" />
+            </array>
+          </option>
+          <option name="pluginClasspaths">
+            <array>
+              <option value="$KOTLIN_BUNDLED$/lib/allopen-compiler-plugin.jar" />
             </array>
           </option>
         </compilerArguments>
@@ -47,80 +56,99 @@
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.0.0.BUILD-SNAPSHOT" level="project" />
     <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
     <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.10.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.10.0" level="project" />
     <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:log4j-over-slf4j:1.7.25" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.18" level="project" />
+    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.19" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.8.10" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.8.13" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-jdbc:8.5.14" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-juli:8.5.14" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.hibernate:hibernate-core:5.2.10.Final" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:2.7.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate:hibernate-core:5.2.13.Final" level="project" />
     <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.1.Final" level="project" />
     <orderEntry type="library" name="Maven: org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.javassist:javassist:3.21.0-GA" level="project" />
+    <orderEntry type="library" name="Maven: org.javassist:javassist:3.22.0-GA" level="project" />
     <orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
     <orderEntry type="library" name="Maven: org.jboss:jandex:2.0.3.Final" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.3.3" level="project" />
     <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
     <orderEntry type="library" name="Maven: org.hibernate.common:hibernate-commons-annotations:5.0.1.Final" level="project" />
     <orderEntry type="library" name="Maven: javax.transaction:javax.transaction-api:1.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:2.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-orm:5.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aspects:5.0.0.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:2.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-orm:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aspects:5.0.4.BUILD-SNAPSHOT" level="project" />
     <orderEntry type="library" name="Maven: org.mindrot:jbcrypt:0.4" level="project" />
     <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.7.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.0.pr3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.0.pr3" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.4" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.0.0.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.0.0.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.4" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:8.5.14" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:8.5.14" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:8.5.14" level="project" />
-    <orderEntry type="library" name="Maven: org.hibernate:hibernate-validator:5.4.1.Final" level="project" />
-    <orderEntry type="library" name="Maven: javax.validation:validation-api:1.1.0.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.0.0.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:8.5.28" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:8.5.28" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:8.5.28" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.0.4.BUILD-SNAPSHOT" level="project" />
     <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-jre8:1.1.2" level="project" />
     <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-jre7:1.1.2" level="project" />
     <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-reflect:1.1.2" level="project" />
     <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.1.2" level="project" />
     <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-kotlin:2.8.7" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0.pr3" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.0.0.BUILD-SNAPSHOT" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.0.0.BUILD-SNAPSHOT" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.2.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.2.1" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.1" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.6.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:2.7.22" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.6.12" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.6.11" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.5" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.9.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:2.15.0" level="project" />
+    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.7.10" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.7.10" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.0.0.BUILD-SNAPSHOT" level="project" />
-    <orderEntry type="library" name="Maven: com.h2database:h2:1.4.195" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.0.4.BUILD-SNAPSHOT" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.postgresql:postgresql:9.4-1206-jdbc42" level="project" />
     <orderEntry type="library" name="Maven: com.netflix.feign:feign-core:8.18.0" level="project" />
     <orderEntry type="library" scope="RUNTIME" name="Maven: org.jvnet:animal-sniffer-annotation:1.0" level="project" />
     <orderEntry type="library" name="Maven: com.netflix.feign:feign-gson:8.18.0" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: com.google.code.gson:gson:2.8.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.google.code.gson:gson:2.8.2" level="project" />
     <orderEntry type="library" name="Maven: com.github.slugify:slugify:2.1.9" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.13" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.13" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: org.reflections:reflections:0.9.11" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:18.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.3.4" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.1.0.Final" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 809a339895fa9c5c69b894c6f51ab43bb7f6decf..fa711de7604b155ec6bb6575c9a0870e928a2135 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,13 +3,13 @@
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 
-	<groupId>io.realworld</groupId>
+	<groupId>mobildata</groupId>
 	<artifactId>api</artifactId>
 	<version>0.0.1-SNAPSHOT</version>
 	<packaging>jar</packaging>
 
-	<name>api</name>
-	<description>Demo for realworld.io with Kotlin and Spring Boot Reactive</description>
+	<name>mobil-data-server</name>
+	<description>Server for collecting, storing, interpreting and visualizing mobile data</description>
 
 	<parent>
 		<groupId>org.springframework.boot</groupId>
@@ -66,8 +66,9 @@
 			<scope>test</scope>
 		</dependency>
 		<dependency>
-			<groupId>com.h2database</groupId>
-			<artifactId>h2</artifactId>
+			<groupId>org.postgresql</groupId>
+			<artifactId>postgresql</artifactId>
+			<version>9.4-1206-jdbc42</version>
 		</dependency>
 		<dependency>
 			<groupId>com.netflix.feign</groupId>
@@ -84,6 +85,11 @@
             <artifactId>slugify</artifactId>
             <version>2.1.9</version>
         </dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger2</artifactId>
+			<version>2.7.0</version>
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/src/main/kotlin/io/realworld/client/response/InLogin.kt b/src/main/kotlin/io/realworld/client/response/InLogin.kt
deleted file mode 100644
index ef0a8b27e1d1dda758408ee70a31e6a317ee1910..0000000000000000000000000000000000000000
--- a/src/main/kotlin/io/realworld/client/response/InLogin.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package io.realworld.client.response
-
-import io.realworld.model.inout.Login
-
-data class InLogin(val user: Login)
diff --git a/src/main/kotlin/io/realworld/client/response/InRegister.kt b/src/main/kotlin/io/realworld/client/response/InRegister.kt
deleted file mode 100644
index 87ec4e7fe0ba78ce9ca3da5316cfcca5d18f7489..0000000000000000000000000000000000000000
--- a/src/main/kotlin/io/realworld/client/response/InRegister.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package io.realworld.client.response
-
-import io.realworld.model.inout.Register
-
-data class InRegister(val user: Register)
diff --git a/src/main/kotlin/io/realworld/client/response/OutProfile.kt b/src/main/kotlin/io/realworld/client/response/OutProfile.kt
deleted file mode 100644
index 52255bff86830e04e528059646c49d0feb343ec4..0000000000000000000000000000000000000000
--- a/src/main/kotlin/io/realworld/client/response/OutProfile.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package io.realworld.client.response
-
-import io.realworld.model.inout.Profile
-
-data class OutProfile(var profile: Profile? = null)
diff --git a/src/main/kotlin/io/realworld/client/response/OutUser.kt b/src/main/kotlin/io/realworld/client/response/OutUser.kt
deleted file mode 100644
index dc5ad89637ad537dd31b16332e3c745937f6c5d8..0000000000000000000000000000000000000000
--- a/src/main/kotlin/io/realworld/client/response/OutUser.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package io.realworld.client.response
-
-import io.realworld.model.User
-
-data class OutUser(var user: User = User())
diff --git a/src/main/kotlin/io/realworld/web/TagHandler.kt b/src/main/kotlin/io/realworld/web/TagHandler.kt
deleted file mode 100644
index 467297423f468373378867993a822d36de3d527e..0000000000000000000000000000000000000000
--- a/src/main/kotlin/io/realworld/web/TagHandler.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package io.realworld.web
-
-import io.realworld.model.Tag
-import io.realworld.repository.TagRepository
-import org.springframework.web.bind.annotation.GetMapping
-import org.springframework.web.bind.annotation.RestController
-
-@RestController
-class TagHandler(val repository: TagRepository) {
-    @GetMapping("/api/tags")
-    fun allTags() = mapOf("tags" to repository.findAll().map(Tag::name))
-}
\ No newline at end of file
diff --git a/src/main/kotlin/io/realworld/ApiApplication.kt b/src/main/kotlin/mobildata/ApiApplication.kt
similarity index 62%
rename from src/main/kotlin/io/realworld/ApiApplication.kt
rename to src/main/kotlin/mobildata/ApiApplication.kt
index 65494310884adcb95670450b359c4e761fe038ac..0d79b0666e3cd0ff48a0e5ae40ff1c486376242c 100644
--- a/src/main/kotlin/io/realworld/ApiApplication.kt
+++ b/src/main/kotlin/mobildata/ApiApplication.kt
@@ -1,6 +1,6 @@
-package io.realworld
+package mobildata
 
-import io.realworld.jwt.ExposeResponseInterceptor
+import mobildata.jwt.ExposeResponseInterceptor
 import org.springframework.boot.SpringApplication
 import org.springframework.boot.autoconfigure.SpringBootApplication
 import org.springframework.cache.annotation.EnableCaching
@@ -8,15 +8,13 @@ import org.springframework.context.annotation.Bean
 import org.springframework.context.annotation.Configuration
 import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean
 import org.springframework.validation.beanvalidation.MethodValidationPostProcessor
-import org.springframework.web.servlet.config.annotation.CorsRegistry
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
+import org.springframework.web.servlet.config.annotation.*
 
 
 @Configuration
 @EnableCaching
 @SpringBootApplication
-class ApiApplication : WebMvcConfigurerAdapter() {
+class ApiApplication : WebMvcConfigurer {
 
     override fun addInterceptors(registry: InterceptorRegistry?) {
         registry!!.addInterceptor(exposeResponseInterceptor())
@@ -32,6 +30,16 @@ class ApiApplication : WebMvcConfigurerAdapter() {
         super.addCorsMappings(registry)
     }
 
+    override fun addViewControllers(registry: ViewControllerRegistry) {
+        registry.addRedirectViewController("/documentation/v2/api-docs", "/v2/api-docs")
+        registry.addRedirectViewController("/documentation/configuration/ui", "/configuration/ui")
+        registry.addRedirectViewController("/documentation/configuration/security", "/configuration/security")
+        registry.addRedirectViewController("/documentation/swagger-resources", "/swagger-resources")
+        // no swagger-ui used
+        //registry.addRedirectViewController("/documentation", "/api/swagger-ui.html")
+        //registry.addRedirectViewController("/documentation/", "/api/swagger-ui.html")
+    }
+
     @Bean
     fun exposeResponseInterceptor() = ExposeResponseInterceptor()
 
diff --git a/src/main/kotlin/io/realworld/client/ProfileClient.kt b/src/main/kotlin/mobildata/client/ProfileClient.kt
similarity index 89%
rename from src/main/kotlin/io/realworld/client/ProfileClient.kt
rename to src/main/kotlin/mobildata/client/ProfileClient.kt
index f1f321c0014ea30126aea00b09bcd1e9535f817b..b389d68f6442cf20b748ccf97e2acc05d3ad7579 100644
--- a/src/main/kotlin/io/realworld/client/ProfileClient.kt
+++ b/src/main/kotlin/mobildata/client/ProfileClient.kt
@@ -1,9 +1,9 @@
-package io.realworld.client
+package mobildata.client
 
 import feign.Headers
 import feign.Param
 import feign.RequestLine
-import io.realworld.client.response.OutProfile
+import mobildata.client.response.OutProfile
 
 @Headers("Content-Type: application/json",
         "Authorization: Token {token}")
diff --git a/src/main/kotlin/io/realworld/client/TagClient.kt b/src/main/kotlin/mobildata/client/TagClient.kt
similarity index 71%
rename from src/main/kotlin/io/realworld/client/TagClient.kt
rename to src/main/kotlin/mobildata/client/TagClient.kt
index 3e7de69f4a8200753b69e74b1e70d2990c5fb013..c87fded4cd740b5df5de07dc5e03ea0cdec4a7d2 100644
--- a/src/main/kotlin/io/realworld/client/TagClient.kt
+++ b/src/main/kotlin/mobildata/client/TagClient.kt
@@ -1,8 +1,8 @@
-package io.realworld.client
+package mobildata.client
 
 import feign.Headers
 import feign.RequestLine
-import io.realworld.client.response.OutTag
+import mobildata.client.response.OutTag
 
 interface TagClient {
     @RequestLine("GET /api/tags")
diff --git a/src/main/kotlin/io/realworld/client/UserClient.kt b/src/main/kotlin/mobildata/client/UserClient.kt
similarity index 63%
rename from src/main/kotlin/io/realworld/client/UserClient.kt
rename to src/main/kotlin/mobildata/client/UserClient.kt
index f741aebf3b4f40f9285f44e760bd2169b1d2ad45..dd2077aa5215a619040ae8907a75e6ecb2d6339e 100644
--- a/src/main/kotlin/io/realworld/client/UserClient.kt
+++ b/src/main/kotlin/mobildata/client/UserClient.kt
@@ -1,10 +1,10 @@
-package io.realworld.client
+package mobildata.client
 
 import feign.Headers
 import feign.RequestLine
-import io.realworld.client.response.InLogin
-import io.realworld.client.response.InRegister
-import io.realworld.client.response.OutUser
+import mobildata.client.response.InLogin
+import mobildata.client.response.InRegister
+import mobildata.client.response.OutUser
 
 @Headers("Content-Type: application/json")
 interface UserClient {
diff --git a/src/main/kotlin/mobildata/client/response/InLogin.kt b/src/main/kotlin/mobildata/client/response/InLogin.kt
new file mode 100644
index 0000000000000000000000000000000000000000..961a33d09632c4b3a246cffd458561eadbe00bbe
--- /dev/null
+++ b/src/main/kotlin/mobildata/client/response/InLogin.kt
@@ -0,0 +1,5 @@
+package mobildata.client.response
+
+import mobildata.model.inout.Login
+
+data class InLogin(val user: Login)
diff --git a/src/main/kotlin/mobildata/client/response/InRegister.kt b/src/main/kotlin/mobildata/client/response/InRegister.kt
new file mode 100644
index 0000000000000000000000000000000000000000..4d49fd68c78d4278eeb797f041719287432f680a
--- /dev/null
+++ b/src/main/kotlin/mobildata/client/response/InRegister.kt
@@ -0,0 +1,5 @@
+package mobildata.client.response
+
+import mobildata.model.inout.Register
+
+data class InRegister(val user: Register)
diff --git a/src/main/kotlin/mobildata/client/response/OutProfile.kt b/src/main/kotlin/mobildata/client/response/OutProfile.kt
new file mode 100644
index 0000000000000000000000000000000000000000..a2e4e149c688e9a91ac694d3851f3e52b153c9a2
--- /dev/null
+++ b/src/main/kotlin/mobildata/client/response/OutProfile.kt
@@ -0,0 +1,5 @@
+package mobildata.client.response
+
+import mobildata.model.inout.Profile
+
+data class OutProfile(var profile: Profile? = null)
diff --git a/src/main/kotlin/io/realworld/client/response/OutTag.kt b/src/main/kotlin/mobildata/client/response/OutTag.kt
similarity index 59%
rename from src/main/kotlin/io/realworld/client/response/OutTag.kt
rename to src/main/kotlin/mobildata/client/response/OutTag.kt
index 857f4b05b07948b2ba755234b3445eb816975f79..0c42ec895e294768fbff97841ec952cfa5c56fbd 100644
--- a/src/main/kotlin/io/realworld/client/response/OutTag.kt
+++ b/src/main/kotlin/mobildata/client/response/OutTag.kt
@@ -1,3 +1,3 @@
-package io.realworld.client.response
+package mobildata.client.response
 
 data class OutTag(var tags: List<String> = listOf())
diff --git a/src/main/kotlin/mobildata/client/response/OutUser.kt b/src/main/kotlin/mobildata/client/response/OutUser.kt
new file mode 100644
index 0000000000000000000000000000000000000000..e7fc1e0d8fde3cd02299605b10d8066010e0685a
--- /dev/null
+++ b/src/main/kotlin/mobildata/client/response/OutUser.kt
@@ -0,0 +1,5 @@
+package mobildata.client.response
+
+import mobildata.model.User
+
+data class OutUser(var user: User = User())
diff --git a/src/main/kotlin/io/realworld/exception/ForbiddenRequestException.kt b/src/main/kotlin/mobildata/exception/ForbiddenRequestException.kt
similarity index 86%
rename from src/main/kotlin/io/realworld/exception/ForbiddenRequestException.kt
rename to src/main/kotlin/mobildata/exception/ForbiddenRequestException.kt
index 0dd568192b7fe0502bd415595c1c972d0d53b2f9..ed7e9b5e637c09dfb9856d6e413518471d7db157 100644
--- a/src/main/kotlin/io/realworld/exception/ForbiddenRequestException.kt
+++ b/src/main/kotlin/mobildata/exception/ForbiddenRequestException.kt
@@ -1,4 +1,4 @@
-package io.realworld.exception
+package mobildata.exception
 
 import org.springframework.http.HttpStatus
 import org.springframework.web.bind.annotation.ResponseStatus
diff --git a/src/main/kotlin/io/realworld/exception/InvalidException.kt b/src/main/kotlin/mobildata/exception/InvalidException.kt
similarity index 89%
rename from src/main/kotlin/io/realworld/exception/InvalidException.kt
rename to src/main/kotlin/mobildata/exception/InvalidException.kt
index d8d6339a2a9a9e5657a45df61852c7f0d232f5f4..361c772c74b6505de0586d5f83e15f5214323e93 100644
--- a/src/main/kotlin/io/realworld/exception/InvalidException.kt
+++ b/src/main/kotlin/mobildata/exception/InvalidException.kt
@@ -1,4 +1,4 @@
-package io.realworld.exception
+package mobildata.exception
 
 import org.springframework.validation.Errors
 
diff --git a/src/main/kotlin/io/realworld/exception/InvalidLoginException.kt b/src/main/kotlin/mobildata/exception/InvalidLoginException.kt
similarity index 73%
rename from src/main/kotlin/io/realworld/exception/InvalidLoginException.kt
rename to src/main/kotlin/mobildata/exception/InvalidLoginException.kt
index 5dcbf9a5284cfc7bd4d9b566489dd6b6b5162c94..99de4911fb5705f452880bf6f67484dec626cd45 100644
--- a/src/main/kotlin/io/realworld/exception/InvalidLoginException.kt
+++ b/src/main/kotlin/mobildata/exception/InvalidLoginException.kt
@@ -1,3 +1,3 @@
-package io.realworld.exception
+package mobildata.exception
 
 class InvalidLoginException(val field: String, val error: String) : RuntimeException()
diff --git a/src/main/kotlin/io/realworld/exception/NotFoundException.kt b/src/main/kotlin/mobildata/exception/NotFoundException.kt
similarity index 85%
rename from src/main/kotlin/io/realworld/exception/NotFoundException.kt
rename to src/main/kotlin/mobildata/exception/NotFoundException.kt
index 27c2508d5902357ccfa8eeb0c4c1d4c35b6c23a5..04a278b17b92d5da33dce8c0bf7e922a1d64c789 100644
--- a/src/main/kotlin/io/realworld/exception/NotFoundException.kt
+++ b/src/main/kotlin/mobildata/exception/NotFoundException.kt
@@ -1,4 +1,4 @@
-package io.realworld.exception
+package mobildata.exception
 
 import org.springframework.http.HttpStatus
 import org.springframework.web.bind.annotation.ResponseStatus
diff --git a/src/main/kotlin/io/realworld/exception/UnauthorizedException.kt b/src/main/kotlin/mobildata/exception/UnauthorizedException.kt
similarity index 86%
rename from src/main/kotlin/io/realworld/exception/UnauthorizedException.kt
rename to src/main/kotlin/mobildata/exception/UnauthorizedException.kt
index 3cb598d989700b4c7c2499aaf20f9460a434374f..067bbe19cea480b468a3c2e4ae6e7f4f45ee57f1 100644
--- a/src/main/kotlin/io/realworld/exception/UnauthorizedException.kt
+++ b/src/main/kotlin/mobildata/exception/UnauthorizedException.kt
@@ -1,4 +1,4 @@
-package io.realworld.exception
+package mobildata.exception
 
 import org.springframework.http.HttpStatus
 import org.springframework.web.bind.annotation.ResponseStatus
diff --git a/src/main/kotlin/io/realworld/exception/UserExistException.kt b/src/main/kotlin/mobildata/exception/UserExistException.kt
similarity index 73%
rename from src/main/kotlin/io/realworld/exception/UserExistException.kt
rename to src/main/kotlin/mobildata/exception/UserExistException.kt
index 8c5af5aa133330662b29b32c736ff0a45cfd1c33..8960af9756bdea86817b4f3df55419a0ba215150 100644
--- a/src/main/kotlin/io/realworld/exception/UserExistException.kt
+++ b/src/main/kotlin/mobildata/exception/UserExistException.kt
@@ -1,4 +1,4 @@
-package io.realworld.exception
+package mobildata.exception
 
 /**
  * Created by alex on 30/04/2017.
diff --git a/src/main/kotlin/io/realworld/jwt/ApiKeySecured.kt b/src/main/kotlin/mobildata/jwt/ApiKeySecured.kt
similarity index 92%
rename from src/main/kotlin/io/realworld/jwt/ApiKeySecured.kt
rename to src/main/kotlin/mobildata/jwt/ApiKeySecured.kt
index 89b354188ddd3aee726247ba117fbbfdd994a014..ea8c4b3f906ba682a167615ffd1873f7006eb71f 100644
--- a/src/main/kotlin/io/realworld/jwt/ApiKeySecured.kt
+++ b/src/main/kotlin/mobildata/jwt/ApiKeySecured.kt
@@ -1,4 +1,4 @@
-package io.realworld.jwt
+package mobildata.jwt
 
 import java.lang.annotation.Documented
 import java.lang.annotation.Inherited
diff --git a/src/main/kotlin/io/realworld/jwt/ApiKeySecuredAspect.kt b/src/main/kotlin/mobildata/jwt/ApiKeySecuredAspect.kt
similarity index 96%
rename from src/main/kotlin/io/realworld/jwt/ApiKeySecuredAspect.kt
rename to src/main/kotlin/mobildata/jwt/ApiKeySecuredAspect.kt
index 63d0fb769309caaad379f55f424e84cf50601221..2273cf87a085c5dd1b1d6b01f5e4567d08cd7669 100644
--- a/src/main/kotlin/io/realworld/jwt/ApiKeySecuredAspect.kt
+++ b/src/main/kotlin/mobildata/jwt/ApiKeySecuredAspect.kt
@@ -1,7 +1,7 @@
-package io.realworld.jwt
+package mobildata.jwt
 
-import io.realworld.model.User
-import io.realworld.service.UserService
+import mobildata.model.User
+import mobildata.service.UserService
 import org.aspectj.lang.ProceedingJoinPoint
 import org.aspectj.lang.annotation.Around
 import org.aspectj.lang.annotation.Aspect
@@ -34,7 +34,7 @@ class ApiKeySecuredAspect(@Autowired val userService: UserService) {
     @Autowired
     var request: HttpServletRequest? = null
 
-    @Pointcut(value = "execution(@io.realworld.jwt.ApiKeySecured * *.*(..))")
+    @Pointcut(value = "execution(@mobildata.jwt.ApiKeySecured * *.*(..))")
     fun securedApiPointcut() {
     }
 
diff --git a/src/main/kotlin/io/realworld/jwt/ExposeResponseInterceptor.kt b/src/main/kotlin/mobildata/jwt/ExposeResponseInterceptor.kt
similarity index 98%
rename from src/main/kotlin/io/realworld/jwt/ExposeResponseInterceptor.kt
rename to src/main/kotlin/mobildata/jwt/ExposeResponseInterceptor.kt
index 895db9823cfe90af44af46e4a03a21b8491a87aa..f1c00ac5721b3f25ae0010c6232f7f485b291fd4 100644
--- a/src/main/kotlin/io/realworld/jwt/ExposeResponseInterceptor.kt
+++ b/src/main/kotlin/mobildata/jwt/ExposeResponseInterceptor.kt
@@ -1,4 +1,4 @@
-package io.realworld.jwt
+package mobildata.jwt
 
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter
 
diff --git a/src/main/kotlin/io/realworld/model/Article.kt b/src/main/kotlin/mobildata/model/Article.kt
similarity index 96%
rename from src/main/kotlin/io/realworld/model/Article.kt
rename to src/main/kotlin/mobildata/model/Article.kt
index 0aff74b605eb4ac17798499ef84aca81f2c8df6a..3552678a5eb74a2a548441a20188c01a4e8963c0 100644
--- a/src/main/kotlin/io/realworld/model/Article.kt
+++ b/src/main/kotlin/mobildata/model/Article.kt
@@ -1,4 +1,4 @@
-package io.realworld.model
+package mobildata.model
 
 import java.time.OffsetDateTime
 import javax.persistence.*
diff --git a/src/main/kotlin/io/realworld/model/Comment.kt b/src/main/kotlin/mobildata/model/Comment.kt
similarity index 95%
rename from src/main/kotlin/io/realworld/model/Comment.kt
rename to src/main/kotlin/mobildata/model/Comment.kt
index e63e0c1699125ab6892705c1deded999fcf90088..84e03210515c554b0733ffe7067c807c588a3964 100644
--- a/src/main/kotlin/io/realworld/model/Comment.kt
+++ b/src/main/kotlin/mobildata/model/Comment.kt
@@ -1,4 +1,4 @@
-package io.realworld.model
+package mobildata.model
 
 import java.time.OffsetDateTime
 import javax.persistence.*
diff --git a/src/main/kotlin/io/realworld/model/Tag.kt b/src/main/kotlin/mobildata/model/Tag.kt
similarity index 93%
rename from src/main/kotlin/io/realworld/model/Tag.kt
rename to src/main/kotlin/mobildata/model/Tag.kt
index 8d31bc9bdb77667e7f25dbf021668e870ebc7f90..c746e15d555b82bf457b7195598442630bdb4c43 100644
--- a/src/main/kotlin/io/realworld/model/Tag.kt
+++ b/src/main/kotlin/mobildata/model/Tag.kt
@@ -1,4 +1,4 @@
-package io.realworld.model
+package mobildata.model
 
 import com.fasterxml.jackson.annotation.JsonIgnore
 import javax.persistence.Entity
diff --git a/src/main/kotlin/io/realworld/model/User.kt b/src/main/kotlin/mobildata/model/User.kt
similarity index 82%
rename from src/main/kotlin/io/realworld/model/User.kt
rename to src/main/kotlin/mobildata/model/User.kt
index ec1188e3121857dbbcf265ca8c9cf4093d825d90..db61754cb2a8630a57256e4ab4fa03a180b8d794 100644
--- a/src/main/kotlin/io/realworld/model/User.kt
+++ b/src/main/kotlin/mobildata/model/User.kt
@@ -1,11 +1,15 @@
-package io.realworld.model
+package mobildata.model
 
 import com.fasterxml.jackson.annotation.JsonIgnore
 import com.fasterxml.jackson.annotation.JsonRootName
 import javax.persistence.*
 
+// user should be quoted, because this keyword might be resolved in
+// various DBMS's (e.g. postgresql)
+
 @Entity
 @JsonRootName("user")
+@Table(name = "\"user\"")
 data class User(var email: String = "",
                 @JsonIgnore
                 var password: String = "",
diff --git a/src/main/kotlin/io/realworld/model/inout/Article.kt b/src/main/kotlin/mobildata/model/inout/Article.kt
similarity index 91%
rename from src/main/kotlin/io/realworld/model/inout/Article.kt
rename to src/main/kotlin/mobildata/model/inout/Article.kt
index 6c928f546b33dd3034147b15b0bcdfb62f160ac9..b43cee7b729042fc996ac56f80a1b00981f4d274 100644
--- a/src/main/kotlin/io/realworld/model/inout/Article.kt
+++ b/src/main/kotlin/mobildata/model/inout/Article.kt
@@ -1,7 +1,7 @@
-package io.realworld.model.inout
+package mobildata.model.inout
 
 import com.fasterxml.jackson.annotation.JsonRootName
-import io.realworld.model.User
+import mobildata.model.User
 import java.time.OffsetDateTime
 import java.time.ZoneId
 import java.time.format.DateTimeFormatter
@@ -22,7 +22,7 @@ data class Article(var title: String? = null,
             return date.toZonedDateTime().withZoneSameInstant(ZoneId.of("Z")).format(DateTimeFormatter.ISO_ZONED_DATE_TIME)
         }
 
-        fun fromModel(model: io.realworld.model.Article, currentUser: User): Article {
+        fun fromModel(model: mobildata.model.Article, currentUser: User): Article {
             return Article(
                     slug = model.slug,
                     title = model.title,
diff --git a/src/main/kotlin/io/realworld/model/inout/Comment.kt b/src/main/kotlin/mobildata/model/inout/Comment.kt
similarity index 85%
rename from src/main/kotlin/io/realworld/model/inout/Comment.kt
rename to src/main/kotlin/mobildata/model/inout/Comment.kt
index cff433ed194e73c25ae3c6c860100ab181ed7f0f..fbb34c08f81307c191ba98a206ee12c3dca10606 100644
--- a/src/main/kotlin/io/realworld/model/inout/Comment.kt
+++ b/src/main/kotlin/mobildata/model/inout/Comment.kt
@@ -1,7 +1,7 @@
-package io.realworld.model.inout
+package mobildata.model.inout
 
 import com.fasterxml.jackson.annotation.JsonRootName
-import io.realworld.model.User
+import mobildata.model.User
 import java.time.OffsetDateTime
 import java.time.ZoneId
 import java.time.format.DateTimeFormatter
@@ -17,7 +17,7 @@ data class Comment(val createdAt: String,
             return date.toZonedDateTime().withZoneSameInstant(ZoneId.of("Z")).format(DateTimeFormatter.ISO_ZONED_DATE_TIME)
         }
 
-        fun fromModel(model: io.realworld.model.Comment, currentUser: User): Comment {
+        fun fromModel(model: mobildata.model.Comment, currentUser: User): Comment {
             return Comment(
                     id = model.id,
                     body = model.body,
diff --git a/src/main/kotlin/io/realworld/model/inout/Login.kt b/src/main/kotlin/mobildata/model/inout/Login.kt
similarity index 95%
rename from src/main/kotlin/io/realworld/model/inout/Login.kt
rename to src/main/kotlin/mobildata/model/inout/Login.kt
index 45803ddb920a6b2a77e491550b6b9e692485064c..66dba946b1cef77dec1facbad5af7686cd69903e 100644
--- a/src/main/kotlin/io/realworld/model/inout/Login.kt
+++ b/src/main/kotlin/mobildata/model/inout/Login.kt
@@ -1,4 +1,4 @@
-package io.realworld.model.inout
+package mobildata.model.inout
 
 import com.fasterxml.jackson.annotation.JsonRootName
 import javax.validation.constraints.NotNull
diff --git a/src/main/kotlin/io/realworld/model/inout/NewArticle.kt b/src/main/kotlin/mobildata/model/inout/NewArticle.kt
similarity index 94%
rename from src/main/kotlin/io/realworld/model/inout/NewArticle.kt
rename to src/main/kotlin/mobildata/model/inout/NewArticle.kt
index 554d37a7aae198bb89b00947e6b33c7281a767eb..2c3e267be787b20ff827cbea37084fbc035e429f 100644
--- a/src/main/kotlin/io/realworld/model/inout/NewArticle.kt
+++ b/src/main/kotlin/mobildata/model/inout/NewArticle.kt
@@ -1,4 +1,4 @@
-package io.realworld.model.inout
+package mobildata.model.inout
 
 import com.fasterxml.jackson.annotation.JsonRootName
 import javax.validation.constraints.NotNull
diff --git a/src/main/kotlin/io/realworld/model/inout/NewComment.kt b/src/main/kotlin/mobildata/model/inout/NewComment.kt
similarity index 90%
rename from src/main/kotlin/io/realworld/model/inout/NewComment.kt
rename to src/main/kotlin/mobildata/model/inout/NewComment.kt
index 2a8aced023661f8b330871ac98159316f6d1b988..e4d6d2b558ba4b234d1fd5abbe0b9523255ca224 100644
--- a/src/main/kotlin/io/realworld/model/inout/NewComment.kt
+++ b/src/main/kotlin/mobildata/model/inout/NewComment.kt
@@ -1,4 +1,4 @@
-package io.realworld.model.inout
+package mobildata.model.inout
 
 import com.fasterxml.jackson.annotation.JsonRootName
 import javax.validation.constraints.NotNull
diff --git a/src/main/kotlin/io/realworld/model/inout/Profile.kt b/src/main/kotlin/mobildata/model/inout/Profile.kt
similarity index 88%
rename from src/main/kotlin/io/realworld/model/inout/Profile.kt
rename to src/main/kotlin/mobildata/model/inout/Profile.kt
index 2cd7af63a12bc7c6a42f2ec020170ad85417b442..cb79994f851c48e42e04043acaceadaed527f0f5 100644
--- a/src/main/kotlin/io/realworld/model/inout/Profile.kt
+++ b/src/main/kotlin/mobildata/model/inout/Profile.kt
@@ -1,7 +1,7 @@
-package io.realworld.model.inout
+package mobildata.model.inout
 
 import com.fasterxml.jackson.annotation.JsonRootName
-import io.realworld.model.User
+import mobildata.model.User
 
 @JsonRootName("profile")
 data class Profile(var username: String,
diff --git a/src/main/kotlin/io/realworld/model/inout/Register.kt b/src/main/kotlin/mobildata/model/inout/Register.kt
similarity index 96%
rename from src/main/kotlin/io/realworld/model/inout/Register.kt
rename to src/main/kotlin/mobildata/model/inout/Register.kt
index fee6ae18470b19ce539b76c12d99d880e40a3757..43304488d5efdc03104c509148d2bda96651f66f 100644
--- a/src/main/kotlin/io/realworld/model/inout/Register.kt
+++ b/src/main/kotlin/mobildata/model/inout/Register.kt
@@ -1,4 +1,4 @@
-package io.realworld.model.inout
+package mobildata.model.inout
 
 import com.fasterxml.jackson.annotation.JsonRootName
 import javax.validation.constraints.NotNull
diff --git a/src/main/kotlin/io/realworld/model/inout/UpdateArticle.kt b/src/main/kotlin/mobildata/model/inout/UpdateArticle.kt
similarity index 90%
rename from src/main/kotlin/io/realworld/model/inout/UpdateArticle.kt
rename to src/main/kotlin/mobildata/model/inout/UpdateArticle.kt
index 373e99ef6ec1be692c5bf322de658667f9a1d4af..0eed6fa352323c98abf340232df9c979c22e9fdb 100644
--- a/src/main/kotlin/io/realworld/model/inout/UpdateArticle.kt
+++ b/src/main/kotlin/mobildata/model/inout/UpdateArticle.kt
@@ -1,4 +1,4 @@
-package io.realworld.model.inout
+package mobildata.model.inout
 
 import com.fasterxml.jackson.annotation.JsonRootName
 
diff --git a/src/main/kotlin/io/realworld/model/inout/UpdateUser.kt b/src/main/kotlin/mobildata/model/inout/UpdateUser.kt
similarity index 95%
rename from src/main/kotlin/io/realworld/model/inout/UpdateUser.kt
rename to src/main/kotlin/mobildata/model/inout/UpdateUser.kt
index a619a65f84fea671c939f6d12cf2c7f81fd776e5..a2a039ef669116303d97e03007006abf1e7fa5a3 100644
--- a/src/main/kotlin/io/realworld/model/inout/UpdateUser.kt
+++ b/src/main/kotlin/mobildata/model/inout/UpdateUser.kt
@@ -1,4 +1,4 @@
-package io.realworld.model.inout
+package mobildata.model.inout
 
 import com.fasterxml.jackson.annotation.JsonRootName
 import javax.validation.constraints.NotNull
diff --git a/src/main/kotlin/io/realworld/repository/ArticleRepository.kt b/src/main/kotlin/mobildata/repository/ArticleRepository.kt
similarity index 89%
rename from src/main/kotlin/io/realworld/repository/ArticleRepository.kt
rename to src/main/kotlin/mobildata/repository/ArticleRepository.kt
index adb7c6e44100b98e49e90cf487dec7bd3c4be9ab..0a8560736d11ae46a5f9bb9434a059014e68923e 100644
--- a/src/main/kotlin/io/realworld/repository/ArticleRepository.kt
+++ b/src/main/kotlin/mobildata/repository/ArticleRepository.kt
@@ -1,6 +1,6 @@
-package io.realworld.repository
+package mobildata.repository
 
-import io.realworld.model.Article
+import mobildata.model.Article
 import org.springframework.data.domain.Pageable
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor
 import org.springframework.data.repository.PagingAndSortingRepository
diff --git a/src/main/kotlin/io/realworld/repository/CommentRepository.kt b/src/main/kotlin/mobildata/repository/CommentRepository.kt
similarity index 75%
rename from src/main/kotlin/io/realworld/repository/CommentRepository.kt
rename to src/main/kotlin/mobildata/repository/CommentRepository.kt
index f384749b3f659fa89947365de819db70f7f79f13..2b61104d71b646567bc71ca6ffc90533279aa432 100644
--- a/src/main/kotlin/io/realworld/repository/CommentRepository.kt
+++ b/src/main/kotlin/mobildata/repository/CommentRepository.kt
@@ -1,7 +1,7 @@
-package io.realworld.repository
+package mobildata.repository
 
-import io.realworld.model.Article
-import io.realworld.model.Comment
+import mobildata.model.Article
+import mobildata.model.Comment
 import org.springframework.data.repository.CrudRepository
 import org.springframework.stereotype.Repository
 
diff --git a/src/main/kotlin/io/realworld/repository/TagRepository.kt b/src/main/kotlin/mobildata/repository/TagRepository.kt
similarity index 77%
rename from src/main/kotlin/io/realworld/repository/TagRepository.kt
rename to src/main/kotlin/mobildata/repository/TagRepository.kt
index a2a3973a5560439ae3f07d25993fd1c9dc178b76..1188bbf6bb4c88819d7e9b5f5d4b5bae3e240972 100644
--- a/src/main/kotlin/io/realworld/repository/TagRepository.kt
+++ b/src/main/kotlin/mobildata/repository/TagRepository.kt
@@ -1,6 +1,6 @@
-package io.realworld.repository
+package mobildata.repository
 
-import io.realworld.model.Tag
+import mobildata.model.Tag
 import org.springframework.data.repository.CrudRepository
 import org.springframework.stereotype.Repository
 
diff --git a/src/main/kotlin/io/realworld/repository/UserRepository.kt b/src/main/kotlin/mobildata/repository/UserRepository.kt
similarity index 88%
rename from src/main/kotlin/io/realworld/repository/UserRepository.kt
rename to src/main/kotlin/mobildata/repository/UserRepository.kt
index a16b738d78cbc3c3efe444bd7136cf82f7b17ac9..dc78443f40f8fc47e8797a39e591e1ed2073f1f5 100644
--- a/src/main/kotlin/io/realworld/repository/UserRepository.kt
+++ b/src/main/kotlin/mobildata/repository/UserRepository.kt
@@ -1,6 +1,6 @@
-package io.realworld.repository
+package mobildata.repository
 
-import io.realworld.model.User
+import mobildata.model.User
 import org.springframework.data.repository.CrudRepository
 import org.springframework.stereotype.Repository
 
diff --git a/src/main/kotlin/io/realworld/repository/specification/ArticlesSpecifications.kt b/src/main/kotlin/mobildata/repository/specification/ArticlesSpecifications.kt
similarity index 86%
rename from src/main/kotlin/io/realworld/repository/specification/ArticlesSpecifications.kt
rename to src/main/kotlin/mobildata/repository/specification/ArticlesSpecifications.kt
index bf87e25204a86a259040367f25626e56dfbe2cfe..dddfa4d11b3741f60c4fe7f6a87c0c1e87b3a29a 100644
--- a/src/main/kotlin/io/realworld/repository/specification/ArticlesSpecifications.kt
+++ b/src/main/kotlin/mobildata/repository/specification/ArticlesSpecifications.kt
@@ -1,8 +1,8 @@
-package io.realworld.repository.specification
+package mobildata.repository.specification
 
-import io.realworld.model.Article
-import io.realworld.model.Tag
-import io.realworld.model.User
+import mobildata.model.Article
+import mobildata.model.Tag
+import mobildata.model.User
 import org.springframework.data.jpa.domain.Specification
 import javax.persistence.criteria.Predicate
 
diff --git a/src/main/kotlin/io/realworld/service/UserService.kt b/src/main/kotlin/mobildata/service/UserService.kt
similarity index 91%
rename from src/main/kotlin/io/realworld/service/UserService.kt
rename to src/main/kotlin/mobildata/service/UserService.kt
index 4090f9fb952b82f2e6bd5b885af92f1eb902daa2..95d3e1d3cef9eee33f11d2e995a9736e86cbbf37 100644
--- a/src/main/kotlin/io/realworld/service/UserService.kt
+++ b/src/main/kotlin/mobildata/service/UserService.kt
@@ -1,11 +1,11 @@
-package io.realworld.service
+package mobildata.service
 
 import io.jsonwebtoken.Jwts
 import io.jsonwebtoken.SignatureAlgorithm
-import io.realworld.exception.InvalidLoginException
-import io.realworld.model.User
-import io.realworld.model.inout.Login
-import io.realworld.repository.UserRepository
+import mobildata.exception.InvalidLoginException
+import mobildata.model.User
+import mobildata.model.inout.Login
+import mobildata.repository.UserRepository
 import org.mindrot.jbcrypt.BCrypt
 import org.springframework.beans.factory.annotation.Value
 import org.springframework.stereotype.Service
diff --git a/src/main/kotlin/io/realworld/web/ArticleHandler.kt b/src/main/kotlin/mobildata/web/ArticleHandler.kt
similarity index 91%
rename from src/main/kotlin/io/realworld/web/ArticleHandler.kt
rename to src/main/kotlin/mobildata/web/ArticleHandler.kt
index da33df4fb29b23b3d9a2f011edb682bcbe34cb60..62fa2786fb0458c03046b9d571d6ca939b4f2d28 100644
--- a/src/main/kotlin/io/realworld/web/ArticleHandler.kt
+++ b/src/main/kotlin/mobildata/web/ArticleHandler.kt
@@ -1,23 +1,23 @@
-package io.realworld.web
+package mobildata.web
 
 import com.github.slugify.Slugify
-import io.realworld.exception.ForbiddenRequestException
-import io.realworld.exception.InvalidRequest
-import io.realworld.exception.NotFoundException
-import io.realworld.jwt.ApiKeySecured
-import io.realworld.model.Article
-import io.realworld.model.Comment
-import io.realworld.model.Tag
-import io.realworld.model.User
-import io.realworld.model.inout.NewArticle
-import io.realworld.model.inout.NewComment
-import io.realworld.model.inout.UpdateArticle
-import io.realworld.repository.ArticleRepository
-import io.realworld.repository.CommentRepository
-import io.realworld.repository.TagRepository
-import io.realworld.repository.UserRepository
-import io.realworld.repository.specification.ArticlesSpecifications
-import io.realworld.service.UserService
+import mobildata.exception.ForbiddenRequestException
+import mobildata.exception.InvalidRequest
+import mobildata.exception.NotFoundException
+import mobildata.jwt.ApiKeySecured
+import mobildata.model.Article
+import mobildata.model.Comment
+import mobildata.model.Tag
+import mobildata.model.User
+import mobildata.model.inout.NewArticle
+import mobildata.model.inout.NewComment
+import mobildata.model.inout.UpdateArticle
+import mobildata.repository.ArticleRepository
+import mobildata.repository.CommentRepository
+import mobildata.repository.TagRepository
+import mobildata.repository.UserRepository
+import mobildata.repository.specification.ArticlesSpecifications
+import mobildata.service.UserService
 import org.springframework.data.domain.PageRequest
 import org.springframework.data.domain.Sort
 import org.springframework.http.HttpStatus
@@ -27,8 +27,8 @@ import org.springframework.web.bind.annotation.*
 import java.time.OffsetDateTime
 import java.util.*
 import javax.validation.Valid
-import io.realworld.model.inout.Article as ArticleIO
-import io.realworld.model.inout.Comment as CommentOut
+import mobildata.model.inout.Article as ArticleIO
+import mobildata.model.inout.Comment as CommentOut
 
 @RestController
 class ArticleHandler(val repository: ArticleRepository,
@@ -36,7 +36,7 @@ class ArticleHandler(val repository: ArticleRepository,
                      val userRepository: UserRepository,
                      val commentRepository: CommentRepository,
                      val tagRepository: TagRepository) {
-
+/*
     @ApiKeySecured(mandatory = false)
     @GetMapping("/api/articles")
     fun articles(@RequestParam(defaultValue = "20") limit: Int,
@@ -55,6 +55,7 @@ class ArticleHandler(val repository: ArticleRepository,
         return articlesView(articles, userService.currentUser())
     }
 
+
     @ApiKeySecured
     @GetMapping("/api/articles/feed")
     fun feed(@RequestParam(defaultValue = "20") limit: Int,
@@ -73,7 +74,7 @@ class ArticleHandler(val repository: ArticleRepository,
         }
         throw NotFoundException()
     }
-
+*/
     @ApiKeySecured
     @PostMapping("/api/articles")
     fun newArticle(@Valid @RequestBody newArticle: NewArticle, errors: Errors): Any {
@@ -98,7 +99,7 @@ class ArticleHandler(val repository: ArticleRepository,
 
         return articleView(repository.save(article), currentUser)
     }
-
+/*
     @ApiKeySecured
     @PutMapping("/api/articles/{slug}")
     fun updateArticle(@PathVariable slug: String, @RequestBody article: UpdateArticle): Any {
@@ -228,12 +229,12 @@ class ArticleHandler(val repository: ArticleRepository,
         }
         throw NotFoundException()
     }
-
+*/
     // helpers
 
     fun articleView(article: Article, currentUser: User)
             = mapOf("article" to ArticleIO.fromModel(article, currentUser))
-
+/*
     fun articlesView(articles: List<Article>, currentUser: User)
             = mapOf("articles" to articles.map { ArticleIO.fromModel(it, userService.currentUser()) },
             "articlesCount" to articles.size)
@@ -243,4 +244,5 @@ class ArticleHandler(val repository: ArticleRepository,
 
     fun commentsView(comments: List<Comment>, currentUser: User)
             = mapOf("comments" to comments.map { CommentOut.fromModel(it, currentUser) })
+*/
 }
\ No newline at end of file
diff --git a/src/main/kotlin/io/realworld/web/InvalidRequestHandler.kt b/src/main/kotlin/mobildata/web/InvalidRequestHandler.kt
similarity index 93%
rename from src/main/kotlin/io/realworld/web/InvalidRequestHandler.kt
rename to src/main/kotlin/mobildata/web/InvalidRequestHandler.kt
index 31743fcc423450077b7ff6daf817f45cff3ca725..fffce94d3c88723f6a94f312f3068df24b6208e1 100644
--- a/src/main/kotlin/io/realworld/web/InvalidRequestHandler.kt
+++ b/src/main/kotlin/mobildata/web/InvalidRequestHandler.kt
@@ -1,6 +1,6 @@
-package io.realworld.web
+package mobildata.web
 
-import io.realworld.exception.InvalidException
+import mobildata.exception.InvalidException
 import org.springframework.http.HttpStatus
 import org.springframework.stereotype.Component
 import org.springframework.web.bind.annotation.ExceptionHandler
diff --git a/src/main/kotlin/io/realworld/web/ProfileHandler.kt b/src/main/kotlin/mobildata/web/ProfileHandler.kt
similarity index 86%
rename from src/main/kotlin/io/realworld/web/ProfileHandler.kt
rename to src/main/kotlin/mobildata/web/ProfileHandler.kt
index 92a8afff421a460fb6b0644b31c90b4127187922..2aa0bdbe7aab828123f3395a9139e6e31ce389b6 100644
--- a/src/main/kotlin/io/realworld/web/ProfileHandler.kt
+++ b/src/main/kotlin/mobildata/web/ProfileHandler.kt
@@ -1,11 +1,11 @@
-package io.realworld.web
+package mobildata.web
 
-import io.realworld.exception.NotFoundException
-import io.realworld.jwt.ApiKeySecured
-import io.realworld.model.User
-import io.realworld.model.inout.Profile
-import io.realworld.repository.UserRepository
-import io.realworld.service.UserService
+import mobildata.exception.NotFoundException
+import mobildata.jwt.ApiKeySecured
+import mobildata.model.User
+import mobildata.model.inout.Profile
+import mobildata.repository.UserRepository
+import mobildata.service.UserService
 import org.springframework.web.bind.annotation.*
 
 @RestController
diff --git a/src/main/kotlin/mobildata/web/SwaggerConfig.kt b/src/main/kotlin/mobildata/web/SwaggerConfig.kt
new file mode 100644
index 0000000000000000000000000000000000000000..6787987f163c7231403a353d5c1ca1374cec65ce
--- /dev/null
+++ b/src/main/kotlin/mobildata/web/SwaggerConfig.kt
@@ -0,0 +1,30 @@
+package mobildata.web
+
+import org.springframework.context.annotation.Bean
+import org.springframework.context.annotation.Configuration
+import springfox.documentation.builders.PathSelectors
+import springfox.documentation.builders.RequestHandlerSelectors
+import springfox.documentation.spi.DocumentationType
+import springfox.documentation.spring.web.plugins.Docket
+import springfox.documentation.swagger2.annotations.EnableSwagger2
+import org.springframework.web.servlet.config.annotation.ViewControllerRegistry
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
+
+
+
+
+
+
+@Configuration
+@EnableSwagger2
+class SwaggerConfig {
+    @Bean
+    fun api(): Docket {
+        return Docket(DocumentationType.SWAGGER_2)
+                .select()
+                .apis(RequestHandlerSelectors.any())
+                .paths(PathSelectors.any())
+                .build()
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/io/realworld/web/UserHandler.kt b/src/main/kotlin/mobildata/web/UserHandler.kt
similarity index 91%
rename from src/main/kotlin/io/realworld/web/UserHandler.kt
rename to src/main/kotlin/mobildata/web/UserHandler.kt
index 2f73159fe0ef49deb1d99c16e308dfcdd39431f4..ba254397fb95f3f2586bb11f43e145d8d1ba45d2 100644
--- a/src/main/kotlin/io/realworld/web/UserHandler.kt
+++ b/src/main/kotlin/mobildata/web/UserHandler.kt
@@ -1,13 +1,13 @@
-package io.realworld.web
-
-import io.realworld.exception.*
-import io.realworld.jwt.ApiKeySecured
-import io.realworld.model.User
-import io.realworld.model.inout.Login
-import io.realworld.model.inout.Register
-import io.realworld.model.inout.UpdateUser
-import io.realworld.repository.UserRepository
-import io.realworld.service.UserService
+package mobildata.web
+
+import mobildata.exception.*
+import mobildata.jwt.ApiKeySecured
+import mobildata.model.User
+import mobildata.model.inout.Login
+import mobildata.model.inout.Register
+import mobildata.model.inout.UpdateUser
+import mobildata.repository.UserRepository
+import mobildata.service.UserService
 import org.mindrot.jbcrypt.BCrypt
 import org.springframework.validation.BindException
 import org.springframework.validation.Errors
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index cfd9acd6eaa0b9486a14c338f0864e3a4780f670..ff374d89cb17b864e6f14ce53273b48ff0dcf59a 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,12 +1,42 @@
-spring.datasource.url=jdbc:h2:mem:AZ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
-spring.datasource.driverClassName=org.h2.Driver
-spring.datasource.username=sa
-spring.datasource.password=
-spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
+spring.datasource.url = jdbc:postgresql://localhost:5432/mobildata
+spring.datasource.driverClassName=org.postgresql.Driver
+spring.datasource.username=postgres
+spring.datasource.password=postgres
 
-spring.jackson.deserialization.UNWRAP_ROOT_VALUE=true
+spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
+
+# create schema automatically. It can be more fine-grained with the commented stuff below.
+# spring.jpa.generate-ddl=true
+
+# recreate the database on startup
+spring.jpa.hibernate.ddl-auto=create-drop
+
+# restart server:
+# sudo service postgresql restart
+
+spring.jpa.hibernate.naming.implicit-strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl
+
+# for logging, debugging, etc.:
+spring.jpa.show-sql=true
+spring.jpa.properties.hibernate.format_sql=true
+
+# Disable feature detection by this undocumented parameter. Check the org.hibernate.engine.jdbc.internal.JdbcServiceImpl.configure method for more details.
+spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false
 
-jwt.secret=Em3u7dCZ2QSvSGSGSRFUTfrwgu3WjfU2rHZxSjNSqU5x89C3jXPL6WLMW7dTE6rd9NRgWAwUWHkj8ZLfbCNU8uVfv9kuBmWCYPkk776A5jQ2LeJ76bZbdhXN
-jwt.issuer=Kotlin&Spring
 
-#logging.level.org.springframework.web=DEBUG
\ No newline at end of file
+# log sql statements
+#logging.level.org.hibernate.SQL=INFO
+#logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
+
+# log values too
+#logging.level.org.hibernate.type=TRACE
+
+logging.level.org.springframework.web=INFO
+logging.level.org.hibernate=INFO
+logging.file=/home/wastack/intellij/onlab/database/log.txt
+
+
+spring.jackson.deserialization.UNWRAP_ROOT_VALUE=true
+
+jwt.secret=fsdMVZ0BPMjvTef89G22IvmLeJMSntRWodTrNywPNLGK1HRUmTr1J3bDqSVNqxM
+jwt.issuer=MobilDataServer
\ No newline at end of file
diff --git a/src/test/kotlin/io/realworld/ApiApplicationTests.kt b/src/test/kotlin/mobildata/ApiApplicationTests.kt
similarity index 87%
rename from src/test/kotlin/io/realworld/ApiApplicationTests.kt
rename to src/test/kotlin/mobildata/ApiApplicationTests.kt
index 18ed1c4281c276f998cf807c33377864017f4e08..d1fb107ea4eb56c97655fd0ef84407b5be41f337 100644
--- a/src/test/kotlin/io/realworld/ApiApplicationTests.kt
+++ b/src/test/kotlin/mobildata/ApiApplicationTests.kt
@@ -1,15 +1,15 @@
-package io.realworld
+package mobildata
 
 import feign.Feign
 import feign.gson.GsonDecoder
 import feign.gson.GsonEncoder
-import io.realworld.client.ProfileClient
-import io.realworld.client.TagClient
-import io.realworld.client.UserClient
-import io.realworld.client.response.InLogin
-import io.realworld.client.response.InRegister
-import io.realworld.model.inout.Login
-import io.realworld.model.inout.Register
+import mobildata.client.ProfileClient
+import mobildata.client.TagClient
+import mobildata.client.UserClient
+import mobildata.client.response.InLogin
+import mobildata.client.response.InRegister
+import mobildata.model.inout.Login
+import mobildata.model.inout.Register
 import org.hamcrest.Matchers
 import org.junit.Assert
 import org.junit.Before
@@ -28,7 +28,6 @@ class ApiApplicationTests {
     var randomServerPort: Int = 0
     @Autowired
     var environment: Environment? = null
-    var tagClient: TagClient? = null
     var userClient: UserClient? = null
     var profileClient: ProfileClient? = null
 
@@ -43,16 +42,10 @@ class ApiApplicationTests {
 
     @Before
     fun before() {
-        tagClient = buildClient(TagClient::class.java)
         userClient = buildClient(UserClient::class.java)
         profileClient = buildClient(ProfileClient::class.java)
     }
 
-    @Test
-    fun retrieveTags() {
-        println("> tags: " + tagClient?.tags()?.tags)
-    }
-
     @Test
     fun userAndProfileTest() {
         val fooRegister = userClient?.register(