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(