init
This commit is contained in:
		
							
								
								
									
										38
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
kind: pipeline
 | 
			
		||||
type: docker
 | 
			
		||||
name: default
 | 
			
		||||
 | 
			
		||||
steps:
 | 
			
		||||
  - name: code-analysis
 | 
			
		||||
    image: aosapps/drone-sonar-plugin
 | 
			
		||||
    settings:
 | 
			
		||||
      sonar_host:
 | 
			
		||||
        from_secret: SONAR_HOST
 | 
			
		||||
      sonar_token:
 | 
			
		||||
        from_secret: SONAR_CODE
 | 
			
		||||
 | 
			
		||||
  - name: build_application
 | 
			
		||||
    image: openjdk:11-jdk
 | 
			
		||||
    commands:
 | 
			
		||||
      - ./gradlew build -x test
 | 
			
		||||
 | 
			
		||||
  - name: kaniko
 | 
			
		||||
    image: banzaicloud/drone-kaniko
 | 
			
		||||
    settings:
 | 
			
		||||
      registry: registry.kmlabz.com
 | 
			
		||||
      repo: birbnetes/${DRONE_REPO_NAME}
 | 
			
		||||
      username:
 | 
			
		||||
        from_secret: DOCKER_USERNAME
 | 
			
		||||
      password:
 | 
			
		||||
        from_secret: DOCKER_PASSWORD
 | 
			
		||||
      tags:
 | 
			
		||||
        - latest
 | 
			
		||||
        - ${DRONE_BUILD_NUMBER}
 | 
			
		||||
 | 
			
		||||
  - name: ms-teams
 | 
			
		||||
    image: kuperiu/drone-teams
 | 
			
		||||
    settings:
 | 
			
		||||
      webhook:
 | 
			
		||||
        from_secret: TEAMS_WEBHOOK
 | 
			
		||||
    when:
 | 
			
		||||
      status: [ failure ]
 | 
			
		||||
							
								
								
									
										8
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
/.gradle
 | 
			
		||||
/.idea
 | 
			
		||||
/out
 | 
			
		||||
/build
 | 
			
		||||
*.iml
 | 
			
		||||
*.ipr
 | 
			
		||||
*.iws
 | 
			
		||||
*.log
 | 
			
		||||
							
								
								
									
										14
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
FROM openjdk:11-jre
 | 
			
		||||
 | 
			
		||||
ENV APPLICATION_USER kotlin
 | 
			
		||||
RUN useradd $APPLICATION_USER
 | 
			
		||||
 | 
			
		||||
RUN mkdir /app
 | 
			
		||||
RUN chown -R $APPLICATION_USER /app
 | 
			
		||||
 | 
			
		||||
USER $APPLICATION_USER
 | 
			
		||||
 | 
			
		||||
COPY ./build/libs/output-service-rdb-consumer.jar /app/output-service-rdb-consumer.jar
 | 
			
		||||
WORKDIR /app
 | 
			
		||||
 | 
			
		||||
CMD ["java", "-server", "-XX:+UnlockExperimentalVMOptions", "-XX:InitialRAMFraction=2", "-XX:MinRAMFraction=2", "-XX:MaxRAMFraction=2", "-XX:+UseG1GC", "-XX:MaxGCPauseMillis=100", "-XX:+UseStringDeduplication", "-jar", "output-service-rdb.jar"]
 | 
			
		||||
							
								
								
									
										45
									
								
								build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
plugins {
 | 
			
		||||
    application
 | 
			
		||||
    kotlin("jvm") version "1.5.10"
 | 
			
		||||
    id("com.github.johnrengelman.shadow") version "7.0.0"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
application {
 | 
			
		||||
    mainClassName = "MainKt"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
group = "com.kmlabz"
 | 
			
		||||
version = "1.0-SNAPSHOT"
 | 
			
		||||
 | 
			
		||||
repositories {
 | 
			
		||||
    mavenCentral()
 | 
			
		||||
    jcenter()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dependencies {
 | 
			
		||||
    implementation("com.rabbitmq:amqp-client:5.13.0")
 | 
			
		||||
    implementation("com.viartemev:the-white-rabbit:0.0.6")
 | 
			
		||||
    implementation("com.zaxxer:HikariCP:5.0.0")
 | 
			
		||||
    implementation("org.jetbrains.exposed:exposed-core:0.33.1")
 | 
			
		||||
    implementation("org.jetbrains.exposed:exposed-dao:0.33.1")
 | 
			
		||||
    implementation("org.jetbrains.exposed:exposed-jdbc:0.33.1")
 | 
			
		||||
    implementation("org.jetbrains.exposed:exposed-java-time:0.33.1")
 | 
			
		||||
    implementation("io.insert-koin:koin-core:3.1.2")
 | 
			
		||||
    implementation("org.postgresql:postgresql:42.2.23")
 | 
			
		||||
    implementation("com.google.code.gson:gson:2.8.7")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tasks {
 | 
			
		||||
    named<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar>("shadowJar") {
 | 
			
		||||
        archiveBaseName.set("output-service-rdb-consumer")
 | 
			
		||||
        classifier = null
 | 
			
		||||
        version = null
 | 
			
		||||
        mergeServiceFiles()
 | 
			
		||||
        manifest {
 | 
			
		||||
            attributes(mapOf("Main-Class" to "Main"))
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    compileKotlin {
 | 
			
		||||
        kotlinOptions.jvmTarget = "11"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								gradle.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								gradle.properties
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
kotlin.code.style=official
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										5
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
distributionBase=GRADLE_USER_HOME
 | 
			
		||||
distributionPath=wrapper/dists
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
 | 
			
		||||
zipStoreBase=GRADLE_USER_HOME
 | 
			
		||||
zipStorePath=wrapper/dists
 | 
			
		||||
							
								
								
									
										185
									
								
								gradlew
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								gradlew
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,185 @@
 | 
			
		||||
#!/usr/bin/env sh
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Copyright 2015 the original author or authors.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#      https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
##############################################################################
 | 
			
		||||
##
 | 
			
		||||
##  Gradle start up script for UN*X
 | 
			
		||||
##
 | 
			
		||||
##############################################################################
 | 
			
		||||
 | 
			
		||||
# Attempt to set APP_HOME
 | 
			
		||||
# Resolve links: $0 may be a link
 | 
			
		||||
PRG="$0"
 | 
			
		||||
# Need this for relative symlinks.
 | 
			
		||||
while [ -h "$PRG" ] ; do
 | 
			
		||||
    ls=`ls -ld "$PRG"`
 | 
			
		||||
    link=`expr "$ls" : '.*-> \(.*\)$'`
 | 
			
		||||
    if expr "$link" : '/.*' > /dev/null; then
 | 
			
		||||
        PRG="$link"
 | 
			
		||||
    else
 | 
			
		||||
        PRG=`dirname "$PRG"`"/$link"
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
SAVED="`pwd`"
 | 
			
		||||
cd "`dirname \"$PRG\"`/" >/dev/null
 | 
			
		||||
APP_HOME="`pwd -P`"
 | 
			
		||||
cd "$SAVED" >/dev/null
 | 
			
		||||
 | 
			
		||||
APP_NAME="Gradle"
 | 
			
		||||
APP_BASE_NAME=`basename "$0"`
 | 
			
		||||
 | 
			
		||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 | 
			
		||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
 | 
			
		||||
 | 
			
		||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
 | 
			
		||||
MAX_FD="maximum"
 | 
			
		||||
 | 
			
		||||
warn () {
 | 
			
		||||
    echo "$*"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
die () {
 | 
			
		||||
    echo
 | 
			
		||||
    echo "$*"
 | 
			
		||||
    echo
 | 
			
		||||
    exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# OS specific support (must be 'true' or 'false').
 | 
			
		||||
cygwin=false
 | 
			
		||||
msys=false
 | 
			
		||||
darwin=false
 | 
			
		||||
nonstop=false
 | 
			
		||||
case "`uname`" in
 | 
			
		||||
  CYGWIN* )
 | 
			
		||||
    cygwin=true
 | 
			
		||||
    ;;
 | 
			
		||||
  Darwin* )
 | 
			
		||||
    darwin=true
 | 
			
		||||
    ;;
 | 
			
		||||
  MSYS* | MINGW* )
 | 
			
		||||
    msys=true
 | 
			
		||||
    ;;
 | 
			
		||||
  NONSTOP* )
 | 
			
		||||
    nonstop=true
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Determine the Java command to use to start the JVM.
 | 
			
		||||
if [ -n "$JAVA_HOME" ] ; then
 | 
			
		||||
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
 | 
			
		||||
        # IBM's JDK on AIX uses strange locations for the executables
 | 
			
		||||
        JAVACMD="$JAVA_HOME/jre/sh/java"
 | 
			
		||||
    else
 | 
			
		||||
        JAVACMD="$JAVA_HOME/bin/java"
 | 
			
		||||
    fi
 | 
			
		||||
    if [ ! -x "$JAVACMD" ] ; then
 | 
			
		||||
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
 | 
			
		||||
 | 
			
		||||
Please set the JAVA_HOME variable in your environment to match the
 | 
			
		||||
location of your Java installation."
 | 
			
		||||
    fi
 | 
			
		||||
else
 | 
			
		||||
    JAVACMD="java"
 | 
			
		||||
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 | 
			
		||||
 | 
			
		||||
Please set the JAVA_HOME variable in your environment to match the
 | 
			
		||||
location of your Java installation."
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Increase the maximum file descriptors if we can.
 | 
			
		||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
 | 
			
		||||
    MAX_FD_LIMIT=`ulimit -H -n`
 | 
			
		||||
    if [ $? -eq 0 ] ; then
 | 
			
		||||
        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
 | 
			
		||||
            MAX_FD="$MAX_FD_LIMIT"
 | 
			
		||||
        fi
 | 
			
		||||
        ulimit -n $MAX_FD
 | 
			
		||||
        if [ $? -ne 0 ] ; then
 | 
			
		||||
            warn "Could not set maximum file descriptor limit: $MAX_FD"
 | 
			
		||||
        fi
 | 
			
		||||
    else
 | 
			
		||||
        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# For Darwin, add options to specify how the application appears in the dock
 | 
			
		||||
if $darwin; then
 | 
			
		||||
    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# For Cygwin or MSYS, switch paths to Windows format before running java
 | 
			
		||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
 | 
			
		||||
    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
 | 
			
		||||
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
 | 
			
		||||
 | 
			
		||||
    JAVACMD=`cygpath --unix "$JAVACMD"`
 | 
			
		||||
 | 
			
		||||
    # We build the pattern for arguments to be converted via cygpath
 | 
			
		||||
    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
 | 
			
		||||
    SEP=""
 | 
			
		||||
    for dir in $ROOTDIRSRAW ; do
 | 
			
		||||
        ROOTDIRS="$ROOTDIRS$SEP$dir"
 | 
			
		||||
        SEP="|"
 | 
			
		||||
    done
 | 
			
		||||
    OURCYGPATTERN="(^($ROOTDIRS))"
 | 
			
		||||
    # Add a user-defined pattern to the cygpath arguments
 | 
			
		||||
    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
 | 
			
		||||
        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
 | 
			
		||||
    fi
 | 
			
		||||
    # Now convert the arguments - kludge to limit ourselves to /bin/sh
 | 
			
		||||
    i=0
 | 
			
		||||
    for arg in "$@" ; do
 | 
			
		||||
        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
 | 
			
		||||
        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
 | 
			
		||||
 | 
			
		||||
        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
 | 
			
		||||
            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
 | 
			
		||||
        else
 | 
			
		||||
            eval `echo args$i`="\"$arg\""
 | 
			
		||||
        fi
 | 
			
		||||
        i=`expr $i + 1`
 | 
			
		||||
    done
 | 
			
		||||
    case $i in
 | 
			
		||||
        0) set -- ;;
 | 
			
		||||
        1) set -- "$args0" ;;
 | 
			
		||||
        2) set -- "$args0" "$args1" ;;
 | 
			
		||||
        3) set -- "$args0" "$args1" "$args2" ;;
 | 
			
		||||
        4) set -- "$args0" "$args1" "$args2" "$args3" ;;
 | 
			
		||||
        5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
 | 
			
		||||
        6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
 | 
			
		||||
        7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
 | 
			
		||||
        8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
 | 
			
		||||
        9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
 | 
			
		||||
    esac
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Escape application args
 | 
			
		||||
save () {
 | 
			
		||||
    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
 | 
			
		||||
    echo " "
 | 
			
		||||
}
 | 
			
		||||
APP_ARGS=`save "$@"`
 | 
			
		||||
 | 
			
		||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
 | 
			
		||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
 | 
			
		||||
 | 
			
		||||
exec "$JAVACMD" "$@"
 | 
			
		||||
							
								
								
									
										89
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
@rem
 | 
			
		||||
@rem Copyright 2015 the original author or authors.
 | 
			
		||||
@rem
 | 
			
		||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
@rem you may not use this file except in compliance with the License.
 | 
			
		||||
@rem You may obtain a copy of the License at
 | 
			
		||||
@rem
 | 
			
		||||
@rem      https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
@rem
 | 
			
		||||
@rem Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
@rem See the License for the specific language governing permissions and
 | 
			
		||||
@rem limitations under the License.
 | 
			
		||||
@rem
 | 
			
		||||
 | 
			
		||||
@if "%DEBUG%" == "" @echo off
 | 
			
		||||
@rem ##########################################################################
 | 
			
		||||
@rem
 | 
			
		||||
@rem  Gradle startup script for Windows
 | 
			
		||||
@rem
 | 
			
		||||
@rem ##########################################################################
 | 
			
		||||
 | 
			
		||||
@rem Set local scope for the variables with windows NT shell
 | 
			
		||||
if "%OS%"=="Windows_NT" setlocal
 | 
			
		||||
 | 
			
		||||
set DIRNAME=%~dp0
 | 
			
		||||
if "%DIRNAME%" == "" set DIRNAME=.
 | 
			
		||||
set APP_BASE_NAME=%~n0
 | 
			
		||||
set APP_HOME=%DIRNAME%
 | 
			
		||||
 | 
			
		||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
 | 
			
		||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
 | 
			
		||||
 | 
			
		||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 | 
			
		||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
 | 
			
		||||
 | 
			
		||||
@rem Find java.exe
 | 
			
		||||
if defined JAVA_HOME goto findJavaFromJavaHome
 | 
			
		||||
 | 
			
		||||
set JAVA_EXE=java.exe
 | 
			
		||||
%JAVA_EXE% -version >NUL 2>&1
 | 
			
		||||
if "%ERRORLEVEL%" == "0" goto execute
 | 
			
		||||
 | 
			
		||||
echo.
 | 
			
		||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 | 
			
		||||
echo.
 | 
			
		||||
echo Please set the JAVA_HOME variable in your environment to match the
 | 
			
		||||
echo location of your Java installation.
 | 
			
		||||
 | 
			
		||||
goto fail
 | 
			
		||||
 | 
			
		||||
:findJavaFromJavaHome
 | 
			
		||||
set JAVA_HOME=%JAVA_HOME:"=%
 | 
			
		||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
 | 
			
		||||
 | 
			
		||||
if exist "%JAVA_EXE%" goto execute
 | 
			
		||||
 | 
			
		||||
echo.
 | 
			
		||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
 | 
			
		||||
echo.
 | 
			
		||||
echo Please set the JAVA_HOME variable in your environment to match the
 | 
			
		||||
echo location of your Java installation.
 | 
			
		||||
 | 
			
		||||
goto fail
 | 
			
		||||
 | 
			
		||||
:execute
 | 
			
		||||
@rem Setup the command line
 | 
			
		||||
 | 
			
		||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@rem Execute Gradle
 | 
			
		||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
 | 
			
		||||
 | 
			
		||||
:end
 | 
			
		||||
@rem End local scope for the variables with windows NT shell
 | 
			
		||||
if "%ERRORLEVEL%"=="0" goto mainEnd
 | 
			
		||||
 | 
			
		||||
:fail
 | 
			
		||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
 | 
			
		||||
rem the _cmd.exe /c_ return code!
 | 
			
		||||
if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
 | 
			
		||||
exit /b 1
 | 
			
		||||
 | 
			
		||||
:mainEnd
 | 
			
		||||
if "%OS%"=="Windows_NT" endlocal
 | 
			
		||||
 | 
			
		||||
:omega
 | 
			
		||||
							
								
								
									
										3
									
								
								settings.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								settings.gradle.kts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
 | 
			
		||||
rootProject.name = "output-service-rdb-consumer"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								src/main/kotlin/Main.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/main/kotlin/Main.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
import di.databasemodule
 | 
			
		||||
import org.koin.core.context.GlobalContext.startKoin
 | 
			
		||||
 | 
			
		||||
fun main(vararg args: String) {
 | 
			
		||||
 | 
			
		||||
    startKoin {
 | 
			
		||||
        printLogger()
 | 
			
		||||
        modules(databasemodule)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										8
									
								
								src/main/kotlin/api/ApiObject.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/main/kotlin/api/ApiObject.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
package api
 | 
			
		||||
 | 
			
		||||
import com.google.gson.annotations.SerializedName
 | 
			
		||||
 | 
			
		||||
data class ApiObject(
 | 
			
		||||
    @SerializedName("tag") val tag: String,
 | 
			
		||||
    @SerializedName("probability") val probability: Double
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										10
									
								
								src/main/kotlin/config/EnvConfig.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/main/kotlin/config/EnvConfig.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
package config
 | 
			
		||||
 | 
			
		||||
data class EnvConfig (
 | 
			
		||||
    var mqHost: String = System.getenv("MQ_HOST") ?: "localhost",
 | 
			
		||||
    var mqUserName: String = System.getenv("MQ_USERNAME") ?: "rabbitmq",
 | 
			
		||||
    var mqPassWord: String = System.getenv("MQ_PASSWORD") ?: "rabbitmq",
 | 
			
		||||
    var dbJdbc: String = System.getenv("DB_JDBC") ?: "input",
 | 
			
		||||
    var dbUsername: String = System.getenv("DB_USERNAME") ?: "output",
 | 
			
		||||
    var dbPassowrd: String = System.getenv("DB_PASSOWRD") ?: "output"
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										38
									
								
								src/main/kotlin/database/DatabaseFactory.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/main/kotlin/database/DatabaseFactory.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
package database
 | 
			
		||||
 | 
			
		||||
import config.EnvConfig
 | 
			
		||||
import com.zaxxer.hikari.*
 | 
			
		||||
import kotlinx.coroutines.Dispatchers
 | 
			
		||||
import kotlinx.coroutines.withContext
 | 
			
		||||
import org.jetbrains.exposed.sql.*
 | 
			
		||||
import org.jetbrains.exposed.sql.transactions.transaction
 | 
			
		||||
 | 
			
		||||
object DatabaseFactory {
 | 
			
		||||
 | 
			
		||||
    private val envConfig = EnvConfig()
 | 
			
		||||
    private val dbUrl = envConfig.dbJdbc
 | 
			
		||||
    private val dbUser = envConfig.dbUsername
 | 
			
		||||
    private val dbPassword = envConfig.dbPassowrd
 | 
			
		||||
 | 
			
		||||
    fun init() {
 | 
			
		||||
        Database.connect(hikari())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun hikari(): HikariDataSource {
 | 
			
		||||
        val config = HikariConfig()
 | 
			
		||||
        config.driverClassName = "org.postgresql.Driver"
 | 
			
		||||
        config.jdbcUrl = dbUrl
 | 
			
		||||
        config.username = dbUser
 | 
			
		||||
        config.password = dbPassword
 | 
			
		||||
        config.maximumPoolSize = 3
 | 
			
		||||
        config.isAutoCommit = false
 | 
			
		||||
        config.transactionIsolation = "TRANSACTION_REPEATABLE_READ"
 | 
			
		||||
        config.validate()
 | 
			
		||||
        return HikariDataSource(config)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    suspend fun <T> dbQuery(block: () -> T): T =
 | 
			
		||||
        withContext(Dispatchers.IO) {
 | 
			
		||||
            transaction { block() }
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								src/main/kotlin/database/dao/ResultObjects.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/main/kotlin/database/dao/ResultObjects.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
package database.dao
 | 
			
		||||
 | 
			
		||||
import org.jetbrains.exposed.dao.id.IntIdTable
 | 
			
		||||
import org.jetbrains.exposed.sql.*
 | 
			
		||||
import org.jetbrains.exposed.sql.`java-time`.date
 | 
			
		||||
import java.time.LocalDate
 | 
			
		||||
 | 
			
		||||
object ResultObjects : IntIdTable() {
 | 
			
		||||
    val tag: Column<String> = varchar("tag", 32)
 | 
			
		||||
    val date: Column<LocalDate> = date("date").default(LocalDate.now())
 | 
			
		||||
    val probability: Column<Double> = double("probability")
 | 
			
		||||
    override val primaryKey = PrimaryKey(id, name = "PK_ResultObject_Id")
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								src/main/kotlin/database/model/ResultObject.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/main/kotlin/database/model/ResultObject.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
package database.model
 | 
			
		||||
 | 
			
		||||
import database.dao.ResultObjects
 | 
			
		||||
import org.jetbrains.exposed.dao.IntEntity
 | 
			
		||||
import org.jetbrains.exposed.dao.IntEntityClass
 | 
			
		||||
import org.jetbrains.exposed.dao.id.EntityID
 | 
			
		||||
 | 
			
		||||
class ResultObject(id: EntityID<Int>): IntEntity(id) {
 | 
			
		||||
    companion object : IntEntityClass<ResultObject>(ResultObjects)
 | 
			
		||||
    var tag by ResultObjects.tag
 | 
			
		||||
    var date by ResultObjects.date
 | 
			
		||||
    var probability by ResultObjects.probability
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								src/main/kotlin/database/service/IResultObjectService.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/main/kotlin/database/service/IResultObjectService.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
package database.service
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDate
 | 
			
		||||
import api.ApiObject
 | 
			
		||||
 | 
			
		||||
interface IResultObjectService{
 | 
			
		||||
    fun addOne(apiObject: ApiObject)
 | 
			
		||||
    suspend fun getAllResultObjects(): List<ApiObject>
 | 
			
		||||
    suspend fun getResultObjectbyTag(tag: String): ApiObject?
 | 
			
		||||
    suspend fun getResultObjectbyDate(date: LocalDate): List<ApiObject>?
 | 
			
		||||
    suspend fun getResultObjectbeforeDate(date: LocalDate): List<ApiObject>?
 | 
			
		||||
    suspend fun getResultObjectafterDate(date: LocalDate): List<ApiObject>?
 | 
			
		||||
    suspend fun getResultObjecGreaterthanProbability(probability: Double): List<ApiObject>?
 | 
			
		||||
    suspend fun getResultObjecLessthanProbability(probability: Double): List<ApiObject>?
 | 
			
		||||
    suspend fun getResultObjecEqualsProbability(probability: Double): List<ApiObject>?
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										76
									
								
								src/main/kotlin/database/service/ResultObjectService.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								src/main/kotlin/database/service/ResultObjectService.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
package database.service
 | 
			
		||||
 | 
			
		||||
import database.DatabaseFactory.dbQuery
 | 
			
		||||
import database.model.ResultObject
 | 
			
		||||
import database.dao.ResultObjects
 | 
			
		||||
import api.ApiObject
 | 
			
		||||
import org.jetbrains.exposed.sql.ResultRow
 | 
			
		||||
import org.jetbrains.exposed.sql.select
 | 
			
		||||
import org.jetbrains.exposed.sql.selectAll
 | 
			
		||||
import org.jetbrains.exposed.sql.transactions.transaction
 | 
			
		||||
import java.time.LocalDate
 | 
			
		||||
 | 
			
		||||
class ResultObjectService : IResultObjectService {
 | 
			
		||||
 | 
			
		||||
    override fun addOne(apiObject: ApiObject) {
 | 
			
		||||
        transaction {
 | 
			
		||||
            ResultObject.new {
 | 
			
		||||
                tag = apiObject.tag
 | 
			
		||||
                probability = apiObject.probability
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun getAllResultObjects(): List<ApiObject> = dbQuery {
 | 
			
		||||
        ResultObjects.selectAll().map { toResultObject(it) }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun getResultObjectbyTag(tag: String): ApiObject? = dbQuery {
 | 
			
		||||
        ResultObjects.select {
 | 
			
		||||
            (ResultObjects.tag eq tag)
 | 
			
		||||
        }.mapNotNull { toResultObject(it) }
 | 
			
		||||
            .singleOrNull()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun getResultObjectbyDate(date: LocalDate): List<ApiObject>? = dbQuery {
 | 
			
		||||
        ResultObjects.select {
 | 
			
		||||
            (ResultObjects.date eq date)
 | 
			
		||||
        }.mapNotNull { toResultObject(it) }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun getResultObjectbeforeDate(date: LocalDate): List<ApiObject>? = dbQuery {
 | 
			
		||||
        ResultObjects.select {
 | 
			
		||||
            (ResultObjects.date less  date)
 | 
			
		||||
        }.mapNotNull { toResultObject(it) }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun getResultObjectafterDate(date: LocalDate): List<ApiObject>? = dbQuery {
 | 
			
		||||
        ResultObjects.select {
 | 
			
		||||
            (ResultObjects.date greater  date)
 | 
			
		||||
        }.mapNotNull { toResultObject(it) }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun getResultObjecGreaterthanProbability(probability: Double): List<ApiObject>? = dbQuery {
 | 
			
		||||
        ResultObjects.select {
 | 
			
		||||
            (ResultObjects.probability greater  probability)
 | 
			
		||||
        }.mapNotNull { toResultObject(it) }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun getResultObjecLessthanProbability(probability: Double): List<ApiObject>? = dbQuery {
 | 
			
		||||
        ResultObjects.select {
 | 
			
		||||
            (ResultObjects.probability less  probability)
 | 
			
		||||
        }.mapNotNull { toResultObject(it) }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override suspend fun getResultObjecEqualsProbability(probability: Double): List<ApiObject>? = dbQuery {
 | 
			
		||||
        ResultObjects.select {
 | 
			
		||||
            (ResultObjects.probability eq  probability)
 | 
			
		||||
        }.mapNotNull { toResultObject(it) }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun toResultObject(row: ResultRow): ApiObject =
 | 
			
		||||
        ApiObject(
 | 
			
		||||
            tag = row[ResultObjects.tag],
 | 
			
		||||
            probability = row[ResultObjects.probability]
 | 
			
		||||
        )
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										9
									
								
								src/main/kotlin/di/DatabaseModule.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/main/kotlin/di/DatabaseModule.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
package di
 | 
			
		||||
 | 
			
		||||
import database.service.IResultObjectService
 | 
			
		||||
import database.service.ResultObjectService
 | 
			
		||||
import org.koin.dsl.module
 | 
			
		||||
 | 
			
		||||
val databasemodule = module(createdAtStart = true) {
 | 
			
		||||
    single { ResultObjectService() as IResultObjectService }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user