diff --git a/rentacar/.gitignore b/rentacar/.gitignore
new file mode 100644
index 0000000..549e00a
--- /dev/null
+++ b/rentacar/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/rentacar/mvnw b/rentacar/mvnw
new file mode 100644
index 0000000..8a8fb22
--- /dev/null
+++ b/rentacar/mvnw
@@ -0,0 +1,316 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you 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.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+# M2_HOME - location of maven2's installed home dir
+# MAVEN_OPTS - parameters passed to the Java VM when running Maven
+# e.g. to debug Maven itself, use
+# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+ if [ -f /usr/local/etc/mavenrc ] ; then
+ . /usr/local/etc/mavenrc
+ fi
+
+ if [ -f /etc/mavenrc ] ; then
+ . /etc/mavenrc
+ fi
+
+ if [ -f "$HOME/.mavenrc" ] ; then
+ . "$HOME/.mavenrc"
+ fi
+
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ MINGW*) mingw=true;;
+ Darwin*) darwin=true
+ # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+ # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+ if [ -z "$JAVA_HOME" ]; then
+ if [ -x "/usr/libexec/java_home" ]; then
+ export JAVA_HOME="`/usr/libexec/java_home`"
+ else
+ export JAVA_HOME="/Library/Java/Home"
+ fi
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=`java-config --jre-home`
+ fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ 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
+
+ saveddir=`pwd`
+
+ M2_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ M2_HOME=`cd "$M2_HOME" && pwd`
+
+ cd "$saveddir"
+ # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --unix "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME="`(cd "$M2_HOME"; pwd)`"
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+ javaExecutable="`which javac`"
+ if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+ # readlink(1) is not available as standard on Solaris 10.
+ readLink=`which readlink`
+ if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+ if $darwin ; then
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+ else
+ javaExecutable="`readlink -f \"$javaExecutable\"`"
+ fi
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+ JAVA_HOME="$javaHome"
+ export JAVA_HOME
+ fi
+ fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+ 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
+ else
+ JAVACMD="`\\unset -f command; \\command -v java`"
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." >&2
+ echo " We cannot execute $JAVACMD" >&2
+ exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+ echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+ if [ -z "$1" ]
+ then
+ echo "Path not specified to find_maven_basedir"
+ return 1
+ fi
+
+ basedir="$1"
+ wdir="$1"
+ while [ "$wdir" != '/' ] ; do
+ if [ -d "$wdir"/.mvn ] ; then
+ basedir=$wdir
+ break
+ fi
+ # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+ if [ -d "${wdir}" ]; then
+ wdir=`cd "$wdir/.."; pwd`
+ fi
+ # end of workaround
+ done
+ echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+ if [ -f "$1" ]; then
+ echo "$(tr -s '\n' ' ' < "$1")"
+ fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+ exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found .mvn/wrapper/maven-wrapper.jar"
+ fi
+else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+ fi
+ if [ -n "$MVNW_REPOURL" ]; then
+ jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+ else
+ jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+ fi
+ while IFS="=" read key value; do
+ case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+ esac
+ done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Downloading from: $jarUrl"
+ fi
+ wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+ if $cygwin; then
+ wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+ fi
+
+ if command -v wget > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found wget ... using wget"
+ fi
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+ else
+ wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+ fi
+ elif command -v curl > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found curl ... using curl"
+ fi
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ curl -o "$wrapperJarPath" "$jarUrl" -f
+ else
+ curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+ fi
+
+ else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Falling back to using Java to download"
+ fi
+ javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+ # For Cygwin, switch paths to Windows format before running javac
+ if $cygwin; then
+ javaClass=`cygpath --path --windows "$javaClass"`
+ fi
+ if [ -e "$javaClass" ]; then
+ if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Compiling MavenWrapperDownloader.java ..."
+ fi
+ # Compiling the Java class
+ ("$JAVA_HOME/bin/javac" "$javaClass")
+ fi
+ if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ # Running the downloader
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Running MavenWrapperDownloader.java ..."
+ fi
+ ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+ fi
+ fi
+ fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+ echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --path --windows "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+ [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+ MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+ $MAVEN_OPTS \
+ $MAVEN_DEBUG_OPTS \
+ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+ "-Dmaven.home=${M2_HOME}" \
+ "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/rentacar/mvnw.cmd b/rentacar/mvnw.cmd
new file mode 100644
index 0000000..1d8ab01
--- /dev/null
+++ b/rentacar/mvnw.cmd
@@ -0,0 +1,188 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. 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,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+ IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Found %WRAPPER_JAR%
+ )
+) else (
+ if not "%MVNW_REPOURL%" == "" (
+ SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+ )
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Couldn't find %WRAPPER_JAR%, downloading it ...
+ echo Downloading from: %DOWNLOAD_URL%
+ )
+
+ powershell -Command "&{"^
+ "$webclient = new-object System.Net.WebClient;"^
+ "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+ "}"^
+ "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+ "}"
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Finished downloading %WRAPPER_JAR%
+ )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% ^
+ %JVM_CONFIG_MAVEN_PROPS% ^
+ %MAVEN_OPTS% ^
+ %MAVEN_DEBUG_OPTS% ^
+ -classpath %WRAPPER_JAR% ^
+ "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
+ %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%"=="on" pause
+
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
+
+cmd /C exit /B %ERROR_CODE%
diff --git a/rentacar/pom.xml b/rentacar/pom.xml
new file mode 100644
index 0000000..26bc9b2
--- /dev/null
+++ b/rentacar/pom.xml
@@ -0,0 +1,97 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.6.3
+
+
+ com.turkcell
+ rentacar
+ 0.0.1-SNAPSHOT
+ rentacar
+ demo northwind
+
+ 11
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+ true
+
+
+ io.springfox
+ springfox-swagger2
+ 2.9.2
+
+
+ io.springfox
+ springfox-swagger-ui
+ 2.9.2
+
+
+ org.postgresql
+ postgresql
+ runtime
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springdoc
+ springdoc-openapi-ui
+ 1.6.6
+
+
+
+ org.modelmapper
+ modelmapper
+ 2.3.9
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
+
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/RentacarApplication.java b/rentacar/src/main/java/com/turkcell/rentacar/RentacarApplication.java
new file mode 100644
index 0000000..8610d2d
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/RentacarApplication.java
@@ -0,0 +1,60 @@
+package com.turkcell.rentacar;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.modelmapper.ModelMapper;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.FieldError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import com.turkcell.rentacar.core.utilities.results.ErrorDataResult;
+import com.turkcell.rentacar.exceptions.businessExceptions.BusinessException;
+
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@SpringBootApplication
+@EnableSwagger2
+@RestControllerAdvice
+public class RentacarApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(RentacarApplication.class, args);
+ }
+
+ @Bean
+ public ModelMapper getModelMapper() {
+ return new ModelMapper();
+ }
+
+ @Bean
+ public BusinessException getBusinessException() {
+ return new BusinessException();
+ }
+
+ @ExceptionHandler
+ @ResponseStatus(code = HttpStatus.BAD_REQUEST)
+ public ErrorDataResult handleValidationException(
+ MethodArgumentNotValidException argumentNotValidException) {
+ Map validationErrors = new HashMap();
+ for (FieldError fieldError : argumentNotValidException.getBindingResult().getFieldErrors()) {
+ validationErrors.put(fieldError.getField(), fieldError.getDefaultMessage());
+ }
+ ErrorDataResult errorResults = new ErrorDataResult<>(validationErrors, "Validate.Error");
+ return errorResults;
+ }
+
+ @ExceptionHandler
+ @ResponseStatus(code = HttpStatus.BAD_REQUEST)
+ public ErrorDataResult handleBusinessException(BusinessException businessException) {
+ ErrorDataResult errorResults = new ErrorDataResult<>(businessException.getMessage(), "Validate.Error");
+ return errorResults;
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/AdditionalProductsController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/AdditionalProductsController.java
new file mode 100644
index 0000000..70def4a
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/AdditionalProductsController.java
@@ -0,0 +1,54 @@
+package com.turkcell.rentacar.api.controllers;
+
+import java.util.List;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.turkcell.rentacar.business.abstracts.AdditionalProductService;
+import com.turkcell.rentacar.business.dtos.listDtos.AdditionalProductListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateAdditionalProductRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteAdditionalProductRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateAdditionalProductRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+@RestController
+@RequestMapping("/api/additionalProducts")
+public class AdditionalProductsController {
+
+ private AdditionalProductService additionalProductService;
+
+ @Autowired
+ public AdditionalProductsController(AdditionalProductService additionalProductService) {
+ this.additionalProductService = additionalProductService;
+ }
+
+ @PostMapping("/add")
+ public Result add(@RequestBody @Valid CreateAdditionalProductRequest createAdditionalProductRequest) {
+ return this.additionalProductService.add(createAdditionalProductRequest);
+ }
+
+ @PutMapping("/update")
+ public Result update(@RequestBody @Valid UpdateAdditionalProductRequest updateAdditionalProductRequest) {
+ return this.additionalProductService.update(updateAdditionalProductRequest);
+ }
+
+ @DeleteMapping("/delete")
+ public Result delete(@RequestBody @Valid DeleteAdditionalProductRequest deleteAdditionalProductRequest) {
+ return this.additionalProductService.delete(deleteAdditionalProductRequest);
+ }
+
+ @GetMapping("/getAll")
+ public DataResult> getAll() {
+ return this.additionalProductService.getAll();
+ }
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/BrandsController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/BrandsController.java
new file mode 100644
index 0000000..f3ae8bf
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/BrandsController.java
@@ -0,0 +1,51 @@
+package com.turkcell.rentacar.api.controllers;
+
+import com.turkcell.rentacar.business.abstracts.BrandService;
+import com.turkcell.rentacar.business.dtos.listDtos.BrandListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateBrandRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteBrandRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateBrandRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+import javax.validation.Valid;
+
+@RestController
+@RequestMapping("/api/brands")
+public class BrandsController {
+
+ private BrandService brandService;
+
+ public BrandsController(BrandService brandService) {
+ this.brandService = brandService;
+ }
+
+ @GetMapping("/getAll")
+ public DataResult> getAll() {
+ return this.brandService.getAll();
+ }
+
+ @PostMapping("/add")
+ public Result save(@RequestBody @Valid CreateBrandRequest createBrandRequest) {
+ return this.brandService.add(createBrandRequest);
+ }
+
+ @GetMapping("/getById")
+ public DataResult getById(@RequestParam int id) {
+ return this.brandService.getById(id);
+ }
+
+ @PostMapping("/update")
+ public Result update(@RequestBody @Valid UpdateBrandRequest updateBrandRequest) {
+ return this.brandService.update(updateBrandRequest);
+ }
+
+ @DeleteMapping("/delete")
+ public Result delete(@RequestBody @Valid DeleteBrandRequest deleteBrandRequest) {
+ return this.brandService.delete(deleteBrandRequest);
+ }
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CarDamagesController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CarDamagesController.java
new file mode 100644
index 0000000..cac3eb5
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CarDamagesController.java
@@ -0,0 +1,55 @@
+package com.turkcell.rentacar.api.controllers;
+
+import java.util.List;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.turkcell.rentacar.business.abstracts.CarDamageService;
+import com.turkcell.rentacar.business.dtos.listDtos.CarDamageListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCarDamageRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCarDamageRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCarDamageRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+@RestController
+@RequestMapping("/api/carDamages")
+public class CarDamagesController {
+
+ private CarDamageService carDamageService;
+
+ @Autowired
+ public CarDamagesController(CarDamageService carDamageService) {
+ this.carDamageService = carDamageService;
+ }
+
+ @PostMapping("/add")
+ public Result add(@RequestBody @Valid CreateCarDamageRequest createCarDamageRequest) {
+ return this.carDamageService.add(createCarDamageRequest);
+ }
+
+ @PutMapping("/update")
+ public Result update(@RequestBody @Valid UpdateCarDamageRequest updateCarDamageRequest) {
+ return this.carDamageService.update(updateCarDamageRequest);
+ }
+
+ @DeleteMapping("/delete")
+ public Result delete(@RequestBody @Valid DeleteCarDamageRequest deleteCarDamageRequest) {
+ return this.carDamageService.delete(deleteCarDamageRequest);
+ }
+
+ @GetMapping("/getAll")
+ public DataResult> getAll() {
+ return this.carDamageService.getAll();
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CarMaintenancesController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CarMaintenancesController.java
new file mode 100644
index 0000000..2287938
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CarMaintenancesController.java
@@ -0,0 +1,68 @@
+package com.turkcell.rentacar.api.controllers;
+
+import java.util.List;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.turkcell.rentacar.business.abstracts.CarMaintenanceService;
+import com.turkcell.rentacar.business.dtos.getDtos.CarMaintenanceGetDto;
+import com.turkcell.rentacar.business.dtos.listDtos.CarMaintenanceListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCarMaintenanceRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCarMaintenanceRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCarMaintenanceRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+@RestController
+@RequestMapping("/api/carMaintenances")
+public class CarMaintenancesController {
+
+ private CarMaintenanceService carMaintenanceService;
+
+ @Autowired
+ public CarMaintenancesController(CarMaintenanceService carMaintenanceService) {
+ this.carMaintenanceService = carMaintenanceService;
+ }
+
+ @GetMapping("/getAll")
+ public DataResult> getAll() {
+ return this.carMaintenanceService.getAll();
+ }
+
+ @GetMapping("/getCarMaintenanceDetailsByCarMaintenanceId")
+ public DataResult getCarMaintenanceDetailsByCarMaintenanceId(
+ @RequestParam int carMaintenanceId) {
+ return this.carMaintenanceService.getCarMaintenanceDetailsByCarMaintenanceId(carMaintenanceId);
+ }
+
+ @PostMapping("/add")
+ public Result add(@RequestBody @Valid CreateCarMaintenanceRequest createCarMaintenanceRequest) {
+ return this.carMaintenanceService.add(createCarMaintenanceRequest);
+ }
+
+ @PutMapping("/update")
+ public Result update(@RequestBody @Valid UpdateCarMaintenanceRequest updateCarMaintenanceRequest) {
+ return this.carMaintenanceService.update(updateCarMaintenanceRequest);
+ }
+
+ @DeleteMapping("/delete")
+ public Result delete(@RequestBody @Valid DeleteCarMaintenanceRequest deleteCarMaintenanceRequest) {
+ return this.carMaintenanceService.delete(deleteCarMaintenanceRequest);
+ }
+
+ @GetMapping("/checkIfCarIsAlreadyInMaintenance")
+ public Result checkIfCarIsAlreadyInMaintenance(@RequestParam int carId) {
+ return this.carMaintenanceService.checkIfCarIsAlreadyInMaintenance(carId);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CarsController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CarsController.java
new file mode 100644
index 0000000..2405b02
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CarsController.java
@@ -0,0 +1,100 @@
+package com.turkcell.rentacar.api.controllers;
+
+import java.util.List;
+
+import javax.transaction.Transactional;
+import javax.validation.Valid;
+
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.turkcell.rentacar.business.abstracts.CarService;
+import com.turkcell.rentacar.business.dtos.listDtos.CarListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCarRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCarRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateBrandToCarRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCarKilometerInfoRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCarRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateColorToCarRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+@RestController
+@RequestMapping("/api/cars")
+public class CarsController {
+
+ private CarService carService;
+
+ public CarsController(CarService carService) {
+ this.carService = carService;
+ }
+
+ @GetMapping("/getAll")
+ public DataResult> getAll() {
+ return this.carService.getAll();
+ }
+
+ @GetMapping("/getById")
+ public DataResult getById(@RequestParam(value = "id") int id) {
+ return this.carService.getById(id);
+ }
+
+ @PostMapping("/add")
+ public Result add(@RequestBody @Valid CreateCarRequest createCarRequest) {
+ return this.carService.add(createCarRequest);
+ }
+
+ @DeleteMapping("/delete")
+ public Result delete(@RequestBody @Valid DeleteCarRequest deleteCarRequest) {
+ return this.carService.delete(deleteCarRequest);
+ }
+
+ @PostMapping("/update")
+ public Result update(@RequestBody @Valid UpdateCarRequest updateCarRequest) {
+ return this.carService.update(updateCarRequest);
+ }
+
+ @Transactional
+ @PostMapping("/updateKilometerInfo")
+ public Result updateKilometerInfo(@RequestBody @Valid UpdateCarKilometerInfoRequest updateCarKilometerInfoRequest) {
+ return this.carService.updateKilometerInfo(updateCarKilometerInfoRequest);
+ }
+
+ @Transactional
+ @PostMapping("/updateColor")
+ public Result updateColor(
+ @RequestBody @Valid UpdateColorToCarRequest updateColorToCarRequest) {
+ return this.carService.updateColor(updateColorToCarRequest);
+ }
+
+ @Transactional
+ @PostMapping("/updateBrand")
+ public Result updateBrand(@RequestBody @Valid UpdateBrandToCarRequest updateBrandToCarRequest) {
+ return this.carService.updateBrand(updateBrandToCarRequest);
+ }
+
+ @GetMapping("/findByDailyPriceLessThanEqual")
+ public DataResult> findByDailyPriceLessThanEqual(
+ @RequestParam(value = "dailyPrice") double dailyPrice) {
+ return this.carService.findByDailyPriceLessThanEqual(dailyPrice);
+ }
+
+
+ @GetMapping("/getAllPaged")
+ public DataResult> getAllPaged(@RequestParam(value = "pageNo") int pageNo,
+ @RequestParam(value = "pageSize") int pageSize) {
+ return this.carService.getAllPaged(pageNo, pageSize);
+ }
+
+ @GetMapping("/getAllSorted")
+ public DataResult> getAllSorted(@RequestParam(value = "sort") boolean sort) {
+ return this.carService.getAllSorted(sort);
+
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/ColorsController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/ColorsController.java
new file mode 100644
index 0000000..067b50d
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/ColorsController.java
@@ -0,0 +1,51 @@
+package com.turkcell.rentacar.api.controllers;
+
+import com.turkcell.rentacar.business.abstracts.ColorService;
+import com.turkcell.rentacar.business.dtos.listDtos.ColorListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateColorRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteColorRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateColorRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+import javax.validation.Valid;
+
+@RestController
+@RequestMapping("/api/colors")
+public class ColorsController {
+
+ private ColorService colorService;
+
+ public ColorsController(ColorService colorService) {
+ this.colorService = colorService;
+ }
+
+ @GetMapping("/getAll")
+ public DataResult> getAll() {
+ return this.colorService.getAll();
+ }
+
+ @PostMapping("/add")
+ public void save(@RequestBody @Valid CreateColorRequest createColorRequest) {
+ this.colorService.add(createColorRequest);
+ }
+
+ @GetMapping("/getById")
+ public DataResult getById(@RequestParam int id) {
+ return this.colorService.getById(id);
+ }
+
+ @PostMapping("/update")
+ public Result update(@RequestBody @Valid UpdateColorRequest updateColorRequest) {
+ return this.colorService.update(updateColorRequest);
+ }
+
+ @DeleteMapping("/delete")
+ public Result delete(@RequestBody @Valid DeleteColorRequest deleteColorRequest) {
+ return this.colorService.delete(deleteColorRequest);
+ }
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CorporateCustomersController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CorporateCustomersController.java
new file mode 100644
index 0000000..1f682f6
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CorporateCustomersController.java
@@ -0,0 +1,45 @@
+package com.turkcell.rentacar.api.controllers;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.turkcell.rentacar.business.abstracts.CorporateCustomerService;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCorporateCustomerRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCorporateCustomerRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCorporateCustomerRequest;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+@RestController
+@RequestMapping("/api/corporateCustomers")
+public class CorporateCustomersController {
+
+ CorporateCustomerService corporateCustomerService;
+
+ @Autowired
+ public CorporateCustomersController(CorporateCustomerService corporateCustomerService) {
+ this.corporateCustomerService = corporateCustomerService;
+ }
+
+ @PostMapping("/add")
+ Result add(@RequestBody @Valid CreateCorporateCustomerRequest createCorporateCustomerRequest) {
+ return this.corporateCustomerService.add(createCorporateCustomerRequest);
+ }
+
+ @PutMapping("/update")
+ Result update(@RequestBody @Valid UpdateCorporateCustomerRequest updateCorporateCustomerRequest) {
+ return this.corporateCustomerService.update(updateCorporateCustomerRequest);
+ }
+
+ @DeleteMapping("/delete")
+ Result delete(@RequestBody @Valid DeleteCorporateCustomerRequest deleteCorporateCustomerRequest) {
+ return this.corporateCustomerService.delete(deleteCorporateCustomerRequest);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CreditCardsController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CreditCardsController.java
new file mode 100644
index 0000000..aa2e253
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CreditCardsController.java
@@ -0,0 +1,58 @@
+package com.turkcell.rentacar.api.controllers;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.turkcell.rentacar.business.abstracts.CreditCardService;
+import com.turkcell.rentacar.business.dtos.getDtos.CreditCardGetDto;
+import com.turkcell.rentacar.business.dtos.listDtos.CreditCardListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCreditCardRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCreditCardRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCreditCardRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+@RestController
+@RequestMapping("/api/creditCards")
+public class CreditCardsController {
+
+ private CreditCardService creditCardService;
+
+ @Autowired
+ public CreditCardsController(CreditCardService creditCardService) {
+ this.creditCardService = creditCardService;
+ }
+
+ @PostMapping("/add")
+ public Result add(CreateCreditCardRequest createCreditCardRequest) {
+ return this.creditCardService.add(createCreditCardRequest);
+ }
+
+ @PutMapping("/update")
+ public Result update(UpdateCreditCardRequest updateCreditCardRequest) {
+ return this.creditCardService.update(updateCreditCardRequest);
+ }
+
+ @DeleteMapping("/delete")
+ public Result delete(DeleteCreditCardRequest deleteCreditCardRequest) {
+ return this.creditCardService.delete(deleteCreditCardRequest);
+ }
+
+ @GetMapping("/getAll")
+ public DataResult> getAll() {
+ return this.creditCardService.getAll();
+ }
+
+ @GetMapping("/getById")
+ public DataResult getById(int creditCardId) {
+ return this.creditCardService.getById(creditCardId);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CustomersController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CustomersController.java
new file mode 100644
index 0000000..eaded18
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/CustomersController.java
@@ -0,0 +1,30 @@
+package com.turkcell.rentacar.api.controllers;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.turkcell.rentacar.business.abstracts.CustomerService;
+import com.turkcell.rentacar.business.dtos.listDtos.CustomerListDto;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+
+@RestController
+@RequestMapping("/api/customers")
+public class CustomersController {
+
+ private CustomerService customerService;
+
+ @Autowired
+ public CustomersController(CustomerService customerService) {
+ this.customerService = customerService;
+ }
+
+ @GetMapping("/getAll")
+ public DataResult> getAll() {
+ return this.customerService.getAll();
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/IndividualCustomersController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/IndividualCustomersController.java
new file mode 100644
index 0000000..987961a
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/IndividualCustomersController.java
@@ -0,0 +1,45 @@
+package com.turkcell.rentacar.api.controllers;
+
+import com.turkcell.rentacar.business.requests.createRequests.CreateIndividualCustomerRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteIndividualCustomerRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateIndividualCustomerRequest;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.turkcell.rentacar.business.abstracts.IndividualCustomerService;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+@RestController
+@RequestMapping("/api/individualCustomers")
+public class IndividualCustomersController {
+
+ private IndividualCustomerService individualCustomerService;
+
+ @Autowired
+ public IndividualCustomersController(IndividualCustomerService individualCustomerService) {
+ this.individualCustomerService = individualCustomerService;
+ }
+
+ @PostMapping("/add")
+ public Result add(@RequestBody @Valid CreateIndividualCustomerRequest createIndividualCustomerRequest) {
+ return this.individualCustomerService.add(createIndividualCustomerRequest);
+ }
+
+ @PutMapping("/update")
+ public Result update(@RequestBody @Valid UpdateIndividualCustomerRequest updateIndividualCustomerRequest) {
+ return this.individualCustomerService.update(updateIndividualCustomerRequest);
+ }
+
+ @DeleteMapping("/delete")
+ public Result delete(@RequestBody @Valid DeleteIndividualCustomerRequest deleteIndividualCustomerRequest) {
+ return this.individualCustomerService.delete(deleteIndividualCustomerRequest);
+ }
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/InvoicesController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/InvoicesController.java
new file mode 100644
index 0000000..8397391
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/InvoicesController.java
@@ -0,0 +1,79 @@
+package com.turkcell.rentacar.api.controllers;
+
+import java.time.LocalDate;
+import java.util.List;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.turkcell.rentacar.business.abstracts.InvoiceService;
+import com.turkcell.rentacar.business.dtos.listDtos.InvioceListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateInvoiceRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteInvoiceRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateInvoiceRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.entities.concretes.OrderedAdditionalProduct;
+
+@RestController
+@RequestMapping("/api/invoices")
+public class InvoicesController {
+
+ private InvoiceService invoicesService;
+
+ @Autowired
+ public InvoicesController(InvoiceService invoicesService) {
+ this.invoicesService = invoicesService;
+ }
+
+ @PostMapping("/add")
+ public Result add(@RequestBody @Valid CreateInvoiceRequest createInvoiceRequest) {
+ return this.invoicesService.add(createInvoiceRequest);
+ }
+
+ @PostMapping("/update")
+ public Result update(@RequestBody @Valid UpdateInvoiceRequest updateInvoiceRequest) {
+ return this.invoicesService.update(updateInvoiceRequest);
+ }
+
+ @PostMapping("/delete")
+ public Result delete(@RequestBody @Valid DeleteInvoiceRequest deleteInvoiceRequest) {
+ return this.invoicesService.delete(deleteInvoiceRequest);
+ }
+
+ @GetMapping("/getAll")
+ public DataResult> getAll() {
+ return this.invoicesService.getAll();
+ }
+
+ @GetMapping("/getByRentId")
+ public DataResult getByRentId(@RequestParam String rentId) {
+ return this.invoicesService.getByRentId(rentId);
+ }
+
+ @GetMapping("/getOrderedAdditionalProductByRentId")
+ public DataResult> getOrderedAdditionalProductByRentId(@RequestParam String rentId) {
+ return this.invoicesService.getOrderedAdditionalProductByRentId(rentId);
+ }
+
+ @GetMapping("/getByUserId")
+ public DataResult> getByUserId(@RequestParam int userId) {
+ return this.invoicesService.getByUserId(userId);
+ }
+
+ @GetMapping("/getAllByBetweenStartDateAndEndDate")
+ public DataResult> getAllByBetweenStartDateAndEndDate(
+ @DateTimeFormat(iso = DateTimeFormat.ISO.DATE, pattern = "yyyy-MM-dd") @RequestParam("startDate") LocalDate startDate,
+ @DateTimeFormat(iso = DateTimeFormat.ISO.DATE, pattern = "yyyy-MM-dd") @RequestParam("endDate") LocalDate endDate) {
+ return this.invoicesService.getAllByBetweenStartDateAndEndDate(startDate, endDate);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/OrderedAdditionalProductsController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/OrderedAdditionalProductsController.java
new file mode 100644
index 0000000..82c5110
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/OrderedAdditionalProductsController.java
@@ -0,0 +1,73 @@
+package com.turkcell.rentacar.api.controllers;
+
+import java.util.List;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.turkcell.rentacar.business.abstracts.OrderedAdditionalProductService;
+import com.turkcell.rentacar.business.dtos.listDtos.OrderedAdditionalProductListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateOrderedAdditionalProductRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteOrderedAdditionalProductRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateOrderedAdditionalProductRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+@RestController
+@RequestMapping("/api/orderedAdditionalProducts")
+public class OrderedAdditionalProductsController {
+
+ OrderedAdditionalProductService orderedAdditionalProductService;
+
+ @Autowired
+ public OrderedAdditionalProductsController(OrderedAdditionalProductService orderedAdditionalProductService) {
+ this.orderedAdditionalProductService = orderedAdditionalProductService;
+ }
+
+ @PostMapping("/add")
+ public Result add(@RequestBody @Valid CreateOrderedAdditionalProductRequest createOrderedAdditionalProductRequest) {
+ return this.orderedAdditionalProductService.add(createOrderedAdditionalProductRequest);
+ }
+
+ @PutMapping("/update")
+ public Result update(
+ @RequestBody @Valid UpdateOrderedAdditionalProductRequest updateOrderedAdditionalProductRequest) {
+ return this.orderedAdditionalProductService.update(updateOrderedAdditionalProductRequest);
+ }
+
+ @DeleteMapping("/delete")
+ public Result delete(
+ @RequestBody @Valid DeleteOrderedAdditionalProductRequest deleteOrderedAdditionalProductRequest) {
+ return this.orderedAdditionalProductService.delete(deleteOrderedAdditionalProductRequest);
+ }
+
+ @GetMapping("/getAll")
+ public DataResult> getAll() {
+ return this.orderedAdditionalProductService.getAll();
+ }
+
+ @GetMapping("/checkIfRentExists")
+ public Result checkIfRentExists(@RequestParam String rentId) {
+ return this.orderedAdditionalProductService.checkIfRentExists(rentId);
+ }
+
+ @GetMapping("/getByRentId")
+ public DataResult> getByRentId(@RequestParam String rentId) {
+ return this.orderedAdditionalProductService.getByRentId(rentId);
+ }
+
+ @GetMapping("/calculateOrderedAdditionalPrice")
+ public DataResult calculateOrderedAdditionalPrice(@RequestParam String rentId) {
+ return this.orderedAdditionalProductService.calculateOrderedAdditionalPrice(rentId);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/PaymentsController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/PaymentsController.java
new file mode 100644
index 0000000..ee4260d
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/PaymentsController.java
@@ -0,0 +1,45 @@
+package com.turkcell.rentacar.api.controllers;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.turkcell.rentacar.business.abstracts.PaymentService;
+import com.turkcell.rentacar.business.requests.createRequests.CreateMakePaymentRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeletePaymentRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdatePaymentRequest;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+@RestController
+@RequestMapping("/api/payments")
+public class PaymentsController {
+
+ private PaymentService paymentService;
+
+ @Autowired
+ public PaymentsController(PaymentService paymentService) {
+ this.paymentService = paymentService;
+ }
+
+ @PostMapping("/add")
+ public Result add(@RequestBody @Valid CreateMakePaymentRequest createMakePaymentRequest) {
+ return this.paymentService.add(createMakePaymentRequest);
+ }
+
+ @PutMapping("/update")
+ public Result update(@RequestBody @Valid UpdatePaymentRequest updatePaymentRequest) {
+ return this.paymentService.update(updatePaymentRequest);
+ }
+
+ @DeleteMapping("/delete")
+ public Result delete(@RequestBody @Valid DeletePaymentRequest deletePaymentRequest) {
+ return this.paymentService.delete(deletePaymentRequest);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/RentsController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/RentsController.java
new file mode 100644
index 0000000..7e1c724
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/RentsController.java
@@ -0,0 +1,95 @@
+package com.turkcell.rentacar.api.controllers;
+
+import java.util.List;
+
+import javax.transaction.Transactional;
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.turkcell.rentacar.business.abstracts.RentService;
+import com.turkcell.rentacar.business.dtos.getDtos.RentGetDto;
+import com.turkcell.rentacar.business.dtos.listDtos.RentListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateRentRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteRentRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateDeliveryDateToRentRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateEndedKilometerInfoRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateRentRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+@RestController
+@RequestMapping("/api/rents")
+public class RentsController {
+
+ private RentService rentService;
+
+ @Autowired
+ public RentsController(RentService rentService) {
+ this.rentService = rentService;
+ }
+
+ @PostMapping("/addCorporateCustomer")
+ public Result addCorporateCustomer(@RequestBody @Valid CreateRentRequest createRentRequest) {
+ return this.rentService.addCorporateCustomer(createRentRequest);
+
+ }
+
+ @PostMapping("/addIndividualCustomer")
+ public DataResult addIndividualCustomer(@RequestBody @Valid CreateRentRequest createRentRequest) {
+ return this.rentService.addIndividualCustomer(createRentRequest);
+ }
+
+ @PutMapping("/update")
+ public Result update(@RequestBody @Valid UpdateRentRequest updateRentRequest) {
+ return this.rentService.update(updateRentRequest);
+ }
+
+ @Transactional
+ @PostMapping("/updateEndedKilometer")
+ public Result updateEndedKilometer(
+ @RequestBody @Valid UpdateEndedKilometerInfoRequest updateEndedKilometerInfoRequest) {
+ return this.rentService.updateEndedKilometer(updateEndedKilometerInfoRequest);
+ }
+
+ @Transactional
+ @PostMapping("/updateDeliveryDate")
+ public Result updateDeliveryDate(
+ @RequestBody @Valid UpdateDeliveryDateToRentRequest updateDeliveryDateToRentRequest) {
+ return this.rentService.updateDeliveryDate(updateDeliveryDateToRentRequest);
+ }
+
+ @DeleteMapping("/delete")
+ public Result delete(@RequestBody @Valid DeleteRentRequest deleteRentRequest) {
+ return this.rentService.delete(deleteRentRequest);
+ }
+
+ @GetMapping("/getAll")
+ public DataResult> getAll() {
+ return this.rentService.getAll();
+ }
+
+ @GetMapping("/getRentDetailsByRentId")
+ public DataResult getRentDetailsByRentId(@RequestParam String rentId) {
+ return this.rentService.getRentDetailsByRentId(rentId);
+ }
+
+ @GetMapping("/getByCarId")
+ public DataResult> getByCarId(int carId) {
+ return this.rentService.getByCarId(carId);
+ }
+
+ @GetMapping("/checkIfCarAlreadyInRent")
+ public Result checkIfCarAlreadyInRent(@RequestParam int carId) {
+ return this.rentService.checkIfCarAlreadyInRent(carId);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/UsersController.java b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/UsersController.java
new file mode 100644
index 0000000..433879b
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/api/controllers/UsersController.java
@@ -0,0 +1,30 @@
+package com.turkcell.rentacar.api.controllers;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.turkcell.rentacar.business.abstracts.UserService;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateUserRequest;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+@RestController
+@RequestMapping("/api/users")
+public class UsersController {
+
+ private UserService userService;
+
+ @Autowired
+ public UsersController(UserService userService) {
+ this.userService = userService;
+ }
+
+ @PutMapping("/update")
+ public Result update(@RequestBody @Valid UpdateUserRequest updateUserRequest) {
+ return this.userService.update(updateUserRequest);
+ }
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/AdditionalProductService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/AdditionalProductService.java
new file mode 100644
index 0000000..502ca7b
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/AdditionalProductService.java
@@ -0,0 +1,22 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import java.util.List;
+
+import com.turkcell.rentacar.business.dtos.listDtos.AdditionalProductListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateAdditionalProductRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteAdditionalProductRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateAdditionalProductRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+public interface AdditionalProductService {
+
+ Result add(CreateAdditionalProductRequest createAdditionalProductRequest);
+
+ Result update(UpdateAdditionalProductRequest updateAdditionalProductRequest);
+
+ Result delete(DeleteAdditionalProductRequest deleteAdditionalProductRequest);
+
+ DataResult> getAll();
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/BrandService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/BrandService.java
new file mode 100644
index 0000000..607e6ed
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/BrandService.java
@@ -0,0 +1,23 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import com.turkcell.rentacar.business.dtos.listDtos.BrandListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateBrandRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteBrandRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateBrandRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+import java.util.List;
+
+public interface BrandService {
+ DataResult> getAll();
+
+ DataResult getById(int id);
+
+ Result add(CreateBrandRequest createBrandRequest);
+
+ Result update(UpdateBrandRequest updateBrandRequest);
+
+ Result delete(DeleteBrandRequest deleteBrandRequest);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CarDamageService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CarDamageService.java
new file mode 100644
index 0000000..ef838f1
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CarDamageService.java
@@ -0,0 +1,22 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import java.util.List;
+
+import com.turkcell.rentacar.business.dtos.listDtos.CarDamageListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCarDamageRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCarDamageRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCarDamageRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+public interface CarDamageService {
+
+ Result add(CreateCarDamageRequest createCarDamageRequest);
+
+ Result update(UpdateCarDamageRequest updateCarDamageRequest);
+
+ Result delete(DeleteCarDamageRequest deleteCarDamageRequest);
+
+ DataResult> getAll();
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CarMaintenanceService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CarMaintenanceService.java
new file mode 100644
index 0000000..e1a849d
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CarMaintenanceService.java
@@ -0,0 +1,29 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import java.util.List;
+
+import com.turkcell.rentacar.business.dtos.getDtos.CarMaintenanceGetDto;
+import com.turkcell.rentacar.business.dtos.listDtos.CarMaintenanceListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCarMaintenanceRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCarMaintenanceRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCarMaintenanceRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+public interface CarMaintenanceService {
+
+ DataResult> getAll();
+
+ DataResult> getByCarId(int carId);
+
+ DataResult getCarMaintenanceDetailsByCarMaintenanceId(int carMaintenanceId);
+
+ Result add(CreateCarMaintenanceRequest createCarMaintenanceRequest);
+
+ Result update(UpdateCarMaintenanceRequest updateCarMaintenanceRequest);
+
+ Result delete(DeleteCarMaintenanceRequest deleteCarMaintenanceRequest);
+
+ Result checkIfCarIsAlreadyInMaintenance(int carId);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CarService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CarService.java
new file mode 100644
index 0000000..9b0702d
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CarService.java
@@ -0,0 +1,39 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import java.util.List;
+
+import com.turkcell.rentacar.business.dtos.listDtos.CarListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCarRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCarRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateBrandToCarRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCarKilometerInfoRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCarRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateColorToCarRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+public interface CarService {
+
+ DataResult> getAll();
+
+ DataResult getById(int id);
+
+ DataResult> getAllPaged(int pageNo, int pageSize);
+
+ DataResult> getAllSorted(boolean sort);
+
+ Result add(CreateCarRequest createCarRequest);
+
+ Result update(UpdateCarRequest updateCarRequest);
+
+ Result updateKilometerInfo(UpdateCarKilometerInfoRequest updateCarKilometerInfoRequest);
+
+ Result delete(DeleteCarRequest deleteCarRequest);
+
+ Result updateColor(UpdateColorToCarRequest updateColorToCarRequest);
+
+ Result updateBrand(UpdateBrandToCarRequest updateBrandToCarRequest);
+
+ DataResult> findByDailyPriceLessThanEqual(double dailyPrice);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/ColorService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/ColorService.java
new file mode 100644
index 0000000..87ab9d3
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/ColorService.java
@@ -0,0 +1,23 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import com.turkcell.rentacar.business.dtos.listDtos.ColorListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateColorRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteColorRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateColorRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+import java.util.List;
+
+public interface ColorService {
+
+ Result add(CreateColorRequest createColorRequest);
+
+ Result update(UpdateColorRequest updateColorRequest);
+
+ Result delete(DeleteColorRequest deleteColorRequest);
+
+ DataResult> getAll();
+
+ DataResult getById(int id);
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CorporateCustomerService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CorporateCustomerService.java
new file mode 100644
index 0000000..f659599
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CorporateCustomerService.java
@@ -0,0 +1,15 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import com.turkcell.rentacar.business.requests.createRequests.CreateCorporateCustomerRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCorporateCustomerRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCorporateCustomerRequest;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+public interface CorporateCustomerService {
+
+ Result add(CreateCorporateCustomerRequest createCorporateCustomerRequest);
+
+ Result update(UpdateCorporateCustomerRequest updateCorporateCustomerRequest);
+
+ Result delete(DeleteCorporateCustomerRequest deleteCorporateCustomerRequest);
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CreditCardService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CreditCardService.java
new file mode 100644
index 0000000..9b135c4
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CreditCardService.java
@@ -0,0 +1,25 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import java.util.List;
+
+import com.turkcell.rentacar.business.dtos.getDtos.CreditCardGetDto;
+import com.turkcell.rentacar.business.dtos.listDtos.CreditCardListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCreditCardRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCreditCardRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCreditCardRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+public interface CreditCardService {
+
+ Result add(CreateCreditCardRequest createCreditCardRequest);
+
+ Result update(UpdateCreditCardRequest updateCreditCardRequest);
+
+ Result delete(DeleteCreditCardRequest deleteCreditCardRequest);
+
+ DataResult> getAll();
+
+ DataResult getById(int creditCardId);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CustomerService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CustomerService.java
new file mode 100644
index 0000000..2adde6c
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/CustomerService.java
@@ -0,0 +1,12 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import java.util.List;
+
+import com.turkcell.rentacar.business.dtos.listDtos.CustomerListDto;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+
+public interface CustomerService {
+
+ public DataResult> getAll();
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/IndividualCustomerService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/IndividualCustomerService.java
new file mode 100644
index 0000000..0c6da44
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/IndividualCustomerService.java
@@ -0,0 +1,16 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import com.turkcell.rentacar.business.requests.createRequests.CreateIndividualCustomerRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteIndividualCustomerRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateIndividualCustomerRequest;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+public interface IndividualCustomerService {
+
+ Result add(CreateIndividualCustomerRequest createIndividualCustomerRequest);
+
+ Result update(UpdateIndividualCustomerRequest updateIndividualCustomerRequest);
+
+ Result delete(DeleteIndividualCustomerRequest deleteIndividualCustomerRequest);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/InvoiceService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/InvoiceService.java
new file mode 100644
index 0000000..db7b0b4
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/InvoiceService.java
@@ -0,0 +1,32 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import java.time.LocalDate;
+import java.util.List;
+
+import com.turkcell.rentacar.business.dtos.listDtos.InvioceListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateInvoiceRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteInvoiceRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateInvoiceRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.entities.concretes.OrderedAdditionalProduct;
+
+public interface InvoiceService {
+
+ Result add(CreateInvoiceRequest createInvoiceRequest);
+
+ Result update(UpdateInvoiceRequest updateInvoiceRequest);
+
+ Result delete(DeleteInvoiceRequest deleteInvoiceRequest);
+
+ DataResult getByRentId(String rentId);
+
+ DataResult> getOrderedAdditionalProductByRentId(String rentId);
+
+ DataResult> getAll();
+
+ DataResult> getByUserId(int userId);
+
+ DataResult> getAllByBetweenStartDateAndEndDate(LocalDate startDate, LocalDate endDate);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/OrderedAdditionalProductService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/OrderedAdditionalProductService.java
new file mode 100644
index 0000000..f7157b9
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/OrderedAdditionalProductService.java
@@ -0,0 +1,28 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import java.util.List;
+
+import com.turkcell.rentacar.business.dtos.listDtos.OrderedAdditionalProductListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateOrderedAdditionalProductRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteOrderedAdditionalProductRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateOrderedAdditionalProductRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+public interface OrderedAdditionalProductService {
+
+ Result add(CreateOrderedAdditionalProductRequest createOrderedAdditionalProductRequest);
+
+ Result update(UpdateOrderedAdditionalProductRequest updateOrderedAdditionalProductRequest);
+
+ Result delete(DeleteOrderedAdditionalProductRequest deleteOrderedAdditionalProductRequest);
+
+ Result checkIfRentExists(String rentId);
+
+ DataResult> getAll();
+
+ DataResult> getByRentId(String rentId);
+
+ DataResult calculateOrderedAdditionalPrice(String rentId);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/PaymentService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/PaymentService.java
new file mode 100644
index 0000000..4803551
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/PaymentService.java
@@ -0,0 +1,15 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import com.turkcell.rentacar.business.requests.createRequests.CreateMakePaymentRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeletePaymentRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdatePaymentRequest;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+public interface PaymentService {
+
+ Result add(CreateMakePaymentRequest createMakePaymentRequest);
+
+ Result update(UpdatePaymentRequest updatePaymentRequest);
+
+ Result delete(DeletePaymentRequest deletePaymentRequest);
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/RentService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/RentService.java
new file mode 100644
index 0000000..a48e668
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/RentService.java
@@ -0,0 +1,46 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import java.util.List;
+
+import com.turkcell.rentacar.business.dtos.getDtos.RentGetDto;
+import com.turkcell.rentacar.business.dtos.listDtos.RentListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateRentRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteRentRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateDeliveryDateToRentRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateEndedKilometerInfoRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateRentRequest;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.entities.concretes.OrderedAdditionalProduct;
+
+public interface RentService {
+
+ Result addCorporateCustomer(CreateRentRequest createRentRequest);
+
+ DataResult addIndividualCustomer(CreateRentRequest createRentRequest);
+
+ Result update(UpdateRentRequest updateRentRequest);
+
+ Result updateEndedKilometer(UpdateEndedKilometerInfoRequest updateEndedKilometerInfoRequest);
+
+ Result updateDeliveryDate(UpdateDeliveryDateToRentRequest updateDeliveryDateToRentRequest);
+
+ Result delete(DeleteRentRequest deleteRentRequest);
+
+ DataResult> getAll();
+
+ DataResult> getByCarId(int carId);
+
+ DataResult> getOrderedAdditionalProductsByRentId(String rentId);
+
+ DataResult calculateRentTotalPrice(String rentId);
+
+ DataResult calculateDelayedDayPriceForRent(String rentId);
+
+ DataResult getRentDetailsByRentId(String rentId);
+
+ Result checkIfCarAlreadyInRent(int carId);
+
+ Result checkIfReturnCityIsDifferentForRentalCityIsSuccess(String rentId);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/UserService.java b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/UserService.java
new file mode 100644
index 0000000..3bc3b5b
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/abstracts/UserService.java
@@ -0,0 +1,10 @@
+package com.turkcell.rentacar.business.abstracts;
+
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateUserRequest;
+import com.turkcell.rentacar.core.utilities.results.Result;
+
+public interface UserService {
+
+ Result update(UpdateUserRequest updateUserRequest);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/AdditionalProductManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/AdditionalProductManager.java
new file mode 100644
index 0000000..3c70e55
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/AdditionalProductManager.java
@@ -0,0 +1,99 @@
+package com.turkcell.rentacar.business.concretes;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.turkcell.rentacar.business.abstracts.AdditionalProductService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.dtos.listDtos.AdditionalProductListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateAdditionalProductRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteAdditionalProductRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateAdditionalProductRequest;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessDataResult;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.AdditionalProductDao;
+import com.turkcell.rentacar.entities.concretes.AdditionalProduct;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityAlreadyExistsException;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityNotFoundException;
+
+@Service
+public class AdditionalProductManager implements AdditionalProductService {
+
+ private AdditionalProductDao additionalProductDao;
+ private ModelMapperService modelMapperService;
+
+ @Autowired
+ public AdditionalProductManager(AdditionalProductDao additionalProductDao, ModelMapperService modelMapperService) {
+ this.additionalProductDao = additionalProductDao;
+ this.modelMapperService = modelMapperService;
+ }
+
+ @Override
+ public Result add(CreateAdditionalProductRequest createAdditionalProductRequest) {
+
+ checkIfAdditionalProducNameExists(createAdditionalProductRequest.getAdditionalProductName());
+
+ AdditionalProduct additionalProduct = this.modelMapperService.forRequest().map(createAdditionalProductRequest,
+ AdditionalProduct.class);
+
+ this.additionalProductDao.save(additionalProduct);
+
+ return new SuccessResult(BusinessMessages.ADDITIONAL_PRODUCT_ADDED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result update(UpdateAdditionalProductRequest updateAdditionalProductRequest) {
+
+ checkIfAdditionalProductExists(updateAdditionalProductRequest.getAdditionalProductId());
+
+ AdditionalProduct additionalProduct = this.modelMapperService.forRequest().map(updateAdditionalProductRequest,
+ AdditionalProduct.class);
+
+ this.additionalProductDao.save(additionalProduct);
+
+ return new SuccessResult(BusinessMessages.ADDITIONAL_PRODUCT_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result delete(DeleteAdditionalProductRequest deleteAdditionalProductRequest) {
+
+ checkIfAdditionalProductExists(deleteAdditionalProductRequest.getAdditionalProductId());
+
+ AdditionalProduct additionalProduct = this.modelMapperService.forRequest().map(deleteAdditionalProductRequest,
+ AdditionalProduct.class);
+
+ this.additionalProductDao.delete(additionalProduct);
+
+ return new SuccessResult(BusinessMessages.ADDITIONAL_PRODUCT_DELETED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getAll() {
+
+ List result = this.additionalProductDao.findAll();
+ List response = result.stream().map(additionalProduct -> this.modelMapperService
+ .forDto().map(additionalProduct, AdditionalProductListDto.class)).collect(Collectors.toList());
+
+ return new SuccessDataResult>(response,
+ BusinessMessages.ADDITIONAL_PRODUCT_LISTED_SUCCESSFULLY);
+ }
+
+ private void checkIfAdditionalProductExists(int additionalProductId) {
+ if (!this.additionalProductDao.existsByAdditionalProductId(additionalProductId)) {
+ throw new EntityNotFoundException(BusinessMessages.ADDITIONAL_PRODUCT_NOT_FOUND);
+ }
+ }
+
+ private void checkIfAdditionalProducNameExists(String additionalProductName) {
+ if (this.additionalProductDao.existsByAdditionalProductName(additionalProductName)) {
+ throw new EntityAlreadyExistsException(BusinessMessages.ADDITIONAL_PRODUCT_ALREADY_EXISTS);
+ }
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/BrandManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/BrandManager.java
new file mode 100644
index 0000000..fd86bf8
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/BrandManager.java
@@ -0,0 +1,105 @@
+package com.turkcell.rentacar.business.concretes;
+
+import com.turkcell.rentacar.business.abstracts.BrandService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.dtos.listDtos.BrandListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateBrandRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteBrandRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateBrandRequest;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessDataResult;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.BrandDao;
+import com.turkcell.rentacar.entities.concretes.Brand;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityAlreadyExistsException;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityNotFoundException;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class BrandManager implements BrandService {
+
+ private BrandDao brandDao;
+ private ModelMapperService modelMapperService;
+
+ @Autowired
+ public BrandManager(BrandDao brandDao, ModelMapperService modelMapperService) {
+ this.brandDao = brandDao;
+ this.modelMapperService = modelMapperService;
+ }
+
+ @Override
+ public DataResult> getAll() {
+
+ List result = this.brandDao.findAll();
+ List response = result.stream()
+ .map(brand -> this.modelMapperService.forDto().map(brand, BrandListDto.class))
+ .collect(Collectors.toList());
+
+ return new SuccessDataResult>(response, BusinessMessages.BRANDS_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result add(CreateBrandRequest createBrandRequest) {
+
+ checkIfBrandNameExists(createBrandRequest.getBrandName());
+
+ Brand brand = this.modelMapperService.forRequest().map(createBrandRequest, Brand.class);
+
+ this.brandDao.save(brand);
+
+ return new SuccessResult(BusinessMessages.BRAND_ADDED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult getById(int id) {
+
+ Brand result = this.brandDao.getBrandByBrandId(id);
+ BrandListDto response = this.modelMapperService.forDto().map(result, BrandListDto.class);
+
+ return new SuccessDataResult(response, BusinessMessages.BRAND_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result update(UpdateBrandRequest updateBrandRequest) {
+
+ checkIfBrandExists(updateBrandRequest.getBrandId());
+ checkIfBrandNameExists(updateBrandRequest.getBrandName());
+
+ Brand brand = this.modelMapperService.forRequest().map(updateBrandRequest, Brand.class);
+
+ this.brandDao.save(brand);
+
+ return new SuccessResult(BusinessMessages.BRAND_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result delete(DeleteBrandRequest deleteBrandRequest) {
+
+ checkIfBrandExists(deleteBrandRequest.getBrandId());
+
+ Brand brand = this.modelMapperService.forRequest().map(deleteBrandRequest, Brand.class);
+
+ this.brandDao.deleteById(brand.getBrandId());
+
+ return new SuccessResult(BusinessMessages.BRAND_DELETED_SUCCESSFULLY);
+ }
+
+ private void checkIfBrandExists(int brandId) {
+ if (!this.brandDao.existsById(brandId)) {
+ throw new EntityNotFoundException(BusinessMessages.BRAND_ALREADY_EXISTS);
+ }
+ }
+
+ private void checkIfBrandNameExists(String brandName) {
+ if (this.brandDao.existsBrandByBrandName(brandName)) {
+ throw new EntityAlreadyExistsException(BusinessMessages.BRAND_NOT_FOUND);
+ }
+ }
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CarDamageManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CarDamageManager.java
new file mode 100644
index 0000000..7770d05
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CarDamageManager.java
@@ -0,0 +1,75 @@
+package com.turkcell.rentacar.business.concretes;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.turkcell.rentacar.business.abstracts.CarDamageService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.dtos.listDtos.CarDamageListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCarDamageRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCarDamageRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCarDamageRequest;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessDataResult;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.CarDamageDao;
+import com.turkcell.rentacar.entities.concretes.CarDamage;
+
+@Service
+public class CarDamageManager implements CarDamageService {
+
+ private CarDamageDao carDamageDao;
+ private ModelMapperService modelMapperService;
+
+ @Autowired
+ public CarDamageManager(CarDamageDao carDamageDao, ModelMapperService modelMapperService) {
+ this.carDamageDao = carDamageDao;
+ this.modelMapperService = modelMapperService;
+ }
+
+ @Override
+ public Result add(CreateCarDamageRequest createCarDamageRequest) {
+
+ CarDamage carDamage = this.modelMapperService.forRequest().map(createCarDamageRequest, CarDamage.class);
+
+ this.carDamageDao.save(carDamage);
+
+ return new SuccessResult(BusinessMessages.CAR_DAMAGE_ADDED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result update(UpdateCarDamageRequest updateCarDamageRequest) {
+
+ CarDamage carDamage = this.modelMapperService.forRequest().map(updateCarDamageRequest, CarDamage.class);
+
+ this.carDamageDao.save(carDamage);
+
+ return new SuccessResult(BusinessMessages.CAR_DAMAGE_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result delete(DeleteCarDamageRequest deleteCarDamageRequest) {
+
+ CarDamage carDamage = this.modelMapperService.forRequest().map(deleteCarDamageRequest, CarDamage.class);
+
+ this.carDamageDao.delete(carDamage);
+
+ return new SuccessResult(BusinessMessages.CAR_DAMAGE_DELETED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getAll() {
+ List result = this.carDamageDao.findAll();
+ List response = result.stream()
+ .map(carDamage -> this.modelMapperService.forDto().map(carDamage, CarDamageListDto.class))
+ .collect(Collectors.toList());
+
+ return new SuccessDataResult>(response, BusinessMessages.CAR_DAMAGE_LISTED_SUCCESSFULLY);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CarMaintenanceManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CarMaintenanceManager.java
new file mode 100644
index 0000000..8e37ba0
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CarMaintenanceManager.java
@@ -0,0 +1,166 @@
+package com.turkcell.rentacar.business.concretes;
+
+import java.time.LocalDate;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import com.turkcell.rentacar.business.abstracts.CarMaintenanceService;
+import com.turkcell.rentacar.business.abstracts.RentService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.dtos.getDtos.CarMaintenanceGetDto;
+import com.turkcell.rentacar.business.dtos.listDtos.CarMaintenanceListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCarMaintenanceRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCarMaintenanceRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCarMaintenanceRequest;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.ErrorResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessDataResult;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.CarMaintenanceDao;
+import com.turkcell.rentacar.entities.concretes.CarMaintenance;
+import com.turkcell.rentacar.exceptions.businessExceptions.CarIsAlreadyInMaintenanceException;
+import com.turkcell.rentacar.exceptions.businessExceptions.CarIsAlreadyInRentException;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityNotFoundException;
+import com.turkcell.rentacar.exceptions.businessExceptions.ReturnDateIsAfterNowException;
+
+@Service
+public class CarMaintenanceManager implements CarMaintenanceService {
+
+ private CarMaintenanceDao carMaintenanceDao;
+ private ModelMapperService modelMapperService;
+ private RentService rentService;
+
+ @Autowired
+ public CarMaintenanceManager(CarMaintenanceDao carMaintenanceDao, ModelMapperService modelMapperService,
+ @Lazy RentService rentService) {
+ this.carMaintenanceDao = carMaintenanceDao;
+ this.modelMapperService = modelMapperService;
+ this.rentService = rentService;
+ }
+
+ @Override
+ public DataResult> getAll() {
+
+ List result = this.carMaintenanceDao.findAll();
+ List response = result.stream().map(
+ carMaintenance -> this.modelMapperService.forDto().map(carMaintenance, CarMaintenanceListDto.class))
+ .collect(Collectors.toList());
+
+ return new SuccessDataResult>(response,
+ BusinessMessages.CAR_MAINTENANCES_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult getCarMaintenanceDetailsByCarMaintenanceId(int carMaintenanceId) {
+
+ CarMaintenance result = this.carMaintenanceDao.getById(carMaintenanceId);
+ CarMaintenanceGetDto response = this.modelMapperService.forDto().map(result, CarMaintenanceGetDto.class);
+
+ return new SuccessDataResult(response,
+ BusinessMessages.CAR_MAINTENANCE_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result add(CreateCarMaintenanceRequest createCarMaintenanceRequest) {
+
+ checkIfReturnDateIsAfterNow(createCarMaintenanceRequest.getReturnDate());
+ checkIfCarIsAlreadyInMaintenanceIsSuccess(createCarMaintenanceRequest.getCarId());
+ checkIfCarIsAlreadyInRent(createCarMaintenanceRequest.getCarId());
+
+ CarMaintenance carMaintenance = this.modelMapperService.forRequest().map(createCarMaintenanceRequest,
+ CarMaintenance.class);
+
+ this.carMaintenanceDao.save(carMaintenance);
+
+ return new SuccessResult(BusinessMessages.CAR_MAINTENANCE_ADDED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result update(UpdateCarMaintenanceRequest updateCarMaintenanceRequest) {
+
+ existByCarMaintenance(updateCarMaintenanceRequest.getCarMaintenanceId());
+ checkIfReturnDateIsAfterNow(updateCarMaintenanceRequest.getReturnDate());
+
+ CarMaintenance carMaintenance = this.modelMapperService.forRequest().map(updateCarMaintenanceRequest,
+ CarMaintenance.class);
+
+ this.carMaintenanceDao.save(carMaintenance);
+
+ return new SuccessResult(BusinessMessages.CAR_MAINTENANCE_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result delete(DeleteCarMaintenanceRequest deleteCarMaintenanceRequest) {
+
+ existByCarMaintenance(deleteCarMaintenanceRequest.getCarMaintenanceId());
+
+ CarMaintenance carMaintenance = this.modelMapperService.forRequest().map(deleteCarMaintenanceRequest,
+ CarMaintenance.class);
+
+ this.carMaintenanceDao.delete(carMaintenance);
+
+ return new SuccessResult(BusinessMessages.CAR_MAINTENANCE_DELETED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getByCarId(int carId) {
+
+ List result = this.carMaintenanceDao.getByCar_CarId(carId);
+ List response = result.stream().map(
+ carMaintenance -> this.modelMapperService.forDto().map(carMaintenance, CarMaintenanceListDto.class))
+ .collect(Collectors.toList());
+
+ return new SuccessDataResult>(response,
+ BusinessMessages.CAR_MAINTENANCES_FOR_CAR_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result checkIfCarIsAlreadyInMaintenance(int carId) {
+ for (CarMaintenance carMaintenance : this.carMaintenanceDao.getByCar_CarId(carId)) {
+ if (carMaintenance.getReturnDate() != null) {
+ return new SuccessResult(BusinessMessages.CAR_NOT_IN_MAINTENANCE);
+ }
+ }
+ return new ErrorResult(BusinessMessages.CAR_ALREADY_IN_MAINTENANCE);
+ }
+
+ private void checkIfCarIsAlreadyInMaintenanceIsSuccess(int carId) {
+ if (this.carMaintenanceDao.existsByCar_CarId(carId)) {
+ if (!checkIfCarIsAlreadyInMaintenance(carId).isSuccess()) {
+ throw new CarIsAlreadyInMaintenanceException(BusinessMessages.CAR_ALREADY_IN_MAINTENANCE);
+ }
+ }
+ }
+
+ private void checkIfCarIsAlreadyInRent(int carId) {
+ if (!checkIfCarExistInRentTable(carId)) {
+ if (!this.rentService.checkIfCarAlreadyInRent(carId).isSuccess()) {
+ throw new CarIsAlreadyInRentException(BusinessMessages.CAR_ALREADY_IN_RENT);
+ }
+ }
+ }
+
+ private boolean checkIfCarExistInRentTable(int carId) {
+ return this.rentService.getByCarId(carId).getData().isEmpty();
+ }
+
+ private void existByCarMaintenance(int carMaintenanceId) {
+ if (!this.carMaintenanceDao.existsById(carMaintenanceId)) {
+ throw new EntityNotFoundException(BusinessMessages.CAR_MAINTENANCE_NOT_FOUND);
+ }
+ }
+
+ private void checkIfReturnDateIsAfterNow(LocalDate returnDate) {
+ if (returnDate != null) {
+ if (returnDate.isAfter(LocalDate.now())) {
+ throw new ReturnDateIsAfterNowException(BusinessMessages.A_FUTURE_DATE_CANNOT_BE_ENTERED);
+ }
+ }
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CarManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CarManager.java
new file mode 100644
index 0000000..f93251a
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CarManager.java
@@ -0,0 +1,178 @@
+package com.turkcell.rentacar.business.concretes;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Service;
+
+import com.turkcell.rentacar.business.abstracts.CarService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.dtos.listDtos.CarListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCarRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCarRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateBrandToCarRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCarKilometerInfoRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCarRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateColorToCarRequest;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessDataResult;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.CarDao;
+import com.turkcell.rentacar.entities.concretes.Car;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityNotFoundException;
+
+@Service
+public class CarManager implements CarService {
+
+ private CarDao carDao;
+ private ModelMapperService modelMapperService;
+
+ @Autowired
+ public CarManager(CarDao carDao, ModelMapperService modelMapperService) {
+ this.carDao = carDao;
+ this.modelMapperService = modelMapperService;
+ }
+
+ @Override
+ public DataResult> getAll() {
+
+ List result = this.carDao.findAll();
+ List response = result.stream()
+ .map(car -> this.modelMapperService.forDto().map(car, CarListDto.class)).collect(Collectors.toList());
+
+ return new SuccessDataResult>(response, BusinessMessages.CARS_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result add(CreateCarRequest createCarRequest) {
+
+ Car car = this.modelMapperService.forRequest().map(createCarRequest, Car.class);
+
+ this.carDao.save(car);
+
+ return new SuccessResult(BusinessMessages.CAR_ADDED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result update(UpdateCarRequest updateCarRequest) {
+
+ checkIfCarExists(updateCarRequest.getCarId());
+
+ Car car = this.carDao.getById(updateCarRequest.getCarId());
+ Car updatedCar = this.modelMapperService.forRequest().map(updateCarRequest, Car.class);
+
+ updatedCar.setBrand(car.getBrand());
+ updatedCar.setColor(car.getColor());
+
+ this.carDao.save(updatedCar);
+
+ return new SuccessResult(BusinessMessages.CAR_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result delete(DeleteCarRequest deleteCarRequest) {
+
+ checkIfCarExists(deleteCarRequest.getCarId());
+
+ Car car = this.modelMapperService.forRequest().map(deleteCarRequest, Car.class);
+
+ this.carDao.deleteById(car.getCarId());
+
+ return new SuccessResult(BusinessMessages.CAR_DELETED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result updateColor(UpdateColorToCarRequest updateColorToCarRequest) {
+
+ checkIfCarExists(updateColorToCarRequest.getCarId());
+
+ this.carDao.updateColorToCarByCarId(updateColorToCarRequest.getCarId(), updateColorToCarRequest.getColorId());
+
+ return new SuccessResult(BusinessMessages.COLOR_CAR_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result updateBrand(UpdateBrandToCarRequest updateBrandToCarRequest) {
+
+ checkIfCarExists(updateBrandToCarRequest.getCarId());
+
+ this.carDao.updateBrandToCarByCarId(updateBrandToCarRequest.getCarId(), updateBrandToCarRequest.getBrandId());
+
+ return new SuccessResult(BusinessMessages.BRAND_CAR_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult getById(int id) {
+
+ Car result = this.carDao.getById(id);
+ CarListDto response = this.modelMapperService.forDto().map(result, CarListDto.class);
+
+ return new SuccessDataResult(response, BusinessMessages.CAR_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> findByDailyPriceLessThanEqual(double dailyPrice) {
+
+ List result = this.carDao.findByDailyPriceLessThanEqual(dailyPrice);
+ List response = result.stream()
+ .map(car -> this.modelMapperService.forDto().map(car, CarListDto.class)).collect(Collectors.toList());
+
+ return new SuccessDataResult>(response,
+ BusinessMessages.CAR_LISTED_SUCCESSFULLY_BY_DAILY_PRICE);
+ }
+
+ @Override
+ public DataResult> getAllPaged(int pageNo, int pageSize) {
+
+ Pageable pageable = PageRequest.of(pageNo - 1, pageSize);
+
+ List result = this.carDao.findAll(pageable).getContent();
+ List response = result.stream()
+ .map(car -> this.modelMapperService.forDto().map(car, CarListDto.class)).collect(Collectors.toList());
+
+ return new SuccessDataResult>(response,
+ BusinessMessages.CAR_LISTED_AND_PAGINATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getAllSorted(boolean sort) {
+
+ Sort sorted = Sort.by(checkSortDirectionType(sort), "dailyPrice");
+
+ List result = this.carDao.findAll(sorted);
+ List response = result.stream()
+ .map(car -> this.modelMapperService.forDto().map(car, CarListDto.class)).collect(Collectors.toList());
+
+ return new SuccessDataResult>(response, BusinessMessages.CAR_SORTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result updateKilometerInfo(UpdateCarKilometerInfoRequest updateCarKilometerInfoRequest) {
+
+ this.carDao.updateKilometerToCarByCarId(updateCarKilometerInfoRequest.getCarId(),
+ updateCarKilometerInfoRequest.getKilometerInfo());
+
+ return new SuccessResult(BusinessMessages.KILOMETER_INFO_CAR_UPDATED_SUCCESSFULLY);
+ }
+
+ private void checkIfCarExists(int carId) {
+ if (!this.carDao.existsByCarId(carId)) {
+ throw new EntityNotFoundException(BusinessMessages.CAR_NOT_FOUND);
+ }
+ }
+
+ public Sort.Direction checkSortDirectionType(boolean sort) {
+ if (sort) {
+ return Sort.Direction.ASC;
+ } else {
+ return Sort.Direction.DESC;
+ }
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/ColorManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/ColorManager.java
new file mode 100644
index 0000000..5093a45
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/ColorManager.java
@@ -0,0 +1,106 @@
+package com.turkcell.rentacar.business.concretes;
+
+import com.turkcell.rentacar.business.abstracts.ColorService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.dtos.listDtos.ColorListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateColorRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteColorRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateColorRequest;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessDataResult;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.ColorDao;
+import com.turkcell.rentacar.entities.concretes.Color;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityAlreadyExistsException;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityNotFoundException;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class ColorManager implements ColorService {
+
+ private ColorDao colorDao;
+ private ModelMapperService modelMapperService;
+
+ @Autowired
+ public ColorManager(ColorDao colorDao, ModelMapperService modelMapperService) {
+ this.colorDao = colorDao;
+ this.modelMapperService = modelMapperService;
+ }
+
+ @Override
+ public Result add(CreateColorRequest createColorRequest) {
+
+ checkIfColorNameExists(createColorRequest.getColorName());
+
+ Color color = this.modelMapperService.forRequest().map(createColorRequest, Color.class);
+
+ this.colorDao.save(color);
+
+ return new SuccessResult(BusinessMessages.COLOR_ADDED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result update(UpdateColorRequest updateColorRequest) {
+
+ checkIfColorExists(updateColorRequest.getColorId());
+ checkIfColorNameExists(updateColorRequest.getColorName());
+
+ Color color = this.modelMapperService.forRequest().map(updateColorRequest, Color.class);
+
+ this.colorDao.save(color);
+
+ return new SuccessResult(BusinessMessages.COLOR_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result delete(DeleteColorRequest deleteColorRequest) {
+
+ checkIfColorExists(deleteColorRequest.getColorId());
+
+ Color color = this.modelMapperService.forRequest().map(deleteColorRequest, Color.class);
+
+ this.colorDao.deleteById(color.getColorId());
+
+ return new SuccessResult(BusinessMessages.COLOR_DELETED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getAll() {
+
+ List result = this.colorDao.findAll();
+ List response = result.stream()
+ .map(color -> this.modelMapperService.forDto().map(color, ColorListDto.class))
+ .collect(Collectors.toList());
+
+ return new SuccessDataResult>(response, BusinessMessages.COLORS_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult getById(int id) {
+
+ Color result = this.colorDao.getById(id);
+ ColorListDto response = this.modelMapperService.forDto().map(result, ColorListDto.class);
+
+ return new SuccessDataResult(response, BusinessMessages.COLOR_LISTED_SUCCESSFULLY);
+ }
+
+ private void checkIfColorNameExists(String colorName) {
+ if (this.colorDao.existsColorByColorName(colorName)) {
+ throw new EntityAlreadyExistsException(BusinessMessages.COLOR_ALREADY_EXISTS);
+ }
+ }
+
+ private void checkIfColorExists(int colorId) {
+ if (!this.colorDao.existsById(colorId)) {
+ throw new EntityNotFoundException(BusinessMessages.COLOR_NOT_FOUND);
+ }
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CorporateCustomerManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CorporateCustomerManager.java
new file mode 100644
index 0000000..edb0ccd
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CorporateCustomerManager.java
@@ -0,0 +1,83 @@
+package com.turkcell.rentacar.business.concretes;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.turkcell.rentacar.business.abstracts.CorporateCustomerService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCorporateCustomerRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCorporateCustomerRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCorporateCustomerRequest;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.CorporateCustomerDao;
+import com.turkcell.rentacar.entities.concretes.CorporateCustomer;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityAlreadyExistsException;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityNotFoundException;
+
+@Service
+public class CorporateCustomerManager implements CorporateCustomerService {
+
+ private CorporateCustomerDao corporateCustomerDao;
+ private ModelMapperService modelMapperService;
+
+ @Autowired
+ public CorporateCustomerManager(CorporateCustomerDao corporateCustomerDao, ModelMapperService modelMapperService) {
+ this.corporateCustomerDao = corporateCustomerDao;
+ this.modelMapperService = modelMapperService;
+ }
+
+ @Override
+ public Result add(CreateCorporateCustomerRequest createCorporateCustomerRequest) {
+
+ checkIfEmailExists(createCorporateCustomerRequest.getEmail());
+
+ CorporateCustomer corporateCustomer = this.modelMapperService.forRequest().map(createCorporateCustomerRequest,
+ CorporateCustomer.class);
+
+ this.corporateCustomerDao.save(corporateCustomer);
+
+ return new SuccessResult(BusinessMessages.CORPORATE_CUSTOMER_ADDED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result update(UpdateCorporateCustomerRequest updateCorporateCustomerRequest) {
+
+ checkIfEmailExists(updateCorporateCustomerRequest.getEmail());
+ checkIfCorporateCustomerExists(updateCorporateCustomerRequest.getUserId());
+
+ CorporateCustomer corporateCustomer = this.modelMapperService.forRequest().map(updateCorporateCustomerRequest,
+ CorporateCustomer.class);
+
+ this.corporateCustomerDao.save(corporateCustomer);
+
+ return new SuccessResult(BusinessMessages.CORPORATE_CUSTOMER_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result delete(DeleteCorporateCustomerRequest deleteCorporateCustomerRequest) {
+
+ checkIfCorporateCustomerExists(deleteCorporateCustomerRequest.getUserId());
+
+ CorporateCustomer corporateCustomer = this.modelMapperService.forRequest().map(deleteCorporateCustomerRequest,
+ CorporateCustomer.class);
+
+ this.corporateCustomerDao.delete(corporateCustomer);
+
+ return new SuccessResult(BusinessMessages.CORPORATE_CUSTOMER_DELETED_SUCCESSFULLY);
+ }
+
+ private void checkIfCorporateCustomerExists(int corporateCustomerId) {
+ if (!this.corporateCustomerDao.existsById(corporateCustomerId)) {
+ throw new EntityNotFoundException(BusinessMessages.CORPORATE_CUSTOMER_NOT_FOUND);
+ }
+ }
+
+ private void checkIfEmailExists(String email) {
+ if (this.corporateCustomerDao.existsByEmail(email)) {
+ throw new EntityAlreadyExistsException(BusinessMessages.EMAIL_ALREADY_EXISTS);
+ }
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CreditCardManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CreditCardManager.java
new file mode 100644
index 0000000..8816880
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CreditCardManager.java
@@ -0,0 +1,88 @@
+package com.turkcell.rentacar.business.concretes;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.turkcell.rentacar.business.abstracts.CreditCardService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.dtos.getDtos.CreditCardGetDto;
+import com.turkcell.rentacar.business.dtos.listDtos.CreditCardListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateCreditCardRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteCreditCardRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateCreditCardRequest;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessDataResult;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.CreditCardDao;
+import com.turkcell.rentacar.entities.concretes.CreditCard;
+
+@Service
+public class CreditCardManager implements CreditCardService {
+
+ private CreditCardDao creditCardDao;
+ private ModelMapperService modelMapperService;
+
+ @Autowired
+ public CreditCardManager(CreditCardDao creditCardDao, ModelMapperService modelMapperService) {
+ super();
+ this.creditCardDao = creditCardDao;
+ this.modelMapperService = modelMapperService;
+ }
+
+ @Override
+ public Result add(CreateCreditCardRequest createCreditCardRequest) {
+
+ CreditCard creditCard = this.modelMapperService.forRequest().map(createCreditCardRequest, CreditCard.class);
+
+ this.creditCardDao.save(creditCard);
+
+ return new SuccessResult(BusinessMessages.CREDIT_CARD_ADDED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result update(UpdateCreditCardRequest updateCreditCardRequest) {
+
+ CreditCard creditCard = this.modelMapperService.forRequest().map(updateCreditCardRequest, CreditCard.class);
+
+ this.creditCardDao.save(creditCard);
+
+ return new SuccessResult(BusinessMessages.CREDIT_CARD_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result delete(DeleteCreditCardRequest deleteCreditCardRequest) {
+
+ CreditCard creditCard = this.modelMapperService.forRequest().map(deleteCreditCardRequest, CreditCard.class);
+
+ this.creditCardDao.delete(creditCard);
+
+ return new SuccessResult(BusinessMessages.CREDIT_CARD_DELETED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getAll() {
+
+ List result = this.creditCardDao.findAll();
+ List response = result.stream()
+ .map(creditCard -> this.modelMapperService.forDto().map(creditCard, CreditCardListDto.class))
+ .collect(Collectors.toList());
+
+ return new SuccessDataResult>(response,
+ BusinessMessages.CREDIT_CARDS_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult getById(int creditCardId) {
+
+ CreditCard result = this.creditCardDao.getById(creditCardId);
+ CreditCardGetDto response = this.modelMapperService.forDto().map(result, CreditCardGetDto.class);
+
+ return new SuccessDataResult(response, BusinessMessages.CREDIT_CARD_LISTED_SUCCESSFULLY);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CustomerManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CustomerManager.java
new file mode 100644
index 0000000..cb14b33
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/CustomerManager.java
@@ -0,0 +1,41 @@
+package com.turkcell.rentacar.business.concretes;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.turkcell.rentacar.business.abstracts.CustomerService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.dtos.listDtos.CustomerListDto;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.SuccessDataResult;
+import com.turkcell.rentacar.dataAccess.abstracts.CustomerDao;
+import com.turkcell.rentacar.entities.concretes.Customer;
+
+@Service
+public class CustomerManager implements CustomerService {
+
+ private CustomerDao customerDao;
+ private ModelMapperService modelMapperService;
+
+ @Autowired
+ public CustomerManager(CustomerDao customerDao, ModelMapperService modelMapperService) {
+ this.customerDao = customerDao;
+ this.modelMapperService = modelMapperService;
+ }
+
+ @Override
+ public DataResult> getAll() {
+
+ List result = this.customerDao.findAll();
+ List response = result.stream()
+ .map(customer -> modelMapperService.forDto().map(customer, CustomerListDto.class))
+ .collect(Collectors.toList());
+
+ return new SuccessDataResult>(response, BusinessMessages.CUSTOMERS_LISTED_SUCCESSFULLY);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/IndividualCustomerManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/IndividualCustomerManager.java
new file mode 100644
index 0000000..bfb5784
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/IndividualCustomerManager.java
@@ -0,0 +1,97 @@
+package com.turkcell.rentacar.business.concretes;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
+import com.turkcell.rentacar.business.abstracts.IndividualCustomerService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.requests.createRequests.CreateIndividualCustomerRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteIndividualCustomerRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateIndividualCustomerRequest;
+import com.turkcell.rentacar.core.services.abstracts.BaseNationalIdentityService;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.IndividualCustomerDao;
+import com.turkcell.rentacar.entities.concretes.IndividualCustomer;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityAlreadyExistsException;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityNotFoundException;
+import com.turkcell.rentacar.exceptions.businessExceptions.NationalIdentityNotValidException;
+
+@Service
+public class IndividualCustomerManager implements IndividualCustomerService {
+
+ private IndividualCustomerDao individualCustomerDao;
+ private ModelMapperService modelMapperService;
+ private BaseNationalIdentityService baseNationalIdentityService;
+
+ @Autowired
+ public IndividualCustomerManager(IndividualCustomerDao individualCustomerDao, ModelMapperService modelMapperService,
+ @Qualifier("fakeNationalIdentityManager") BaseNationalIdentityService baseNationalIdentityService) {
+ this.individualCustomerDao = individualCustomerDao;
+ this.modelMapperService = modelMapperService;
+ this.baseNationalIdentityService = baseNationalIdentityService;
+ }
+
+ @Override
+ public Result add(CreateIndividualCustomerRequest createIndividualCustomerRequest) {
+
+ checkIfEmailExists(createIndividualCustomerRequest.getEmail());
+ checkIfNationalIdentityIsReal(createIndividualCustomerRequest.getNationalIdentity());
+
+ IndividualCustomer individualCustomer = this.modelMapperService.forRequest()
+ .map(createIndividualCustomerRequest, IndividualCustomer.class);
+
+ this.individualCustomerDao.save(individualCustomer);
+
+ return new SuccessResult(BusinessMessages.INDIVIDUAL_CUSTOMER_ADDED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result update(UpdateIndividualCustomerRequest updateIndividualCustomerRequest) {
+
+ checkIfEmailExists(updateIndividualCustomerRequest.getEmail());
+ checkIfIndividualCustomerExists(updateIndividualCustomerRequest.getUserId());
+ checkIfNationalIdentityIsReal(updateIndividualCustomerRequest.getNationalIdentity());
+
+ IndividualCustomer individualCustomer = this.modelMapperService.forRequest()
+ .map(updateIndividualCustomerRequest, IndividualCustomer.class);
+
+ this.individualCustomerDao.save(individualCustomer);
+
+ return new SuccessResult(BusinessMessages.INDIVIDUAL_CUSTOMER_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result delete(DeleteIndividualCustomerRequest deleteIndividualCustomerRequest) {
+
+ checkIfIndividualCustomerExists(deleteIndividualCustomerRequest.getUserId());
+
+ IndividualCustomer individualCustomer = this.modelMapperService.forRequest()
+ .map(deleteIndividualCustomerRequest, IndividualCustomer.class);
+
+ this.individualCustomerDao.delete(individualCustomer);
+
+ return new SuccessResult(BusinessMessages.INDIVIDUAL_CUSTOMER_DELETED_SUCCESSFULLY);
+ }
+
+ private void checkIfIndividualCustomerExists(int individualCustomerId) {
+ if (!this.individualCustomerDao.existsById(individualCustomerId)) {
+ throw new EntityNotFoundException(BusinessMessages.INDIVIDUAL_CUSTOMER_NOT_FOUND);
+ }
+ }
+
+ private void checkIfEmailExists(String email) {
+ if (this.individualCustomerDao.existsByEmail(email)) {
+ throw new EntityAlreadyExistsException(BusinessMessages.EMAIL_ALREADY_EXISTS);
+ }
+ }
+
+ private void checkIfNationalIdentityIsReal(String nationalIdentity) {
+ if (!this.baseNationalIdentityService.checkNationalIdentity(nationalIdentity)) {
+ throw new NationalIdentityNotValidException(BusinessMessages.NATIONAL_IDENTITY_NOT_VALID);
+ }
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/InvoiceManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/InvoiceManager.java
new file mode 100644
index 0000000..92446f7
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/InvoiceManager.java
@@ -0,0 +1,214 @@
+package com.turkcell.rentacar.business.concretes;
+
+import java.time.LocalDate;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import com.turkcell.rentacar.business.abstracts.InvoiceService;
+import com.turkcell.rentacar.business.abstracts.OrderedAdditionalProductService;
+import com.turkcell.rentacar.business.abstracts.RentService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.dtos.listDtos.InvioceListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateInvoiceRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteInvoiceRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateInvoiceRequest;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessDataResult;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.InvoiceDao;
+import com.turkcell.rentacar.entities.concretes.Invoice;
+import com.turkcell.rentacar.entities.concretes.OrderedAdditionalProduct;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityNotFoundException;
+
+@Service
+public class InvoiceManager implements InvoiceService {
+
+ private InvoiceDao invoiceDao;
+ private ModelMapperService modelMapperService;
+ private RentService rentService;
+ private OrderedAdditionalProductService orderedAdditionalProductService;
+
+ @Autowired
+ public InvoiceManager(InvoiceDao invoiceDao, ModelMapperService modelMapperService, @Lazy RentService rentService,
+ OrderedAdditionalProductService orderedAdditionalProductService) {
+ this.invoiceDao = invoiceDao;
+ this.modelMapperService = modelMapperService;
+ this.rentService = rentService;
+ this.orderedAdditionalProductService = orderedAdditionalProductService;
+ }
+
+ @Override
+ public Result add(CreateInvoiceRequest createInvoiceRequest) {
+
+ Invoice invoice = this.modelMapperService.forRequest().map(createInvoiceRequest, Invoice.class);
+
+ if (checkIfDeliverDateAndRentReturnDateIsDifferent(invoice.getRent().getRentId())) {
+ invoice.setTotalPrice(calculateDelayedDayPrice(invoice.getRent().getRentId()));
+ } else {
+ invoice.setTotalPrice(calculateTotalPrice(invoice));
+ }
+
+ this.invoiceDao.save(invoice);
+
+ return new SuccessResult(BusinessMessages.INVOICE_ADDED_SUCCESSFULLY);
+
+ }
+
+ @Override
+ public Result update(UpdateInvoiceRequest updateInvoiceRequest) {
+
+ checkIfInvoiceExists(updateInvoiceRequest.getInvoiceId());
+
+ Invoice invoice = this.modelMapperService.forRequest().map(updateInvoiceRequest, Invoice.class);
+
+ invoice.setTotalPrice(calculateTotalPrice(invoice));
+
+ this.invoiceDao.save(invoice);
+
+ return new SuccessResult(BusinessMessages.INVOICE_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result delete(DeleteInvoiceRequest deleteInvoiceRequest) {
+
+ Invoice invoice = this.modelMapperService.forRequest().map(deleteInvoiceRequest, Invoice.class);
+
+ this.invoiceDao.delete(invoice);
+
+ return new SuccessResult(BusinessMessages.INVOICE_DELETED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getAll() {
+
+ List result = this.invoiceDao.findAll();
+ List response = result.stream()
+ .map(invoice -> modelMapperService.forDto().map(invoice, InvioceListDto.class))
+ .collect(Collectors.toList());
+
+ return new SuccessDataResult>(response, BusinessMessages.INVOICES_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult getByRentId(String rentId) {
+
+ checkIfRentExists(rentId);
+
+ Invoice result = this.invoiceDao.getByRent_RentId(rentId);
+ InvioceListDto response = this.modelMapperService.forDto().map(result, InvioceListDto.class);
+
+ return new SuccessDataResult(response, BusinessMessages.INVOICE_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getOrderedAdditionalProductByRentId(String rentId) {
+
+ List result = this.rentService.getOrderedAdditionalProductsByRentId(rentId).getData();
+
+ return new SuccessDataResult>(result,
+ BusinessMessages.INVOICE_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getByUserId(int userId) {
+
+ checkIfUserExists(userId);
+
+ List result = this.invoiceDao.getByUser_UserId(userId);
+ List response = result.stream()
+ .map(invoice -> modelMapperService.forDto().map(invoice, InvioceListDto.class))
+ .collect(Collectors.toList());
+
+ return new SuccessDataResult>(response,
+ BusinessMessages.USERS_INVOICES_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getAllByBetweenStartDateAndEndDate(LocalDate startDate, LocalDate endDate) {
+
+ List result = this.invoiceDao.getAllByBetweenStartDateAndEndDate(startDate, endDate);
+ List response = result.stream()
+ .map(invoice -> modelMapperService.forDto().map(invoice, InvioceListDto.class))
+ .collect(Collectors.toList());
+
+ return new SuccessDataResult>(response,
+ BusinessMessages.INVOICE_BETWEEN_START_DATE_AND_END_DATE_LISTED_SUCCESSFULLY);
+ }
+
+ private double calculateTotalPrice(Invoice invoice) {
+
+ return calculateRentTotalPrice(invoice.getRent().getRentId())
+ + calculateOrderedAdditionalPrice(invoice.getRent().getRentId())
+ + calculateIfCityIsDifferentPrice(invoice.getRent().getRentId());
+ }
+
+ private double calculateRentTotalPrice(String rentId) {
+ return this.rentService.calculateRentTotalPrice(rentId).getData();
+ }
+
+ private double calculateOrderedAdditionalPrice(String rentId) {
+
+ if (checkIfInvoiceHasOrderedAdditionalProduct(rentId)) {
+ return this.orderedAdditionalProductService.calculateOrderedAdditionalPrice(rentId).getData();
+ }
+ return 0;
+ }
+
+ private double calculateIfCityIsDifferentPrice(String rentId) {
+
+ if (this.rentService.checkIfReturnCityIsDifferentForRentalCityIsSuccess(rentId).isSuccess()) {
+ return 750;
+ }
+ return 0;
+ }
+
+ private double calculateDelayedDayPrice(String rentId) {
+
+ if (this.rentService.calculateDelayedDayPriceForRent(rentId).isSuccess()) {
+ return this.rentService.calculateDelayedDayPriceForRent(rentId).getData()
+ + calculateOrderedAdditionalPrice(rentId);
+ }
+
+ return 0;
+ }
+
+ private boolean checkIfDeliverDateAndRentReturnDateIsDifferent(String rentId) {
+ return this.rentService.calculateDelayedDayPriceForRent(rentId).isSuccess();
+ }
+
+ private void checkIfInvoiceExists(int invoiceId) {
+
+ if (!this.invoiceDao.existsById(invoiceId)) {
+ throw new EntityNotFoundException(BusinessMessages.INVOICE_NOT_FOUND);
+ }
+ }
+
+ private boolean checkIfInvoiceHasOrderedAdditionalProduct(String rentId) {
+
+ if (this.orderedAdditionalProductService.checkIfRentExists(rentId).isSuccess()) {
+ return true;
+ }
+ return false;
+ }
+
+ private void checkIfRentExists(String rentId) {
+
+ if (!this.invoiceDao.existsByRent_RentId(rentId)) {
+ throw new EntityNotFoundException(BusinessMessages.RENT_NOT_FOUND);
+ }
+ }
+
+ private void checkIfUserExists(int userId) {
+
+ if (!this.invoiceDao.existsByUser_UserId(userId)) {
+ throw new EntityNotFoundException(BusinessMessages.USER_NOT_FOUND);
+ }
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/OrderedAdditionalProductManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/OrderedAdditionalProductManager.java
new file mode 100644
index 0000000..8f795ba
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/OrderedAdditionalProductManager.java
@@ -0,0 +1,146 @@
+package com.turkcell.rentacar.business.concretes;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.turkcell.rentacar.business.abstracts.OrderedAdditionalProductService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.dtos.listDtos.OrderedAdditionalProductListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateOrderedAdditionalProductRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteOrderedAdditionalProductRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateOrderedAdditionalProductRequest;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.ErrorResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessDataResult;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.OrderedAdditionalProductDao;
+import com.turkcell.rentacar.entities.concretes.OrderedAdditionalProduct;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityNotFoundException;
+
+@Service
+public class OrderedAdditionalProductManager implements OrderedAdditionalProductService {
+
+ private OrderedAdditionalProductDao orderedAdditionalProductDao;
+ private ModelMapperService modelMapperService;
+
+ @Autowired
+ public OrderedAdditionalProductManager(OrderedAdditionalProductDao orderedAdditionalProductDao,
+ ModelMapperService modelMapperService) {
+ this.orderedAdditionalProductDao = orderedAdditionalProductDao;
+ this.modelMapperService = modelMapperService;
+ }
+
+ @Override
+ public Result add(CreateOrderedAdditionalProductRequest createOrderedAdditionalProductRequest) {
+
+ OrderedAdditionalProduct orderedAdditionalProduct = this.modelMapperService.forRequest()
+ .map(createOrderedAdditionalProductRequest, OrderedAdditionalProduct.class);
+
+ orderedAdditionalProduct.setOrderedAdditionalProductId(0);
+ this.orderedAdditionalProductDao.save(orderedAdditionalProduct);
+
+ return new SuccessResult(BusinessMessages.ORDERED_ADDITIONAL_PRODUCT_ADDED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result update(UpdateOrderedAdditionalProductRequest updateOrderedAdditionalProductRequest) {
+
+ checkIfOrderedAdditionalProductExists(updateOrderedAdditionalProductRequest.getOrderedAdditionalProductId());
+
+ OrderedAdditionalProduct orderedAdditionalProduct = this.modelMapperService.forRequest()
+ .map(updateOrderedAdditionalProductRequest, OrderedAdditionalProduct.class);
+
+ this.orderedAdditionalProductDao.save(orderedAdditionalProduct);
+
+ return new SuccessResult(BusinessMessages.ORDERED_ADDITIONAL_PRODUCT_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result delete(DeleteOrderedAdditionalProductRequest deleteOrderedAdditionalProductRequest) {
+
+ checkIfOrderedAdditionalProductExists(deleteOrderedAdditionalProductRequest.getOrderedAdditionalProductId());
+
+ OrderedAdditionalProduct orderedAdditionalProduct = this.modelMapperService.forRequest()
+ .map(deleteOrderedAdditionalProductRequest, OrderedAdditionalProduct.class);
+
+ this.orderedAdditionalProductDao.delete(orderedAdditionalProduct);
+
+ return new SuccessResult(BusinessMessages.ORDERED_ADDITIONAL_PRODUCT_DELETED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getAll() {
+
+ List result = this.orderedAdditionalProductDao.findAll();
+ List response = result.stream()
+ .map(orderedAdditionalProduct -> this.modelMapperService.forDto().map(orderedAdditionalProduct,
+ OrderedAdditionalProductListDto.class))
+ .collect(Collectors.toList());
+
+ return new SuccessDataResult>(response,
+ BusinessMessages.ORDERED_ADDITIONAL_PRODUCTS_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getByRentId(String rentId) {
+
+ List result = this.orderedAdditionalProductDao.getByRent_RentId(rentId);
+ List response = result.stream()
+ .map(orderedAdditionalProduct -> this.modelMapperService.forDto().map(orderedAdditionalProduct,
+ OrderedAdditionalProductListDto.class))
+ .collect(Collectors.toList());
+
+ return new SuccessDataResult>(response,
+ BusinessMessages.ORDERED_ADDITIONAL_PRODUCT_FOR_RENT_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult calculateOrderedAdditionalPrice(String rentId) {
+
+ checkIfRentExistsIsSuccess(rentId);
+
+ double orderedAdditionalProductsPrice = 0;
+
+ List result = this.getByRentId(rentId).getData();
+ List orderedAdditionalProductList = result.stream()
+ .map(orderedAdditionalProduct -> this.modelMapperService.forDto().map(orderedAdditionalProduct,
+ OrderedAdditionalProduct.class))
+ .collect(Collectors.toList());
+
+ for (OrderedAdditionalProduct orderedAdditionalProduct : orderedAdditionalProductList) {
+ orderedAdditionalProductsPrice += (orderedAdditionalProduct.getOrderedAdditionalProductAmount()
+ * orderedAdditionalProduct.getAdditionalProduct().getAdditionalProductUnitPrice());
+ }
+
+ return new SuccessDataResult(orderedAdditionalProductsPrice,
+ BusinessMessages.ORDERED_ADDITIONAL_PRODUCT_PRICE_CALCULATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result checkIfRentExists(String rentId) {
+
+ if (this.orderedAdditionalProductDao.existsByRent_RentId(rentId)) {
+ return new SuccessResult(BusinessMessages.RENT_ALREADY_EXISTS_IN_ORDERED_ADDITIONAL_PRODUCT);
+ }
+
+ return new ErrorResult(BusinessMessages.RENT_NOT_EXISTS_IN_ORDERED_ADDITIONAL_PRODUCT);
+ }
+
+ private void checkIfRentExistsIsSuccess(String rentId) {
+ if (!checkIfRentExists(rentId).isSuccess()) {
+ throw new EntityNotFoundException(BusinessMessages.RENT_NOT_EXISTS_IN_ORDERED_ADDITIONAL_PRODUCT);
+ }
+ }
+
+ private void checkIfOrderedAdditionalProductExists(int orderedAdditionalProductId) {
+ if (!this.orderedAdditionalProductDao.existsById(orderedAdditionalProductId)) {
+ throw new EntityNotFoundException(BusinessMessages.ORDERED_ADDITIONAL_PRODUCT_NOT_FOUND);
+ }
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/PaymentManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/PaymentManager.java
new file mode 100644
index 0000000..134bce6
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/PaymentManager.java
@@ -0,0 +1,117 @@
+package com.turkcell.rentacar.business.concretes;
+
+import javax.transaction.Transactional;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
+import com.turkcell.rentacar.business.abstracts.InvoiceService;
+import com.turkcell.rentacar.business.abstracts.OrderedAdditionalProductService;
+import com.turkcell.rentacar.business.abstracts.PaymentService;
+import com.turkcell.rentacar.business.abstracts.RentService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.requests.createRequests.CreateInvoiceRequest;
+import com.turkcell.rentacar.business.requests.createRequests.CreateMakePaymentRequest;
+import com.turkcell.rentacar.business.requests.createRequests.CreateOrderedAdditionalProductRequest;
+import com.turkcell.rentacar.business.requests.createRequests.CreatePaymentRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeletePaymentRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdatePaymentRequest;
+import com.turkcell.rentacar.core.services.abstracts.BaseBankPaymentServiceAdapter;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.PaymentDao;
+import com.turkcell.rentacar.entities.concretes.Payment;
+import com.turkcell.rentacar.exceptions.businessExceptions.PaymentFailedException;
+
+@Service
+public class PaymentManager implements PaymentService {
+
+ private PaymentDao paymentDao;
+ private ModelMapperService modelMapperService;
+ private BaseBankPaymentServiceAdapter baseBankPaymentServiceAdapter;
+
+ private RentService rentService;
+ private InvoiceService invoiceService;
+ private OrderedAdditionalProductService orderedAdditionalProductService;
+
+ @Autowired
+ public PaymentManager(PaymentDao paymentDao, ModelMapperService modelMapperService,
+ @Qualifier("halkbank") BaseBankPaymentServiceAdapter baseBankPaymentServiceAdapter, RentService rentService,
+ InvoiceService invoiceService, OrderedAdditionalProductService orderedAdditionalProductService) {
+ this.paymentDao = paymentDao;
+ this.modelMapperService = modelMapperService;
+ this.baseBankPaymentServiceAdapter = baseBankPaymentServiceAdapter;
+ this.rentService = rentService;
+ this.invoiceService = invoiceService;
+ this.orderedAdditionalProductService = orderedAdditionalProductService;
+
+ }
+
+ @Override
+ public Result add(CreateMakePaymentRequest createMakePaymentRequest) {
+
+ Payment payment = this.modelMapperService.forRequest().map(createMakePaymentRequest.getCreatePaymentRequest(),
+ Payment.class);
+
+ checkIfPaymentIsSuccess(payment);
+ runPaymentSuccessor(createMakePaymentRequest);
+
+ return new SuccessResult(BusinessMessages.PAYMENT_ADDED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result update(UpdatePaymentRequest updatePaymentRequest) {
+
+ Payment payment = this.modelMapperService.forRequest().map(updatePaymentRequest, Payment.class);
+
+ this.paymentDao.save(payment);
+
+ return new SuccessResult(BusinessMessages.PAYMENT_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result delete(DeletePaymentRequest deletePaymentRequest) {
+
+ Payment payment = this.modelMapperService.forRequest().map(deletePaymentRequest, Payment.class);
+
+ this.paymentDao.delete(payment);
+
+ return new SuccessResult(BusinessMessages.PAYMENT_DELETED_SUCCESSFULLY);
+ }
+
+ private void checkIfPaymentIsSuccess(Payment payment) {
+ if (!this.baseBankPaymentServiceAdapter.payment(payment)) {
+ throw new PaymentFailedException(BusinessMessages.PAYMENT_FAILED);
+ }
+ }
+
+ @Transactional
+ public void runPaymentSuccessor(CreateMakePaymentRequest createMakePaymentRequest) {
+
+ // rentAdd
+ String rentId = this.rentService.addIndividualCustomer(createMakePaymentRequest.getCreateRentRequest())
+ .getData();
+
+ // invoiceAdd
+ CreateInvoiceRequest createInvoiceRequest = createMakePaymentRequest.getCreateInvoiceRequest();
+ createInvoiceRequest.setRentId(rentId);
+ this.invoiceService.add(createInvoiceRequest);
+
+ // orderedAdditionalProductAdd
+ for (CreateOrderedAdditionalProductRequest createOrderedAdditionalProductRequest : createMakePaymentRequest
+ .getCreateOrderedAdditionalProductRequests()) {
+ createOrderedAdditionalProductRequest.setRentId(rentId);
+ this.orderedAdditionalProductService.add(createOrderedAdditionalProductRequest);
+ }
+
+ // paymentAdd
+ CreatePaymentRequest createPaymentRequest = createMakePaymentRequest.getCreatePaymentRequest();
+ createPaymentRequest.setRentId(rentId);
+ this.paymentDao.save(this.modelMapperService.forRequest()
+ .map(this.modelMapperService.forRequest().map(createPaymentRequest, Payment.class), Payment.class));
+
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/RentManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/RentManager.java
new file mode 100644
index 0000000..2e65c1a
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/RentManager.java
@@ -0,0 +1,272 @@
+package com.turkcell.rentacar.business.concretes;
+
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+import javax.persistence.EntityNotFoundException;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import com.turkcell.rentacar.business.abstracts.CarMaintenanceService;
+import com.turkcell.rentacar.business.abstracts.RentService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.dtos.getDtos.RentGetDto;
+import com.turkcell.rentacar.business.dtos.listDtos.RentListDto;
+import com.turkcell.rentacar.business.requests.createRequests.CreateRentRequest;
+import com.turkcell.rentacar.business.requests.deleteRequests.DeleteRentRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateDeliveryDateToRentRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateEndedKilometerInfoRequest;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateRentRequest;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.DataResult;
+import com.turkcell.rentacar.core.utilities.results.ErrorDataResult;
+import com.turkcell.rentacar.core.utilities.results.ErrorResult;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessDataResult;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.RentDao;
+import com.turkcell.rentacar.entities.concretes.OrderedAdditionalProduct;
+import com.turkcell.rentacar.entities.concretes.Rent;
+import com.turkcell.rentacar.exceptions.businessExceptions.CarIsAlreadyInMaintenanceException;
+import com.turkcell.rentacar.exceptions.businessExceptions.CarIsAlreadyInRentException;
+
+@Service
+public class RentManager implements RentService {
+
+ private RentDao rentDao;
+ private ModelMapperService modelMapperService;
+ private CarMaintenanceService carMaintenanceService;
+
+ @Autowired
+ public RentManager(RentDao rentDao, ModelMapperService modelMapperService,
+ @Lazy CarMaintenanceService carMaintenanceService) {
+ this.rentDao = rentDao;
+ this.modelMapperService = modelMapperService;
+ this.carMaintenanceService = carMaintenanceService;
+ }
+
+ @Override
+ public Result addCorporateCustomer(CreateRentRequest createRentRequest) {
+
+ checkIfCarAlreadyInMaintenance(createRentRequest.getCarId());
+ checkIfCarAlreadyInRentIsSuccess(createRentRequest.getCarId());
+
+ Rent rent = this.modelMapperService.forRequest().map(createRentRequest, Rent.class);
+
+ rent.setRentId(makeRentId());
+
+ checkIfRentReturnDateIsAfterNow(rent);
+
+ this.rentDao.save(rent);
+
+ return new SuccessResult(BusinessMessages.RENT_ADDED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult addIndividualCustomer(CreateRentRequest createRentRequest) {
+
+ checkIfCarAlreadyInMaintenance(createRentRequest.getCarId());
+ checkIfCarAlreadyInRentIsSuccess(createRentRequest.getCarId());
+
+ Rent rent = this.modelMapperService.forRequest().map(createRentRequest, Rent.class);
+
+ String rentId = makeRentId();
+ rent.setRentId(rentId);
+
+ checkIfRentReturnDateIsAfterNow(rent);
+
+ this.rentDao.save(rent);
+
+ return new SuccessDataResult(rentId, BusinessMessages.RENT_ADDED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result update(UpdateRentRequest updateRentRequest) {
+
+ Rent rent = this.modelMapperService.forRequest().map(updateRentRequest, Rent.class);
+
+ checkIfRentReturnDateIsAfterNow(rent);
+
+ this.rentDao.save(rent);
+
+ return new SuccessResult(BusinessMessages.RENT_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result delete(DeleteRentRequest deleteRentRequest) {
+
+ Rent rent = this.modelMapperService.forRequest().map(deleteRentRequest, Rent.class);
+
+ this.rentDao.delete(rent);
+
+ return new SuccessResult(BusinessMessages.RENT_DELETED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getAll() {
+
+ List result = this.rentDao.findAll();
+ List response = result.stream()
+ .map(rent -> modelMapperService.forDto().map(rent, RentListDto.class)).collect(Collectors.toList());
+
+ return new SuccessDataResult>(response, BusinessMessages.RENTS_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult getRentDetailsByRentId(String rentId) {
+
+ Rent result = this.rentDao.getById(rentId);
+ RentGetDto response = this.modelMapperService.forDto().map(result, RentGetDto.class);
+
+ return new SuccessDataResult(response, BusinessMessages.RENT_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult> getByCarId(int carId) {
+
+ List result = this.rentDao.getByCar_CarId(carId);
+ List response = result.stream().map(rent -> modelMapperService.forDto().map(rent, RentGetDto.class))
+ .collect(Collectors.toList());
+
+ return new SuccessDataResult>(response, BusinessMessages.RENTS_FOR_CAR_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result checkIfCarAlreadyInRent(int carId) {
+ for (Rent rent : this.rentDao.getByCar_CarId(carId)) {
+ if (!rent.isRentStatus()) {
+ return new SuccessResult(BusinessMessages.CAR_NOT_IN_RENT);
+ }
+ }
+ return new ErrorResult(BusinessMessages.CAR_ALREADY_IN_RENT);
+ }
+
+ @Override
+ public DataResult> getOrderedAdditionalProductsByRentId(String rentId) {
+
+ List result = this.rentDao.getOrderedAdditionalProductsByRentId(rentId);
+
+ return new SuccessDataResult>(result,
+ BusinessMessages.ORDERED_ADDITIONAL_PRODUCT_FOR_RENT_LISTED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult calculateRentTotalPrice(String rentId) {
+
+ Rent rent = this.rentDao.getById(rentId);
+
+ long usageTime = ChronoUnit.DAYS.between(rent.getRentDate(), rent.getRentReturnDate());
+
+ double rentTotalPrice = (rent.getCar().getDailyPrice() * usageTime);
+
+ return new SuccessDataResult<>(rentTotalPrice, BusinessMessages.RENT_TOTAL_PRICE_CALCULATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result checkIfReturnCityIsDifferentForRentalCityIsSuccess(String rentId) {
+
+ Rent rent = this.rentDao.getById(rentId);
+
+ if (!rent.getRentalCity().equals(rent.getReturnCity())) {
+ return new SuccessResult(BusinessMessages.CITIES_ARE_DIFFERENT);
+ }
+
+ return new ErrorResult(BusinessMessages.CITIES_ARE_SAME);
+ }
+
+ @Override
+ public Result updateEndedKilometer(UpdateEndedKilometerInfoRequest updateEndedKilometerInfoRequest) {
+
+ checkIfRentExists(updateEndedKilometerInfoRequest.getRentId());
+
+ this.rentDao.updateEndedKilometerInfoToRentByRentId(updateEndedKilometerInfoRequest.getRentId(),
+ updateEndedKilometerInfoRequest.getEndedKilometerInfo());
+
+ return new SuccessResult(BusinessMessages.ENDED_KILOMETER_INFO_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public Result updateDeliveryDate(UpdateDeliveryDateToRentRequest updateDeliveryDateToRentRequest) {
+
+ checkIfRentExists(updateDeliveryDateToRentRequest.getRentId());
+
+ this.rentDao.updateDeliveryDateToRentByRentId(updateDeliveryDateToRentRequest.getRentId(),
+ updateDeliveryDateToRentRequest.getDeliveryDate());
+
+ return new SuccessResult(BusinessMessages.DELIVERY_DATE_UPDATED_SUCCESSFULLY);
+ }
+
+ @Override
+ public DataResult calculateDelayedDayPriceForRent(String rentId) {
+
+ Rent rent = this.rentDao.getById(rentId);
+
+ if (rent.getDeliveryDate() != null) {
+ if (!checkIfDeliveryDateAndRentReturnDateIsDifferent(rent.getDeliveryDate(), rent.getRentReturnDate())) {
+
+ long usageTime = ChronoUnit.DAYS.between(rent.getDeliveryDate(), rent.getRentReturnDate()) * (-1);
+
+ return new SuccessDataResult((rent.getCar().getDailyPrice() * usageTime));
+ }
+ }
+ return new ErrorDataResult(BusinessMessages.RENT_DELAYED_DAY_PRICE_CALCULATED_FAILED);
+ }
+
+ private boolean checkIfDeliveryDateAndRentReturnDateIsDifferent(LocalDate deliveryDate, LocalDate rentReturnDate) {
+
+ if (deliveryDate != null) {
+ if (deliveryDate.equals(rentReturnDate)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void checkIfCarAlreadyInRentIsSuccess(int carId) {
+
+ if (this.rentDao.existsByCar_CarId(carId)) {
+ if (!checkIfCarAlreadyInRent(carId).isSuccess()) {
+ throw new CarIsAlreadyInRentException(BusinessMessages.CAR_ALREADY_IN_RENT);
+ }
+ }
+ }
+
+ private void checkIfCarAlreadyInMaintenance(int carId) {
+
+ if (!checkIfCarExistInCarMaintenanceTable(carId)) {
+ if (!this.carMaintenanceService.checkIfCarIsAlreadyInMaintenance(carId).isSuccess()) {
+ throw new CarIsAlreadyInMaintenanceException(BusinessMessages.CAR_ALREADY_IN_MAINTENANCE);
+ }
+ }
+ }
+
+ private boolean checkIfCarExistInCarMaintenanceTable(int id) {
+ return this.carMaintenanceService.getByCarId(id).getData().isEmpty();
+ }
+
+ private void checkIfRentReturnDateIsAfterNow(Rent rent) {
+
+ if (rent.getRentReturnDate() != null) {
+ if (!rent.getRentReturnDate().isAfter(LocalDate.now())) {
+ rent.setRentStatus(false);
+ }
+ }
+ }
+
+ private void checkIfRentExists(String rentId) {
+
+ if (!this.rentDao.existsById(rentId)) {
+ throw new EntityNotFoundException(BusinessMessages.RENT_NOT_FOUND);
+ }
+ }
+
+ private String makeRentId() {
+ return UUID.randomUUID().toString();
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/UserManager.java b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/UserManager.java
new file mode 100644
index 0000000..f96fc8b
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/concretes/UserManager.java
@@ -0,0 +1,55 @@
+package com.turkcell.rentacar.business.concretes;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.turkcell.rentacar.business.abstracts.UserService;
+import com.turkcell.rentacar.business.constants.messages.BusinessMessages;
+import com.turkcell.rentacar.business.requests.updateRequests.UpdateUserRequest;
+import com.turkcell.rentacar.core.utilities.mapping.ModelMapperService;
+import com.turkcell.rentacar.core.utilities.results.Result;
+import com.turkcell.rentacar.core.utilities.results.SuccessResult;
+import com.turkcell.rentacar.dataAccess.abstracts.UserDao;
+import com.turkcell.rentacar.entities.abstracts.User;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityAlreadyExistsException;
+import com.turkcell.rentacar.exceptions.businessExceptions.EntityNotFoundException;
+
+@Service
+public class UserManager implements UserService {
+
+ private UserDao userDao;
+ private ModelMapperService modelMapperService;
+
+ @Autowired
+ public UserManager(UserDao userDao, ModelMapperService modelMapperService) {
+ this.userDao = userDao;
+ this.modelMapperService = modelMapperService;
+ }
+
+ @Override
+ public Result update(UpdateUserRequest updateUserRequest) {
+
+ checkIfUserExists(updateUserRequest.getUserId());
+
+ existsByEmail(updateUserRequest.getEmail());
+
+ User user = this.modelMapperService.forRequest().map(updateUserRequest, User.class);
+
+ this.userDao.save(user);
+
+ return new SuccessResult(BusinessMessages.USER_UPDATED_SUCCESSFULLY);
+ }
+
+ private void checkIfUserExists(int userId) {
+ if (!this.userDao.existsById(userId)) {
+ throw new EntityNotFoundException(BusinessMessages.USER_NOT_FOUND);
+ }
+ }
+
+ private void existsByEmail(String email) {
+ if (this.userDao.existsByEmail(email)) {
+ throw new EntityAlreadyExistsException(BusinessMessages.EMAIL_ALREADY_EXISTS);
+ }
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/constants/messages/BusinessMessages.java b/rentacar/src/main/java/com/turkcell/rentacar/business/constants/messages/BusinessMessages.java
new file mode 100644
index 0000000..71ae286
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/constants/messages/BusinessMessages.java
@@ -0,0 +1,135 @@
+package com.turkcell.rentacar.business.constants.messages;
+
+public class BusinessMessages {
+
+ // ADDITIONAL_PRODUCT
+ public static final String ADDITIONAL_PRODUCT_ADDED_SUCCESSFULLY = "ADDITIONAL_PRODUCT_ADDED_SUCCESSFULLY";
+ public static final String ADDITIONAL_PRODUCT_UPDATED_SUCCESSFULLY = "ADDITIONAL_PRODUCT_UPDATED_SUCCESSFULLY";
+ public static final String ADDITIONAL_PRODUCT_DELETED_SUCCESSFULLY = "ADDITIONAL_PRODUCT_DELETED_SUCCESSFULLY";
+ public static final String ADDITIONAL_PRODUCT_LISTED_SUCCESSFULLY = "ADDITIONAL_PRODUCT_LISTED_SUCCESSFULLY";
+ public static final String ADDITIONAL_PRODUCT_NOT_FOUND = "ADDITIONAL_PRODUCT_NOT_FOUND";
+ public static final String ADDITIONAL_PRODUCT_ALREADY_EXISTS = "ADDITIONAL_PRODUCT_ALREADY_EXISTS";
+
+ // BRAND
+ public static final String BRAND_ADDED_SUCCESSFULLY = "BRAND_ADDED_SUCCESSFULLY";
+ public static final String BRAND_UPDATED_SUCCESSFULLY = "BRAND_UPDATED_SUCCESSFULLY";
+ public static final String BRAND_DELETED_SUCCESSFULLY = "BRAND_DELETED_SUCCESSFULLY";
+ public static final String BRAND_LISTED_SUCCESSFULLY = "BRAND_LISTED_SUCCESSFULLY";
+ public static final String BRANDS_LISTED_SUCCESSFULLY = "BRANDS_LISTED_SUCCESSFULLY";
+ public static final String BRAND_NOT_FOUND = "BRAND_NOT_FOUND";
+ public static final String BRAND_ALREADY_EXISTS = "BRAND_ALREADY_EXISTS";
+
+ // CAR_DAMAGE
+ public static final String CAR_DAMAGE_ADDED_SUCCESSFULLY = "CAR_DAMAGE_ADDED_SUCCESSFULLY";
+ public static final String CAR_DAMAGE_UPDATED_SUCCESSFULLY = "CAR_DAMAGE_UPDATED_SUCCESSFULLY";
+ public static final String CAR_DAMAGE_DELETED_SUCCESSFULLY = "CAR_DAMAGE_DELETED_SUCCESSFULLY";
+ public static final String CAR_DAMAGE_LISTED_SUCCESSFULLY = "CAR_DAMAGE_LISTED_SUCCESSFULLY";
+
+ // CAR_MAINTENANCE
+ public static final String CAR_MAINTENANCE_ADDED_SUCCESSFULLY = "CAR_DAMAGE_LISTED_SUCCESSFULLY";
+ public static final String CAR_MAINTENANCE_UPDATED_SUCCESSFULLY = "CAR_MAINTENANCE_UPDATED_SUCCESSFULLY";
+ public static final String CAR_MAINTENANCE_DELETED_SUCCESSFULLY = "CAR_MAINTENANCE_DELETED_SUCCESSFULLY";
+ public static final String CAR_MAINTENANCE_LISTED_SUCCESSFULLY = "CAR_MAINTENANCE_LISTED_SUCCESSFULLY";
+ public static final String CAR_MAINTENANCES_LISTED_SUCCESSFULLY = "CAR_MAINTENANCES_LISTED_SUCCESSFULLY";
+ public static final String CAR_MAINTENANCE_NOT_FOUND = "CAR_MAINTENANCE_NOT_FOUND";
+ public static final String CAR_NOT_IN_MAINTENANCE = "CAR_NOT_IN_MAINTENANCE";
+ public static final String CAR_MAINTENANCES_FOR_CAR_LISTED_SUCCESSFULLY = "CAR_MAINTENANCES_FOR_CAR_LISTED_SUCCESSFULLY";
+ public static final String A_FUTURE_DATE_CANNOT_BE_ENTERED = "A_FUTURE_DATE_CANNOT_BE_ENTERED";
+
+ // CAR
+ public static final String CAR_ADDED_SUCCESSFULLY = "CAR_ADDED_SUCCESSFULLY";
+ public static final String CAR_UPDATED_SUCCESSFULLY = "CAR_UPDATED_SUCCESSFULLY";
+ public static final String BRAND_CAR_UPDATED_SUCCESSFULLY = "BRAND_CAR_UPDATED_SUCCESSFULLY";
+ public static final String COLOR_CAR_UPDATED_SUCCESSFULLY = "COLOR_CAR_UPDATED_SUCCESSFULLY";
+ public static final String KILOMETER_INFO_CAR_UPDATED_SUCCESSFULLY = "KILOMETER_INFO_CAR_UPDATED_SUCCESSFULLY";
+ public static final String CAR_DELETED_SUCCESSFULLY = "CAR_DELETED_SUCCESSFULLY";
+ public static final String CAR_LISTED_SUCCESSFULLY = "CAR_LISTED_SUCCESSFULLY";
+ public static final String CARS_LISTED_SUCCESSFULLY = "CARS_LISTED_SUCCESSFULLY";
+ public static final String CAR_LISTED_SUCCESSFULLY_BY_DAILY_PRICE = "CAR_LISTED_SUCCESSFULLY_BY_DAILY_PRICE";
+ public static final String CAR_LISTED_AND_PAGINATED_SUCCESSFULLY = "CAR_LISTED_AND_PAGINATED_SUCCESSFULLY";
+ public static final String CAR_SORTED_SUCCESSFULLY = "CAR_SORTED_SUCCESSFULLY";
+ public static final String CAR_NOT_FOUND = "CAR_NOT_FOUND";
+ public static final String CAR_ALREADY_IN_RENT = "CAR_ALREADY_IN_RENT";
+ public static final String CAR_ALREADY_IN_MAINTENANCE = "CAR_ALREADY_IN_MAINTENANCE";
+
+ // COLOR
+ public static final String COLOR_ADDED_SUCCESSFULLY = "COLOR_ADDED_SUCCESSFULLY";
+ public static final String COLOR_UPDATED_SUCCESSFULLY = "COLOR_UPDATED_SUCCESSFULLY";
+ public static final String COLOR_DELETED_SUCCESSFULLY = "COLOR_DELETED_SUCCESSFULLY";
+ public static final String COLOR_LISTED_SUCCESSFULLY = "COLOR_LISTED_SUCCESSFULLY";
+ public static final String COLORS_LISTED_SUCCESSFULLY = "COLORS_LISTED_SUCCESSFULLY";
+ public static final String COLOR_NOT_FOUND = "COLOR_NOT_FOUND";
+ public static final String COLOR_ALREADY_EXISTS = "COLOR_ALREADY_EXISTS";
+
+ // CORPORATE_CUSTOMER
+ public static final String CORPORATE_CUSTOMER_ADDED_SUCCESSFULLY = "CORPORATE_CUSTOMER_ADDED_SUCCESSFULLY";
+ public static final String CORPORATE_CUSTOMER_UPDATED_SUCCESSFULLY = "CORPORATE_CUSTOMER_UPDATED_SUCCESSFULLY";
+ public static final String CORPORATE_CUSTOMER_DELETED_SUCCESSFULLY = "CORPORATE_CUSTOMER_DELETED_SUCCESSFULLY";
+ public static final String CORPORATE_CUSTOMER_NOT_FOUND = "CORPORATE_CUSTOMER_NOT_FOUND";
+
+ // CUSTOMER
+ public static final String CUSTOMERS_LISTED_SUCCESSFULLY = "CUSTOMERS_LISTED_SUCCESSFULLY";
+
+ // INDIVIDUAL_CUSTOMER
+ public static final String INDIVIDUAL_CUSTOMER_ADDED_SUCCESSFULLY = "INDIVIDUAL_CUSTOMER_ADDED_SUCCESSFULLY";
+ public static final String INDIVIDUAL_CUSTOMER_UPDATED_SUCCESSFULLY = "INDIVIDUAL_CUSTOMER_UPDATED_SUCCESSFULLY";
+ public static final String INDIVIDUAL_CUSTOMER_DELETED_SUCCESSFULLY = "INDIVIDUAL_CUSTOMER_DELETED_SUCCESSFULLY";
+ public static final String INDIVIDUAL_CUSTOMER_NOT_FOUND = "INDIVIDUAL_CUSTOMER_NOT_FOUND";
+ public static final String NATIONAL_IDENTITY_NOT_VALID = "NATIONAL_IDENTITY_NOT_VALID";
+
+ // INVOICE
+ public static final String INVOICE_ADDED_SUCCESSFULLY = "INVOICE_ADDED_SUCCESSFULLY";
+ public static final String INVOICE_UPDATED_SUCCESSFULLY = "INVOICE_UPDATED_SUCCESSFULLY";
+ public static final String INVOICE_DELETED_SUCCESSFULLY = "INVOICE_DELETED_SUCCESSFULLY";
+ public static final String INVOICE_LISTED_SUCCESSFULLY = "INVOICE_LISTED_SUCCESSFULLY";
+ public static final String INVOICES_LISTED_SUCCESSFULLY = "INVOICES_LISTED_SUCCESSFULLY";
+ public static final String USERS_INVOICES_LISTED_SUCCESSFULLY = "USERS_INVOICES_LISTED_SUCCESSFULLY";
+ public static final String INVOICE_NOT_FOUND = "INVOICE_NOT_FOUND";
+ public static final String INVOICE_BETWEEN_START_DATE_AND_END_DATE_LISTED_SUCCESSFULLY = "INVOICE_BETWEEN_START_DATE_AND_END_DATE_LISTED_SUCCESSFULLY";
+
+ // ORDERED_ADDITIONAL_PRODUCT
+ public static final String ORDERED_ADDITIONAL_PRODUCT_ADDED_SUCCESSFULLY = "ORDERED_ADDITIONAL_PRODUCT_ADDED_SUCCESSFULLY";
+ public static final String ORDERED_ADDITIONAL_PRODUCT_UPDATED_SUCCESSFULLY = "ORDERED_ADDITIONAL_PRODUCT_UPDATED_SUCCESSFULLY";
+ public static final String ORDERED_ADDITIONAL_PRODUCT_DELETED_SUCCESSFULLY = "ORDERED_ADDITIONAL_PRODUCT_DELETED_SUCCESSFULLY";
+ public static final String ORDERED_ADDITIONAL_PRODUCTS_LISTED_SUCCESSFULLY = "ORDERED_ADDITIONAL_PRODUCTS_LISTED_SUCCESSFULLY";
+ public static final String ORDERED_ADDITIONAL_PRODUCT_FOR_RENT_LISTED_SUCCESSFULLY = "ORDERED_ADDITIONAL_PRODUCT_FOR_RENT_LISTED_SUCCESSFULLY";
+ public static final String ORDERED_ADDITIONAL_PRODUCT_NOT_FOUND = "ORDERED_ADDITIONAL_PRODUCT_NOT_FOUND";
+ public static final String RENT_NOT_EXISTS_IN_ORDERED_ADDITIONAL_PRODUCT = "RENT_NOT_EXISTS_IN_ORDERED_ADDITIONAL_PRODUCT";
+ public static final String RENT_ALREADY_EXISTS_IN_ORDERED_ADDITIONAL_PRODUCT = "RENT_ALREADY_EXISTS_IN_ORDERED_ADDITIONAL_PRODUCT";
+ public static final String ORDERED_ADDITIONAL_PRODUCT_PRICE_CALCULATED_SUCCESSFULLY = "ORDERED_ADDITIONAL_PRODUCT_PRICE_CALCULATED_SUCCESSFULLY";
+
+ // PAYMENT
+ public static final String PAYMENT_ADDED_SUCCESSFULLY = "PAYMENT_ADDED_SUCCESSFULLY";
+ public static final String PAYMENT_UPDATED_SUCCESSFULLY = "PAYMENT_UPDATED_SUCCESSFULLY";
+ public static final String PAYMENT_DELETED_SUCCESSFULLY = "PAYMENT_DELETED_SUCCESSFULLY";
+ public static final String PAYMENT_FAILED = "PAYMENT_FAILED";
+
+ // RENT
+ public static final String RENT_ADDED_SUCCESSFULLY = "RENT_ADDED_SUCCESSFULLY";
+ public static final String RENT_UPDATED_SUCCESSFULLY = "RENT_UPDATED_SUCCESSFULLY";
+ public static final String ENDED_KILOMETER_INFO_UPDATED_SUCCESSFULLY = "ENDED_KILOMETER_INFO_UPDATED_SUCCESSFULLY";
+ public static final String DELIVERY_DATE_UPDATED_SUCCESSFULLY = "DELIVERY_DATE_UPDATED_SUCCESSFULLY";
+ public static final String RENT_DELETED_SUCCESSFULLY = "RENT_DELETED_SUCCESSFULLY";
+ public static final String RENT_LISTED_SUCCESSFULLY = "RENT_LISTED_SUCCESSFULLY";
+ public static final String RENTS_LISTED_SUCCESSFULLY = "RENTS_LISTED_SUCCESSFULLY";
+ public static final String RENTS_FOR_CAR_LISTED_SUCCESSFULLY = "RENTS_FOR_CAR_LISTED_SUCCESSFULLY";
+ public static final String CAR_NOT_IN_RENT = "CAR_NOT_IN_RENT";
+ public static final String CITIES_ARE_SAME = "CITIES_ARE_SAME";
+ public static final String CITIES_ARE_DIFFERENT = "CITIES_ARE_DIFFERENT";
+ public static final String RENT_TOTAL_PRICE_CALCULATED_SUCCESSFULLY = "RENT_TOTAL_PRICE_CALCULATED_SUCCESSFULLY";
+ public static final String RENT_DELAYED_DAY_PRICE_CALCULATED_FAILED = "RENT_DELAYED_DAY_PRICE_CALCULATED_FAILED";
+ public static final String RENT_NOT_FOUND = "RENT_NOT_FOUND";
+
+ // USER
+ public static final String USER_UPDATED_SUCCESSFULLY = "USER_UPDATED_SUCCESSFULLY";
+ public static final String USER_NOT_FOUND = "USER_NOT_FOUND";
+ public static final String EMAIL_ALREADY_EXISTS = "EMAIL_ALREADY_EXISTS";
+
+ // CREDIT_CARD
+ public static final String CREDIT_CARD_ADDED_SUCCESSFULLY = "CREDIT_CARD_ADDED_SUCCESSFULLY";
+ public static final String CREDIT_CARD_UPDATED_SUCCESSFULLY = "CREDIT_CARD_UPDATED_SUCCESSFULLY";
+ public static final String CREDIT_CARD_DELETED_SUCCESSFULLY = "CREDIT_CARD_DELETED_SUCCESSFULLY";
+ public static final String CREDIT_CARD_LISTED_SUCCESSFULLY = "CREDIT_CARD_LISTED_SUCCESSFULLY";
+ public static final String CREDIT_CARDS_LISTED_SUCCESSFULLY = "CREDIT_CARDS_LISTED_SUCCESSFULLY";
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/BrandListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/BrandListDto.java
new file mode 100644
index 0000000..484b7c7
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/BrandListDto.java
@@ -0,0 +1,15 @@
+package com.turkcell.rentacar.business.dtos;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BrandListDto {
+
+ private int id;
+ private String name;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/CarListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/CarListDto.java
new file mode 100644
index 0000000..780504b
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/CarListDto.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.dtos;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CarListDto {
+
+ private double dailyPrice;
+ private String modelYear;
+ private String description;
+
+ private String brandName;
+ private String colorName;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/ColorListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/ColorListDto.java
new file mode 100644
index 0000000..8025fa5
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/ColorListDto.java
@@ -0,0 +1,15 @@
+package com.turkcell.rentacar.business.dtos;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ColorListDto {
+
+ private int id;
+ private String name;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/AdditionalProductGetDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/AdditionalProductGetDto.java
new file mode 100644
index 0000000..cd28e1f
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/AdditionalProductGetDto.java
@@ -0,0 +1,15 @@
+package com.turkcell.rentacar.business.dtos.getDtos;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdditionalProductGetDto {
+
+ private String additionalProductName;
+
+ private double additionalProductUnitPrice;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/CarMaintenanceGetDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/CarMaintenanceGetDto.java
new file mode 100644
index 0000000..5f27cf8
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/CarMaintenanceGetDto.java
@@ -0,0 +1,20 @@
+package com.turkcell.rentacar.business.dtos.getDtos;
+
+import java.time.LocalDate;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CarMaintenanceGetDto {
+
+ private String description;
+ private LocalDate returnDate;
+ private int brandName;
+ private double dailyPrice;
+ private int modelYear;
+ private String colorName;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/CreditCardGetDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/CreditCardGetDto.java
new file mode 100644
index 0000000..3888161
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/CreditCardGetDto.java
@@ -0,0 +1,25 @@
+package com.turkcell.rentacar.business.dtos.getDtos;
+
+import java.time.LocalDate;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreditCardGetDto {
+
+ private String creditCardNo;
+
+ private String cardHolder;
+
+ private LocalDate expirationDate;
+
+ private String cvv;
+
+ private int userId;
+
+ private String email;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/OrderedAdditionalProductGetDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/OrderedAdditionalProductGetDto.java
new file mode 100644
index 0000000..c388e3b
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/OrderedAdditionalProductGetDto.java
@@ -0,0 +1,20 @@
+package com.turkcell.rentacar.business.dtos.getDtos;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OrderedAdditionalProductGetDto {
+
+ private int orderedAdditionalProductAmount;
+
+ private String brandName;
+
+ private String additionalProductName;
+
+ private double additionalProductUnitPrice;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/RentCityGetDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/RentCityGetDto.java
new file mode 100644
index 0000000..dcabd58
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/RentCityGetDto.java
@@ -0,0 +1,20 @@
+package com.turkcell.rentacar.business.dtos.getDtos;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RentCityGetDto {
+
+ private String brandName;
+
+ private double additionalServicePrice;
+
+ private String rentalCityName;
+
+ private String returnCityname;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/RentGetDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/RentGetDto.java
new file mode 100644
index 0000000..793a658
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/getDtos/RentGetDto.java
@@ -0,0 +1,38 @@
+package com.turkcell.rentacar.business.dtos.getDtos;
+
+import java.time.LocalDate;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RentGetDto {
+
+ private int rentId;
+
+ private LocalDate rentDate;
+
+ private LocalDate rentReturnDate;
+
+ private boolean rentStatus;
+
+ private int carId;
+
+ private String brandName;
+
+ private double dailyPrice;
+
+ private String modelYear;
+
+ private String colorName;
+
+ private double additionalServicePrice;
+
+ private String rentalCity;
+
+ private String returnCity;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/AdditionalProductListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/AdditionalProductListDto.java
new file mode 100644
index 0000000..ffbf2cd
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/AdditionalProductListDto.java
@@ -0,0 +1,17 @@
+package com.turkcell.rentacar.business.dtos.listDtos;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdditionalProductListDto {
+
+ private String additionalProductName;
+
+ private double additionalProductUnitPrice;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/BrandListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/BrandListDto.java
new file mode 100644
index 0000000..24723d3
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/BrandListDto.java
@@ -0,0 +1,15 @@
+package com.turkcell.rentacar.business.dtos.listDtos;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BrandListDto {
+
+ private int id;
+ private String name;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CarDamageListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CarDamageListDto.java
new file mode 100644
index 0000000..defb475
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CarDamageListDto.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.dtos.listDtos;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CarDamageListDto {
+
+ private String damageInfo;
+
+ private String modelYear;
+ private String description;
+
+ private String brandName;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CarListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CarListDto.java
new file mode 100644
index 0000000..03bf4d2
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CarListDto.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.dtos.listDtos;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CarListDto {
+
+ private double dailyPrice;
+ private String modelYear;
+ private String description;
+
+ private String brandName;
+ private String colorName;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CarMaintenanceListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CarMaintenanceListDto.java
new file mode 100644
index 0000000..9cba59e
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CarMaintenanceListDto.java
@@ -0,0 +1,18 @@
+package com.turkcell.rentacar.business.dtos.listDtos;
+
+import java.time.LocalDate;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CarMaintenanceListDto {
+
+ private String description;
+ private LocalDate returnDate;
+ private String brandName;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/ColorListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/ColorListDto.java
new file mode 100644
index 0000000..c39a97e
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/ColorListDto.java
@@ -0,0 +1,15 @@
+package com.turkcell.rentacar.business.dtos.listDtos;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ColorListDto {
+
+ private int id;
+ private String name;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CreditCardListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CreditCardListDto.java
new file mode 100644
index 0000000..29a557d
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CreditCardListDto.java
@@ -0,0 +1,23 @@
+package com.turkcell.rentacar.business.dtos.listDtos;
+
+import java.time.LocalDate;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreditCardListDto {
+
+ private String creditCardNo;
+
+ private String cardHolder;
+
+ private LocalDate expirationDate;
+
+ private String cvv;
+
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CustomerListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CustomerListDto.java
new file mode 100644
index 0000000..b39e95a
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/CustomerListDto.java
@@ -0,0 +1,18 @@
+package com.turkcell.rentacar.business.dtos.listDtos;
+
+import java.time.LocalDate;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CustomerListDto {
+
+ private String email;
+
+ private LocalDate dateRegistered;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/InvioceListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/InvioceListDto.java
new file mode 100644
index 0000000..6978fbc
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/InvioceListDto.java
@@ -0,0 +1,26 @@
+package com.turkcell.rentacar.business.dtos.listDtos;
+
+import java.time.LocalDate;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class InvioceListDto {
+
+ private LocalDate invoiceCreateDate;
+
+ private double totalPrice;
+
+ private LocalDate rentDate;
+
+ private LocalDate rentReturnDate;
+
+ private String rentalCity;
+
+ private String returnCity;
+
+ private String email;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/OrderedAdditionalProductListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/OrderedAdditionalProductListDto.java
new file mode 100644
index 0000000..55eaa94
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/OrderedAdditionalProductListDto.java
@@ -0,0 +1,23 @@
+package com.turkcell.rentacar.business.dtos.listDtos;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OrderedAdditionalProductListDto {
+
+
+ private int orderedAdditionalProductAmount;
+
+ private int additionalProductId;
+ private String additionalProductName;
+ private double additionalProductUnitPrice;
+
+
+
+
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/RentCityListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/RentCityListDto.java
new file mode 100644
index 0000000..11b5098
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/RentCityListDto.java
@@ -0,0 +1,20 @@
+package com.turkcell.rentacar.business.dtos.listDtos;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RentCityListDto {
+
+ private String brandName;
+
+ private double additionalServicePrice;
+
+ private String rentalCityName;
+
+ private String returnCityname;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/RentListDto.java b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/RentListDto.java
new file mode 100644
index 0000000..fd70cf1
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/dtos/listDtos/RentListDto.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.dtos.listDtos;
+
+import java.time.LocalDate;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RentListDto {
+
+ private LocalDate rentDate;
+ private LocalDate rentReturnDate;
+ private boolean rentStatus;
+ private String brandName;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateAdditionalProductRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateAdditionalProductRequest.java
new file mode 100644
index 0000000..6a3fc8b
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateAdditionalProductRequest.java
@@ -0,0 +1,24 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateAdditionalProductRequest {
+
+ @NotNull
+ @Size(min = 2)
+ private String additionalProductName;
+
+ @NotNull
+ @Min(0)
+ private double additionalProductUnitPrice;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateBrandRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateBrandRequest.java
new file mode 100644
index 0000000..2f3b5de
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateBrandRequest.java
@@ -0,0 +1,18 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateBrandRequest {
+
+ @NotNull
+ @Size(min = 2)
+ private String brandName;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCarDamageRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCarDamageRequest.java
new file mode 100644
index 0000000..5e85336
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCarDamageRequest.java
@@ -0,0 +1,27 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateCarDamageRequest {
+
+ @NotNull
+ @Min(1)
+ private int carDamageId;
+
+ @NotNull
+ @Size(min = 2)
+ private String damageInfo;
+
+ @NotNull
+ @Min(1)
+ private int carId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCarMaintenanceRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCarMaintenanceRequest.java
new file mode 100644
index 0000000..d581516
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCarMaintenanceRequest.java
@@ -0,0 +1,28 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import java.time.LocalDate;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateCarMaintenanceRequest {
+
+ @NotNull
+ @Size(min = 2, max = 50)
+ private String description;
+
+ private LocalDate returnDate;
+
+ @NotNull
+ @Min(1)
+ private int carId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCarRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCarRequest.java
new file mode 100644
index 0000000..4e2f9aa
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCarRequest.java
@@ -0,0 +1,40 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateCarRequest {
+
+ @NotNull
+ @Min(0)
+ private double dailyPrice;
+
+ @NotNull
+ @Size(min = 2)
+ private String modelYear;
+
+ @NotNull
+ @Size(min = 2, max = 50)
+ private String description;
+
+ @NotNull
+ @Size(min = 2, max = 50)
+ private String kilometerInfo;
+
+ @NotNull
+ @Min(1)
+ private int brandId;
+
+ @NotNull
+ @Min(1)
+ private int colorId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateColorRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateColorRequest.java
new file mode 100644
index 0000000..db1ad08
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateColorRequest.java
@@ -0,0 +1,18 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateColorRequest {
+
+ @NotNull
+ @Size(min = 2)
+ private String colorName;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCorporateCustomerRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCorporateCustomerRequest.java
new file mode 100644
index 0000000..eab44d2
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCorporateCustomerRequest.java
@@ -0,0 +1,34 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.Size;
+
+import com.sun.istack.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateCorporateCustomerRequest {
+
+ @NotNull
+ @Size(min = 2, max = 30)
+ private String companyName;
+
+ @NotNull
+ @Size(min = 2, max = 30)
+ private String taxNumber;
+
+ @NotNull
+ @Size(min = 2, max = 20)
+ @Email(message = "This value is not email!")
+ private String email;
+
+ @NotNull
+ @Size(min = 2, max = 30)
+ private String password;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCreditCardRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCreditCardRequest.java
new file mode 100644
index 0000000..5cfd0b8
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCreditCardRequest.java
@@ -0,0 +1,37 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import java.time.LocalDate;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateCreditCardRequest {
+
+ @NotNull
+ @Size(min = 2)
+ private String creditCardNo;
+
+ @NotNull
+ @Size(min = 2)
+ private String cardHolder;
+
+ @NotNull
+ private LocalDate expirationDate;
+
+ @NotNull
+ @Size(min = 3)
+ private String cvv;
+
+ @NotNull
+ @Min(1)
+ private int userId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCustomerRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCustomerRequest.java
new file mode 100644
index 0000000..7866493
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateCustomerRequest.java
@@ -0,0 +1,5 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+public class CreateCustomerRequest {
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateIndividualCustomerRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateIndividualCustomerRequest.java
new file mode 100644
index 0000000..80cf980
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateIndividualCustomerRequest.java
@@ -0,0 +1,38 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.Size;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateIndividualCustomerRequest {
+
+ @NotNull
+ @Size(min = 2, max = 20)
+ private String firstName;
+
+ @NotNull
+ @Size(min = 2, max = 20)
+ private String lastName;
+
+ @NotNull
+ @Size(min = 2, max = 11)
+ private String nationalIdentity;
+
+ @NotNull
+ @Size(min = 2, max = 20)
+ @Email(message = "This value is not email!")
+ private String email;
+
+ @NotNull
+ @Size(min = 2, max = 30)
+ private String password;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateInvoiceRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateInvoiceRequest.java
new file mode 100644
index 0000000..009e020
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateInvoiceRequest.java
@@ -0,0 +1,23 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateInvoiceRequest {
+
+ @NotNull
+ @Min(1)
+ private int userId;
+
+ @NotNull
+ @Min(1)
+ private String rentId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateMakePaymentRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateMakePaymentRequest.java
new file mode 100644
index 0000000..2a115c7
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateMakePaymentRequest.java
@@ -0,0 +1,26 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import java.util.List;
+
+import javax.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateMakePaymentRequest {
+
+ @NotNull
+ private CreatePaymentRequest createPaymentRequest;
+
+ @NotNull
+ private CreateRentRequest createRentRequest;
+
+ @NotNull
+ private CreateInvoiceRequest createInvoiceRequest;
+
+ private List createOrderedAdditionalProductRequests;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateOrderedAdditionalProductRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateOrderedAdditionalProductRequest.java
new file mode 100644
index 0000000..2623de4
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateOrderedAdditionalProductRequest.java
@@ -0,0 +1,27 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateOrderedAdditionalProductRequest {
+
+ @NotNull
+ @Min(1)
+ private int orderedAdditionalProductAmount;
+
+ @NotNull
+ @Min(1)
+ private String rentId;
+
+ @NotNull
+ @Min(1)
+ private int additionalProductId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreatePaymentRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreatePaymentRequest.java
new file mode 100644
index 0000000..bd12cc2
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreatePaymentRequest.java
@@ -0,0 +1,44 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import java.time.LocalDate;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreatePaymentRequest {
+
+ @NotNull
+ @Size(min = 2)
+ private String creditCardNo;
+
+ @NotNull
+ @Size(min = 2)
+ private String cardHolder;
+
+ @NotNull
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
+ private LocalDate expirationDate;
+
+ @NotNull
+ @Size(min = 3)
+ private String cvv;
+
+ @NotNull
+ @Min(1)
+ private int userId;
+
+ @NotNull
+ @Min(1)
+ private String rentId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateRentRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateRentRequest.java
new file mode 100644
index 0000000..04c4658
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateRentRequest.java
@@ -0,0 +1,42 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import java.time.LocalDate;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateRentRequest {
+
+ @NotNull
+ private LocalDate rentDate;
+
+ @NotNull
+ private LocalDate rentReturnDate;
+
+ @NotNull
+ private String startedKilometerInfo;
+
+ @NotNull
+ @Min(1)
+ private int carId;
+
+ @NotNull
+ @Min(1)
+ private int rentalCityId;
+
+ @NotNull
+ @Min(1)
+ private int returnCityId;
+
+ @NotNull
+ @Min(1)
+ private int userId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateUserRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateUserRequest.java
new file mode 100644
index 0000000..5b27773
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/createRequests/CreateUserRequest.java
@@ -0,0 +1,25 @@
+package com.turkcell.rentacar.business.requests.createRequests;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.Size;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateUserRequest {
+
+ @NotNull
+ @Size(min = 2, max = 20)
+ @Email(message = "This value is not email!")
+ private String email;
+
+ @NotNull
+ @Size(min = 2, max = 30)
+ private String password;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteAdditionalProductRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteAdditionalProductRequest.java
new file mode 100644
index 0000000..ceda28c
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteAdditionalProductRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteAdditionalProductRequest {
+
+ @NotNull
+ @Min(1)
+ private int additionalProductId;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteBrandRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteBrandRequest.java
new file mode 100644
index 0000000..d2e5eea
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteBrandRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteBrandRequest {
+
+ @NotNull
+ @Min(1)
+ private int brandId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCarDamageRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCarDamageRequest.java
new file mode 100644
index 0000000..c3ef490
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCarDamageRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteCarDamageRequest {
+
+ @NotNull
+ @Min(1)
+ private int carDamageId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCarMaintenanceRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCarMaintenanceRequest.java
new file mode 100644
index 0000000..2414ef4
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCarMaintenanceRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteCarMaintenanceRequest {
+
+ @NotNull
+ @Min(1)
+ private int carMaintenanceId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCarRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCarRequest.java
new file mode 100644
index 0000000..971c441
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCarRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteCarRequest {
+
+ @NotNull
+ @Min(1)
+ private int carId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteColorRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteColorRequest.java
new file mode 100644
index 0000000..1e6d9ef
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteColorRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteColorRequest {
+
+ @NotNull
+ @Min(1)
+ private int colorId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCorporateCustomerRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCorporateCustomerRequest.java
new file mode 100644
index 0000000..4653196
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCorporateCustomerRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+import javax.validation.constraints.Min;
+
+import com.sun.istack.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteCorporateCustomerRequest {
+
+ @NotNull
+ @Min(1)
+ private int userId;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCreditCardRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCreditCardRequest.java
new file mode 100644
index 0000000..c037e09
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCreditCardRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteCreditCardRequest {
+
+ @NotNull
+ @Min(1)
+ private int creditCardId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCustomerRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCustomerRequest.java
new file mode 100644
index 0000000..6379da2
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteCustomerRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteCustomerRequest {
+
+ @NotNull
+ @Min(1)
+ private int userId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteIndividualCustomerRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteIndividualCustomerRequest.java
new file mode 100644
index 0000000..1969e1c
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteIndividualCustomerRequest.java
@@ -0,0 +1,20 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+import javax.validation.constraints.Min;
+
+import com.sun.istack.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteIndividualCustomerRequest {
+
+ @NotNull
+ @Min(1)
+ private int userId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteInvoiceRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteInvoiceRequest.java
new file mode 100644
index 0000000..7ea704f
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteInvoiceRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteInvoiceRequest {
+
+ @NotNull
+ @Min(1)
+ private int invoiceId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteOrderedAdditionalProductRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteOrderedAdditionalProductRequest.java
new file mode 100644
index 0000000..89454c1
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteOrderedAdditionalProductRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteOrderedAdditionalProductRequest {
+
+ @NotNull
+ @Min(1)
+ private int orderedAdditionalProductId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeletePaymentRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeletePaymentRequest.java
new file mode 100644
index 0000000..cdf9c05
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeletePaymentRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeletePaymentRequest {
+
+ @NotNull
+ @Min(1)
+ private int paymentId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteRentRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteRentRequest.java
new file mode 100644
index 0000000..f9b220c
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteRentRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteRentRequest {
+
+ @NotNull
+ @Min(1)
+ private String rentId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteUserRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteUserRequest.java
new file mode 100644
index 0000000..ef231db
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/deleteRequests/DeleteUserRequest.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.business.requests.deleteRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeleteUserRequest {
+
+ @NotNull
+ @Min(1)
+ private int userId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateAdditionalProductRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateAdditionalProductRequest.java
new file mode 100644
index 0000000..b7945fd
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateAdditionalProductRequest.java
@@ -0,0 +1,28 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateAdditionalProductRequest {
+
+ @NotNull
+ @Min(1)
+ private int additionalProductId;
+
+ @NotNull
+ @Size(min = 2)
+ private String additionalProductName;
+
+ @NotNull
+ @Min(0)
+ private double additionalProductUnitPrice;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateBrandRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateBrandRequest.java
new file mode 100644
index 0000000..735c2ef
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateBrandRequest.java
@@ -0,0 +1,24 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateBrandRequest {
+
+ @NotNull
+ @Min(1)
+ private int brandId;
+
+ @NotNull
+ @Size(min = 2, max = 30)
+ private String brandName;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateBrandToCarRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateBrandToCarRequest.java
new file mode 100644
index 0000000..d1af360
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateBrandToCarRequest.java
@@ -0,0 +1,23 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateBrandToCarRequest {
+
+ @NotNull
+ @Min(1)
+ private int carId;
+
+ @NotNull
+ @Min(1)
+ private int brandId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCarDamageRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCarDamageRequest.java
new file mode 100644
index 0000000..742fa05
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCarDamageRequest.java
@@ -0,0 +1,28 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateCarDamageRequest {
+
+ @NotNull
+ @Min(1)
+ private int carDamageId;
+
+ @NotNull
+ @Size(min = 2)
+ private String damageInfo;
+
+ @NotNull
+ @Min(1)
+ private int carId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCarKilometerInfoRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCarKilometerInfoRequest.java
new file mode 100644
index 0000000..323fe7f
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCarKilometerInfoRequest.java
@@ -0,0 +1,24 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateCarKilometerInfoRequest {
+
+ @NotNull
+ @Min(1)
+ private int carId;
+
+ @NotNull
+ @Size(min = 2)
+ private String kilometerInfo;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCarMaintenanceRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCarMaintenanceRequest.java
new file mode 100644
index 0000000..aee59bf
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCarMaintenanceRequest.java
@@ -0,0 +1,33 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import java.time.LocalDate;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateCarMaintenanceRequest {
+
+ @NotNull
+ @Min(1)
+ private int carMaintenanceId;
+
+ @NotNull
+ @Size(min = 2, max = 50)
+ private String description;
+
+ private LocalDate returnDate;
+
+ @NotNull
+ @Min(1)
+ private int carId;
+
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCarRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCarRequest.java
new file mode 100644
index 0000000..a0ffc66
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCarRequest.java
@@ -0,0 +1,31 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateCarRequest {
+
+ @NotNull
+ @Min(1)
+ private int carId;
+
+ @NotNull
+ @Min(0)
+ private double dailyPrice;
+
+ @NotNull
+ @Size(min = 4)
+ private String modelYear;
+
+ @NotNull
+ @Size(min = 2, max = 50)
+ private String description;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateColorRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateColorRequest.java
new file mode 100644
index 0000000..6c1823b
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateColorRequest.java
@@ -0,0 +1,24 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateColorRequest {
+
+ @NotNull
+ @Min(1)
+ private int colorId;
+
+ @NotNull
+ @Size(min = 2, max = 30)
+ private String colorName;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateColorToCarRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateColorToCarRequest.java
new file mode 100644
index 0000000..24e8238
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateColorToCarRequest.java
@@ -0,0 +1,23 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateColorToCarRequest {
+
+ @NotNull
+ @Min(1)
+ private int carId;
+
+ @NotNull
+ @Min(1)
+ private int colorId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCorporateCustomerRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCorporateCustomerRequest.java
new file mode 100644
index 0000000..ffad893
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCorporateCustomerRequest.java
@@ -0,0 +1,39 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.Size;
+
+import com.sun.istack.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateCorporateCustomerRequest {
+
+ @NotNull
+ @Min(1)
+ private int userId;
+
+ @NotNull
+ @Size(min = 2, max = 30)
+ private String companyName;
+
+ @NotNull
+ @Size(min = 2, max = 30)
+ private String taxNumber;
+
+ @NotNull
+ @Size(min = 2, max = 20)
+ @Email(message = "This value is not email!")
+ private String email;
+
+ @NotNull
+ @Size(min = 2, max = 30)
+ private String password;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCreditCardRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCreditCardRequest.java
new file mode 100644
index 0000000..e144e5c
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCreditCardRequest.java
@@ -0,0 +1,41 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import java.time.LocalDate;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateCreditCardRequest {
+
+ @NotNull
+ @Min(1)
+ private int creditCardId;
+
+ @NotNull
+ @Size(min = 2)
+ private String creditCardNo;
+
+ @NotNull
+ @Size(min = 2)
+ private String cardHolder;
+
+ @NotNull
+ private LocalDate expirationDate;
+
+ @NotNull
+ @Size(min = 3)
+ private String cvv;
+
+ @NotNull
+ @Min(1)
+ private int userId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCustomerRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCustomerRequest.java
new file mode 100644
index 0000000..d5877d8
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateCustomerRequest.java
@@ -0,0 +1,18 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateCustomerRequest {
+
+ @NotNull
+ @Min(1)
+ private int userId;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateDeliveryDateToRentRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateDeliveryDateToRentRequest.java
new file mode 100644
index 0000000..22ccdf3
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateDeliveryDateToRentRequest.java
@@ -0,0 +1,24 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import java.time.LocalDate;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateDeliveryDateToRentRequest {
+
+ @NotNull
+ @Min(1)
+ private String rentId;
+
+ @NotNull
+ private LocalDate deliveryDate;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateEndedKilometerInfoRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateEndedKilometerInfoRequest.java
new file mode 100644
index 0000000..aab4976
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateEndedKilometerInfoRequest.java
@@ -0,0 +1,24 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateEndedKilometerInfoRequest {
+
+ @NotNull
+ @Min(1)
+ private String rentId;
+
+ @NotNull
+ @Size(min = 2)
+ private String endedKilometerInfo;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateIndividualCustomerRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateIndividualCustomerRequest.java
new file mode 100644
index 0000000..0c1a461
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateIndividualCustomerRequest.java
@@ -0,0 +1,43 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.Size;
+
+import com.sun.istack.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateIndividualCustomerRequest {
+
+ @NotNull
+ @Min(1)
+ private int userId;
+
+ @NotNull
+ @Size(min = 2, max = 20)
+ private String firstName;
+
+ @NotNull
+ @Size(min = 2, max = 20)
+ private String lastName;
+
+ @NotNull
+ @Size(min = 2, max = 11)
+ private String nationalIdentity;
+
+ @NotNull
+ @Size(min = 2, max = 20)
+ @Email(message = "This value is not email!")
+ private String email;
+
+ @NotNull
+ @Size(min = 2, max = 30)
+ private String password;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateInvoiceRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateInvoiceRequest.java
new file mode 100644
index 0000000..61ab9dc
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateInvoiceRequest.java
@@ -0,0 +1,27 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateInvoiceRequest {
+
+ @NotNull
+ @Min(1)
+ private int invoiceId;
+
+ @NotNull
+ @Min(1)
+ private String rentId;
+
+ @NotNull
+ @Min(1)
+ private int userId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateOrderedAdditionalProductRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateOrderedAdditionalProductRequest.java
new file mode 100644
index 0000000..d53f2de
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateOrderedAdditionalProductRequest.java
@@ -0,0 +1,31 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateOrderedAdditionalProductRequest {
+
+ @NotNull
+ @Min(1)
+ private int orderedAdditionalProductId;
+
+ @NotNull
+ @Min(1)
+ private int orderedAdditionalProductAmount;
+
+ @NotNull
+ @Min(1)
+ private String rentId;
+
+ @NotNull
+ @Min(1)
+ private int additionalProductId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdatePaymentRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdatePaymentRequest.java
new file mode 100644
index 0000000..8add8c4
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdatePaymentRequest.java
@@ -0,0 +1,41 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import java.time.LocalDate;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdatePaymentRequest {
+
+ @NotNull
+ @Min(1)
+ private int paymentId;
+
+ @NotNull
+ @Size(min = 2)
+ private String creditCardNo;
+
+ @NotNull
+ @Size(min = 2)
+ private String cardHolder;
+
+ @NotNull
+ private LocalDate expirationDate;
+
+ @NotNull
+ @Size(min = 3)
+ private String cvv;
+
+ @NotNull
+ @Min(1)
+ private String rentId;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateRentRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateRentRequest.java
new file mode 100644
index 0000000..b86fa45
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateRentRequest.java
@@ -0,0 +1,41 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import java.time.LocalDate;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateRentRequest {
+
+ @NotNull
+ @Min(1)
+ private String rentId;
+
+ @NotNull
+ private LocalDate rentDate;
+
+ @NotNull
+ private LocalDate rentReturnDate;
+
+ @NotNull
+ private String startedKilometerInfo;
+
+ @NotNull
+ @Min(1)
+ private int carId;
+
+ @NotNull
+ @Min(1)
+ private int rentalCityId;
+
+ @NotNull
+ @Min(1)
+ private int returnCityId;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateUserRequest.java b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateUserRequest.java
new file mode 100644
index 0000000..a33a7a3
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/business/requests/updateRequests/UpdateUserRequest.java
@@ -0,0 +1,30 @@
+package com.turkcell.rentacar.business.requests.updateRequests;
+
+import javax.validation.constraints.Email;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpdateUserRequest {
+
+ @NotNull
+ @Min(1)
+ private int userId;
+
+ @NotNull
+ @Size(min = 2, max = 20)
+ @Email(message = "This value is not email!")
+ private String email;
+
+ @NotNull
+ @Size(min = 2, max = 30)
+ private String password;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/services/abstracts/BaseBankPaymentServiceAdapter.java b/rentacar/src/main/java/com/turkcell/rentacar/core/services/abstracts/BaseBankPaymentServiceAdapter.java
new file mode 100644
index 0000000..e25e230
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/services/abstracts/BaseBankPaymentServiceAdapter.java
@@ -0,0 +1,12 @@
+package com.turkcell.rentacar.core.services.abstracts;
+
+import org.springframework.stereotype.Service;
+
+import com.turkcell.rentacar.entities.concretes.Payment;
+
+@Service
+public interface BaseBankPaymentServiceAdapter {
+
+ public boolean payment(Payment payment);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/services/abstracts/BaseNationalIdentityService.java b/rentacar/src/main/java/com/turkcell/rentacar/core/services/abstracts/BaseNationalIdentityService.java
new file mode 100644
index 0000000..0bafdcb
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/services/abstracts/BaseNationalIdentityService.java
@@ -0,0 +1,6 @@
+package com.turkcell.rentacar.core.services.abstracts;
+
+public interface BaseNationalIdentityService {
+
+ public boolean checkNationalIdentity(String nationalIdentity);
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/FakeBankPaymentManager.java b/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/FakeBankPaymentManager.java
new file mode 100644
index 0000000..2967561
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/FakeBankPaymentManager.java
@@ -0,0 +1,18 @@
+package com.turkcell.rentacar.core.services.concretes;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import com.turkcell.rentacar.core.services.abstracts.BaseBankPaymentServiceAdapter;
+import com.turkcell.rentacar.entities.concretes.Payment;
+
+@Component
+@Qualifier("fakeBankPayment")
+public class FakeBankPaymentManager implements BaseBankPaymentServiceAdapter {
+
+ @Override
+ public boolean payment(Payment payment) {
+ return true;
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/FakeNationalIdentityManager.java b/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/FakeNationalIdentityManager.java
new file mode 100644
index 0000000..f902ab8
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/FakeNationalIdentityManager.java
@@ -0,0 +1,17 @@
+package com.turkcell.rentacar.core.services.concretes;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import com.turkcell.rentacar.core.services.abstracts.BaseNationalIdentityService;
+
+@Component
+@Qualifier("fakeNationalIdentityManager")
+public class FakeNationalIdentityManager implements BaseNationalIdentityService {
+
+ @Override
+ public boolean checkNationalIdentity(String nationalIdentity) {
+ return true;
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/HalkbankPaymentManagerAdapter.java b/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/HalkbankPaymentManagerAdapter.java
new file mode 100644
index 0000000..b5b6e32
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/HalkbankPaymentManagerAdapter.java
@@ -0,0 +1,28 @@
+package com.turkcell.rentacar.core.services.concretes;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import com.turkcell.rentacar.core.services.abstracts.BaseBankPaymentServiceAdapter;
+import com.turkcell.rentacar.entities.concretes.Payment;
+import com.turkcell.rentacar.outServices.halkbankPaymentService.HalkbankPaymentService;
+
+@Component
+@Qualifier("halkbank")
+public class HalkbankPaymentManagerAdapter implements BaseBankPaymentServiceAdapter {
+
+ private HalkbankPaymentService halkbankPaymentService;
+
+ @Autowired
+ public HalkbankPaymentManagerAdapter(HalkbankPaymentService halkbankPaymentService) {
+ this.halkbankPaymentService = halkbankPaymentService;
+ }
+
+ @Override
+ public boolean payment(Payment payment) {
+ return this.halkbankPaymentService.payment(payment.getExpirationDate(), payment.getCvv(),
+ payment.getCreditCardNo(), payment.getCardHolder());
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/NationalIdentityManagerAdapter.java b/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/NationalIdentityManagerAdapter.java
new file mode 100644
index 0000000..1bf0cc9
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/NationalIdentityManagerAdapter.java
@@ -0,0 +1,26 @@
+package com.turkcell.rentacar.core.services.concretes;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import com.turkcell.rentacar.core.services.abstracts.BaseNationalIdentityService;
+import com.turkcell.rentacar.outServices.nationalIdentityService.NationalIdentityService;
+
+@Component
+@Qualifier("nationalIdentityManager")
+public class NationalIdentityManagerAdapter implements BaseNationalIdentityService {
+
+ private NationalIdentityService nationalIdentityService;
+
+ @Autowired
+ public NationalIdentityManagerAdapter(NationalIdentityService nationalIdentityService) {
+ this.nationalIdentityService = nationalIdentityService;
+ }
+
+ @Override
+ public boolean checkNationalIdentity(String nationalIdentity) {
+ return this.nationalIdentityService.checkNationalIdentity(nationalIdentity);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/ZiraatBankPaymentManagerAdapter.java b/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/ZiraatBankPaymentManagerAdapter.java
new file mode 100644
index 0000000..0681091
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/services/concretes/ZiraatBankPaymentManagerAdapter.java
@@ -0,0 +1,29 @@
+package com.turkcell.rentacar.core.services.concretes;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import com.turkcell.rentacar.core.services.abstracts.BaseBankPaymentServiceAdapter;
+import com.turkcell.rentacar.entities.concretes.Payment;
+import com.turkcell.rentacar.outServices.ziraatBankPaymentService.ZiraatBankPaymentService;
+
+
+@Component
+@Qualifier("ziraatBank")
+public class ZiraatBankPaymentManagerAdapter implements BaseBankPaymentServiceAdapter {
+
+ private ZiraatBankPaymentService ziraatBankPaymentService;
+
+ @Autowired
+ public ZiraatBankPaymentManagerAdapter(ZiraatBankPaymentService ziraatBankPaymentService) {
+ this.ziraatBankPaymentService = ziraatBankPaymentService;
+ }
+
+ @Override
+ public boolean payment(Payment payment) {
+ return this.ziraatBankPaymentService.payment(payment.getCreditCardNo(), payment.getCardHolder(),
+ payment.getExpirationDate(), payment.getCvv());
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/mapping/ModelMapperManager.java b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/mapping/ModelMapperManager.java
new file mode 100644
index 0000000..0586e63
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/mapping/ModelMapperManager.java
@@ -0,0 +1,30 @@
+package com.turkcell.rentacar.core.utilities.mapping;
+
+import org.modelmapper.ModelMapper;
+import org.modelmapper.convention.MatchingStrategies;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+@Service
+public class ModelMapperManager implements ModelMapperService{
+
+ private ModelMapper modelMapper;
+
+ @Autowired
+ public ModelMapperManager(ModelMapper modelMapper) {
+ super();
+ this.modelMapper = modelMapper;
+ }
+
+ @Override
+ public ModelMapper forDto() {
+ this.modelMapper.getConfiguration().setAmbiguityIgnored(true).setMatchingStrategy(MatchingStrategies.LOOSE);
+ return this.modelMapper;
+ }
+
+ @Override
+ public ModelMapper forRequest() {
+ this.modelMapper.getConfiguration().setAmbiguityIgnored(true).setMatchingStrategy(MatchingStrategies.STANDARD);
+ return this.modelMapper;
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/mapping/ModelMapperService.java b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/mapping/ModelMapperService.java
new file mode 100644
index 0000000..8a26651
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/mapping/ModelMapperService.java
@@ -0,0 +1,10 @@
+package com.turkcell.rentacar.core.utilities.mapping;
+
+import org.modelmapper.ModelMapper;
+
+public interface ModelMapperService {
+
+ ModelMapper forDto();
+ ModelMapper forRequest();
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/DataResult.java b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/DataResult.java
new file mode 100644
index 0000000..2195bd6
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/DataResult.java
@@ -0,0 +1,21 @@
+package com.turkcell.rentacar.core.utilities.results;
+
+public class DataResult extends Result {
+
+ private T data;
+
+ public DataResult(T data, boolean success) {
+ super(success);
+ this.data = data;
+ }
+
+ public DataResult(T data, boolean success, String message) {
+ super(success, message);
+ this.data = data;
+ }
+
+ public T getData() {
+ return this.data;
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/ErrorDataResult.java b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/ErrorDataResult.java
new file mode 100644
index 0000000..d6cad67
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/ErrorDataResult.java
@@ -0,0 +1,16 @@
+package com.turkcell.rentacar.core.utilities.results;
+
+public class ErrorDataResult extends DataResult {
+
+ public ErrorDataResult(T data) {
+ super(data, false);
+ }
+
+ public ErrorDataResult(String message) {
+ super(null, false, message);
+ }
+
+ public ErrorDataResult(T data, String message) {
+ super(data, false, message);
+ }
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/ErrorResult.java b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/ErrorResult.java
new file mode 100644
index 0000000..7b4aef7
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/ErrorResult.java
@@ -0,0 +1,13 @@
+package com.turkcell.rentacar.core.utilities.results;
+
+public class ErrorResult extends Result {
+
+ public ErrorResult() {
+ super(false);
+ }
+
+ public ErrorResult(String message) {
+ super(false, message);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/Result.java b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/Result.java
new file mode 100644
index 0000000..979b988
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/Result.java
@@ -0,0 +1,26 @@
+package com.turkcell.rentacar.core.utilities.results;
+
+public class Result {
+
+ private boolean success;
+ private String message;
+
+ public Result(boolean success) {
+ super();
+ this.success = success;
+ }
+
+ public Result(boolean success, String message) {
+ this(success);
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return this.success;
+ }
+
+ public String getMessage() {
+ return this.message;
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/SuccessDataResult.java b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/SuccessDataResult.java
new file mode 100644
index 0000000..e18d4f4
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/SuccessDataResult.java
@@ -0,0 +1,17 @@
+package com.turkcell.rentacar.core.utilities.results;
+
+public class SuccessDataResult extends DataResult {
+
+ public SuccessDataResult(T data) {
+ super(data, true);
+ }
+
+ public SuccessDataResult(String message) {
+ super(null, true, message);
+ }
+
+ public SuccessDataResult(T data, String message) {
+ super(data, true, message);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/SuccessResult.java b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/SuccessResult.java
new file mode 100644
index 0000000..9ad58a5
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/core/utilities/results/SuccessResult.java
@@ -0,0 +1,13 @@
+package com.turkcell.rentacar.core.utilities.results;
+
+public class SuccessResult extends Result {
+
+ public SuccessResult() {
+ super(true);
+ }
+
+ public SuccessResult(String message) {
+ super(true, message);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/AdditionalProductDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/AdditionalProductDao.java
new file mode 100644
index 0000000..2ecfb89
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/AdditionalProductDao.java
@@ -0,0 +1,12 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.turkcell.rentacar.entities.concretes.AdditionalProduct;
+
+public interface AdditionalProductDao extends JpaRepository{
+
+ boolean existsByAdditionalProductId(int additionalProductId);
+
+ boolean existsByAdditionalProductName(String additionalProductName);
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/BrandDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/BrandDao.java
new file mode 100644
index 0000000..8cce1a8
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/BrandDao.java
@@ -0,0 +1,14 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import com.turkcell.rentacar.entities.concretes.Brand;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface BrandDao extends JpaRepository {
+
+ Brand getByBrandName(String name);
+ Brand getBrandByBrandId(int id);
+
+ boolean existsBrandByBrandName(String name);
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CarDamageDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CarDamageDao.java
new file mode 100644
index 0000000..f02afd8
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CarDamageDao.java
@@ -0,0 +1,9 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.turkcell.rentacar.entities.concretes.CarDamage;
+
+public interface CarDamageDao extends JpaRepository {
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CarDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CarDao.java
new file mode 100644
index 0000000..511cb3a
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CarDao.java
@@ -0,0 +1,31 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import com.turkcell.rentacar.entities.concretes.Car;
+
+@Repository
+public interface CarDao extends JpaRepository {
+
+ boolean existsByCarId(int carId);
+
+ List findByDailyPriceLessThanEqual(double dailyPrice);
+
+ @Modifying
+ @Query("update Car set color.colorId=?2 where carId=?1")
+ int updateColorToCarByCarId(int carId, int colorId);
+
+ @Modifying
+ @Query("update Car set brand.brandId=?2 where carId=?1")
+ int updateBrandToCarByCarId(int carId, int brandId);
+
+ @Modifying
+ @Query("update Car c set c.kilometerInfo =?2 where c.carId = ?1")
+ int updateKilometerToCarByCarId(int carId, String kilometerInfo);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CarMaintenanceDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CarMaintenanceDao.java
new file mode 100644
index 0000000..41edae3
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CarMaintenanceDao.java
@@ -0,0 +1,19 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.turkcell.rentacar.entities.concretes.CarMaintenance;
+
+public interface CarMaintenanceDao extends JpaRepository {
+
+ boolean existsByCar_CarId(int carId);
+
+ List getByCar_CarId(int carId);
+
+
+
+
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CityDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CityDao.java
new file mode 100644
index 0000000..7176799
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CityDao.java
@@ -0,0 +1,9 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.turkcell.rentacar.entities.concretes.City;
+
+public interface CityDao extends JpaRepository{
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/ColorDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/ColorDao.java
new file mode 100644
index 0000000..e7dbed2
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/ColorDao.java
@@ -0,0 +1,14 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import com.turkcell.rentacar.business.dtos.listDtos.ColorListDto;
+import com.turkcell.rentacar.entities.concretes.Color;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ColorDao extends JpaRepository {
+ boolean existsColorByColorName(String name);
+
+ ColorListDto getColorByColorId(int id);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CorporateCustomerDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CorporateCustomerDao.java
new file mode 100644
index 0000000..ede3e36
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CorporateCustomerDao.java
@@ -0,0 +1,13 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.turkcell.rentacar.entities.concretes.CorporateCustomer;
+
+public interface CorporateCustomerDao extends JpaRepository {
+
+ boolean existsByUserId(int userId);
+
+ boolean existsByEmail(String email);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CreditCardDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CreditCardDao.java
new file mode 100644
index 0000000..66e4f55
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CreditCardDao.java
@@ -0,0 +1,9 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.turkcell.rentacar.entities.concretes.CreditCard;
+
+public interface CreditCardDao extends JpaRepository {
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CustomerDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CustomerDao.java
new file mode 100644
index 0000000..9fb1c56
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/CustomerDao.java
@@ -0,0 +1,9 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.turkcell.rentacar.entities.concretes.Customer;
+
+public interface CustomerDao extends JpaRepository{
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/IndividualCustomerDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/IndividualCustomerDao.java
new file mode 100644
index 0000000..397cc57
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/IndividualCustomerDao.java
@@ -0,0 +1,13 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.turkcell.rentacar.entities.concretes.IndividualCustomer;
+
+public interface IndividualCustomerDao extends JpaRepository {
+
+ boolean existsByUserId(int userId);
+
+ boolean existsByEmail(String email);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/InvoiceDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/InvoiceDao.java
new file mode 100644
index 0000000..e367b51
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/InvoiceDao.java
@@ -0,0 +1,25 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import java.time.LocalDate;
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import com.turkcell.rentacar.entities.concretes.Invoice;
+
+@Repository
+public interface InvoiceDao extends JpaRepository {
+
+ Invoice getByRent_RentId(String rentId);
+
+ boolean existsByRent_RentId(String rentId);
+
+ boolean existsByUser_UserId(int userId);
+
+ List getByUser_UserId(int userId);
+
+ @Query("SELECT i FROM Invoice i WHERE i.invoiceCreateDate BETWEEN :startDate AND :endDate")
+ List getAllByBetweenStartDateAndEndDate(LocalDate startDate, LocalDate endDate);
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/OrderedAdditionalProductDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/OrderedAdditionalProductDao.java
new file mode 100644
index 0000000..c4e076d
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/OrderedAdditionalProductDao.java
@@ -0,0 +1,15 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.turkcell.rentacar.entities.concretes.OrderedAdditionalProduct;
+
+public interface OrderedAdditionalProductDao extends JpaRepository {
+
+ List getByRent_RentId(String rentId);
+
+ boolean existsByRent_RentId(String rentId);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/PaymentDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/PaymentDao.java
new file mode 100644
index 0000000..872c3b1
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/PaymentDao.java
@@ -0,0 +1,13 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.turkcell.rentacar.entities.concretes.Payment;
+
+public interface PaymentDao extends JpaRepository {
+
+
+
+
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/RentDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/RentDao.java
new file mode 100644
index 0000000..0d7f841
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/RentDao.java
@@ -0,0 +1,31 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import java.time.LocalDate;
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+
+import com.turkcell.rentacar.entities.concretes.OrderedAdditionalProduct;
+import com.turkcell.rentacar.entities.concretes.Rent;
+
+public interface RentDao extends JpaRepository {
+
+ List getOrderedAdditionalProductsByRentId(String rentId);
+
+ boolean existsByCar_CarId(int carId);
+
+ List getByCar_CarId(int carId);
+
+ //boolean existsByRentNo(String rentNo);
+
+ @Modifying
+ @Query("update Rent r set r.endedKilometerInfo = ?2 where r.rentId = ?1")
+ int updateEndedKilometerInfoToRentByRentId(String rentId, String endedKilometerInfo);
+
+ @Modifying
+ @Query("update Rent r set r.deliveryDate = ?2 where r.rentId = ?1")
+ int updateDeliveryDateToRentByRentId(String rentId, LocalDate deliveryDate);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/UserDao.java b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/UserDao.java
new file mode 100644
index 0000000..30ac2e5
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/dataAccess/abstracts/UserDao.java
@@ -0,0 +1,13 @@
+package com.turkcell.rentacar.dataAccess.abstracts;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import com.turkcell.rentacar.entities.abstracts.User;
+
+@Repository
+public interface UserDao extends JpaRepository {
+
+ boolean existsByEmail(String email);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/abstracts/User.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/abstracts/User.java
new file mode 100644
index 0000000..a653828
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/abstracts/User.java
@@ -0,0 +1,56 @@
+package com.turkcell.rentacar.entities.abstracts;
+
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import com.turkcell.rentacar.entities.concretes.CreditCard;
+import com.turkcell.rentacar.entities.concretes.Invoice;
+import com.turkcell.rentacar.entities.concretes.Payment;
+import com.turkcell.rentacar.entities.concretes.Rent;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "users")
+@Inheritance(strategy = InheritanceType.JOINED)
+public class User {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "user_id")
+ private int userId;
+
+ @Column(name = "email")
+ private String email;
+
+ @Column(name = "password")
+ private String password;
+
+ @OneToMany(mappedBy = "user")
+ private List rents;
+
+ @OneToMany(mappedBy = "user")
+ private List invoices;
+
+ @OneToMany(mappedBy = "user")
+ private List creditCards;
+
+ @OneToMany(mappedBy = "user")
+ private List payment;
+
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/AdditionalProduct.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/AdditionalProduct.java
new file mode 100644
index 0000000..e6b2796
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/AdditionalProduct.java
@@ -0,0 +1,38 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "additional_products")
+public class AdditionalProduct {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "additional_product_id")
+ private int additionalProductId;
+
+ @Column(name = "additional_product_name")
+ private String additionalProductName;
+
+ @Column(name = "additional_product_unit_price")
+ private double additionalProductUnitPrice;
+
+ @OneToMany(mappedBy = "additionalProduct")
+ private List orderedAdditionalProducts;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Brand.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Brand.java
new file mode 100644
index 0000000..f4ab15c
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Brand.java
@@ -0,0 +1,35 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+import javax.persistence.*;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode
+@Table(name = "brands")
+public class Brand {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "brand_id", unique = true, nullable = false)
+ private int brandId;
+
+ @Column(name = "brand_name")
+ private String brandName;
+
+ @JsonIgnore
+ @OneToMany(mappedBy = "brand")
+ private List cars;
+
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Car.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Car.java
new file mode 100644
index 0000000..2ec5164
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Car.java
@@ -0,0 +1,61 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "cars")
+public class Car {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "car_id")
+ private int carId;
+
+ @Column(name = "daily_price")
+ private double dailyPrice;
+
+ @Column(name = "model_year")
+ private String modelYear;
+
+ @Column(name = "description")
+ private String description;
+
+ @Column(name = "kilometer_info")
+ private String kilometerInfo;
+
+ @ManyToOne(cascade = CascadeType.MERGE)
+ @JoinColumn(name = "brand_id")
+ private Brand brand;
+
+ @ManyToOne(cascade = CascadeType.MERGE)
+ @JoinColumn(name = "color_id")
+ private Color color;
+
+ @OneToMany(mappedBy = "car")
+ private List carMaintenences;
+
+ @OneToMany(mappedBy = "car")
+ private List rent;
+
+ @OneToMany(mappedBy = "car")
+ private List carDamages;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/CarDamage.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/CarDamage.java
new file mode 100644
index 0000000..053df63
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/CarDamage.java
@@ -0,0 +1,34 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "car_damages")
+public class CarDamage {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "car_damage_id")
+ private int carDamageId;
+
+ @Column(name = "damage_info")
+ private String damageInfo;
+
+ @ManyToOne
+ @JoinColumn(name = "car_id")
+ private Car car;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/CarMaintenance.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/CarMaintenance.java
new file mode 100644
index 0000000..d409d89
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/CarMaintenance.java
@@ -0,0 +1,40 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import java.time.LocalDate;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "car_maintenances")
+public class CarMaintenance {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "car_maintenance_id")
+ private int carMaintenanceId;
+
+ @Column(name = "description")
+ private String description;
+
+ @Column(name = "return_date")
+ private LocalDate returnDate;
+
+ @ManyToOne
+ @JoinColumn(name = "car_id")
+ private Car car;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/City.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/City.java
new file mode 100644
index 0000000..aaa937b
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/City.java
@@ -0,0 +1,37 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "cities")
+public class City {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "city_id")
+ private int cityId;
+
+ @Column(name = "city_name")
+ private String cityName;
+
+ @OneToMany(mappedBy = "rentalCity")
+ private List rentalCity;
+
+ @OneToMany(mappedBy = "returnCity")
+ private List returnCity;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Color.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Color.java
new file mode 100644
index 0000000..ea19455
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Color.java
@@ -0,0 +1,31 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+import javax.persistence.*;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "colors")
+public class Color {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "color_id", insertable = true, updatable = true)
+ private int colorId;
+
+ @Column(name = "color_name")
+ private String colorName;
+
+ @JsonIgnore
+ @OneToMany(mappedBy = "color")
+ private List cars;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/CorporateCustomer.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/CorporateCustomer.java
new file mode 100644
index 0000000..569199f
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/CorporateCustomer.java
@@ -0,0 +1,28 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.Table;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@PrimaryKeyJoinColumn(name = "user_id")
+@Table(name = "corporate_customers")
+public class CorporateCustomer extends Customer {
+
+ @Column(name = "company_name")
+ private String companyName;
+
+ @Column(name = "tax_number")
+ private String taxNumber;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/CreditCard.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/CreditCard.java
new file mode 100644
index 0000000..c376cd1
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/CreditCard.java
@@ -0,0 +1,48 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import java.time.LocalDate;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.turkcell.rentacar.entities.abstracts.User;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "credit_cards")
+public class CreditCard {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "credit_card_id")
+ private int creditCardId;
+
+ @Column(name = "credit_card_no")
+ private String creditCardNo;
+
+ @Column(name = "card_holder")
+ private String cardHolder;
+
+ @Column(name = "expiration_date")
+ private LocalDate expirationDate;
+
+ @Column(name = "cvv")
+ private String cvv;
+
+ @ManyToOne
+ @JoinColumn(name = "user_id")
+ private User user;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Customer.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Customer.java
new file mode 100644
index 0000000..5c71db3
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Customer.java
@@ -0,0 +1,29 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import java.time.LocalDate;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.Table;
+
+import com.turkcell.rentacar.entities.abstracts.User;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@PrimaryKeyJoinColumn(name = "user_id")
+@Table(name = "customers")
+public class Customer extends User {
+
+ @Column(name = "date_registered")
+ private LocalDate dateRegistered = LocalDate.now();
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/IndividualCustomer.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/IndividualCustomer.java
new file mode 100644
index 0000000..53db272
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/IndividualCustomer.java
@@ -0,0 +1,30 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.Table;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@PrimaryKeyJoinColumn(name = "user_id")
+@Table(name = "individual_customers")
+public class IndividualCustomer extends Customer {
+
+ @Column(name = "fist_name")
+ private String firstName;
+
+ @Column(name = "last_name")
+ private String lastName;
+
+ @Column(name = "national_identity")
+ private String nationalIdentity;
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Invoice.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Invoice.java
new file mode 100644
index 0000000..2f0a77c
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Invoice.java
@@ -0,0 +1,50 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import java.time.LocalDate;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import com.turkcell.rentacar.entities.abstracts.User;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "invoices")
+public class Invoice {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "invoice_id")
+ private int invoiceId;
+
+ @Column(name = "invoice_create_date")
+ private LocalDate invoiceCreateDate = LocalDate.now();
+
+ @Column(name = "total_price")
+ private double totalPrice;
+
+ @ManyToOne
+ @JoinColumn(name = "user_id")
+ private User user;
+
+ @ManyToOne(cascade = CascadeType.MERGE)
+ @JoinColumn(name = "rent_id")
+ private Rent rent;
+
+ @ManyToOne(cascade = CascadeType.MERGE)
+ @JoinColumn(name = "payment_id")
+ private Payment payment;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/OrderedAdditionalProduct.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/OrderedAdditionalProduct.java
new file mode 100644
index 0000000..1bde9fb
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/OrderedAdditionalProduct.java
@@ -0,0 +1,41 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "ordered_additional_products")
+public class OrderedAdditionalProduct {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "ordered_additional_product_id")
+ private int orderedAdditionalProductId;
+
+ @Column(name = "ordered_additional_product_amount")
+ private int orderedAdditionalProductAmount;
+
+ @ManyToOne(cascade = CascadeType.MERGE)
+ @JoinColumn(name = "rent_id")
+ private Rent rent;
+
+ @ManyToOne(cascade = CascadeType.MERGE)
+ @JoinColumn(name = "additional_product_id")
+ private AdditionalProduct additionalProduct;
+
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Payment.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Payment.java
new file mode 100644
index 0000000..bc50d31
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Payment.java
@@ -0,0 +1,58 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import java.time.LocalDate;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import com.turkcell.rentacar.entities.abstracts.User;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "payments")
+public class Payment {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "payment_id")
+ private int paymentId;
+
+ @Column(name = "credit_card_no")
+ private String creditCardNo;
+
+ @Column(name = "card_holder")
+ private String cardHolder;
+
+ @Column(name = "expiration_date")
+ private LocalDate expirationDate;
+
+ @Column(name = "cvv")
+ private String cvv;
+
+ @ManyToOne(cascade = CascadeType.MERGE)
+ @JoinColumn(name = "rent_id")
+ private Rent rent;
+
+ @OneToMany(mappedBy = "payment")
+ private List invoices;
+
+ @ManyToOne
+ @JoinColumn(name = "user_id")
+ private User user;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Rent.java b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Rent.java
new file mode 100644
index 0000000..9a09ca1
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/entities/concretes/Rent.java
@@ -0,0 +1,74 @@
+package com.turkcell.rentacar.entities.concretes;
+
+import java.time.LocalDate;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import com.turkcell.rentacar.entities.abstracts.User;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "rents")
+public class Rent {
+
+ @Id
+ @Column(name = "rent_id")
+ private String rentId;
+
+ @Column(name = "rent_date")
+ private LocalDate rentDate;
+
+ @Column(name = "rent_return_date")
+ private LocalDate rentReturnDate;
+
+ @Column(name = "delivery_date")
+ private LocalDate deliveryDate;
+
+ @Column(name = "rent_status")
+ private boolean rentStatus = true;
+
+ @Column(name = "started_kilometer_info")
+ private String startedKilometerInfo;
+
+ @Column(name = "ended_kilometer_info")
+ private String endedKilometerInfo;
+
+ @ManyToOne
+ @JoinColumn(name = "car_id")
+ private Car car;
+
+ @ManyToOne
+ @JoinColumn(name = "rental_city_id")
+ private City rentalCity;
+
+ @ManyToOne
+ @JoinColumn(name = "return_city_id")
+ private City returnCity;
+
+ @OneToMany(mappedBy = "rent")
+ private List orderedAdditionalProducts;
+
+ @ManyToOne
+ @JoinColumn(name = "user_id")
+ private User user;
+
+ @OneToMany(mappedBy = "rent")
+ private List invoices;
+
+ @OneToMany(mappedBy = "rent")
+ private List payments;
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/exceptions/BusinessException.java b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/BusinessException.java
new file mode 100644
index 0000000..1ea5fc0
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/BusinessException.java
@@ -0,0 +1,13 @@
+package com.turkcell.rentacar.exceptions;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class BusinessException extends Exception{
+ public BusinessException() {
+
+ }
+ public BusinessException(String message) {
+ super(message);
+ }
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/BusinessException.java b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/BusinessException.java
new file mode 100644
index 0000000..996325e
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/BusinessException.java
@@ -0,0 +1,13 @@
+package com.turkcell.rentacar.exceptions.businessExceptions;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class BusinessException extends RuntimeException{
+ public BusinessException() {
+
+ }
+ public BusinessException(String message) {
+ super(message);
+ }
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/CarIsAlreadyInMaintenanceException.java b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/CarIsAlreadyInMaintenanceException.java
new file mode 100644
index 0000000..91b1ba8
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/CarIsAlreadyInMaintenanceException.java
@@ -0,0 +1,9 @@
+package com.turkcell.rentacar.exceptions.businessExceptions;
+
+public class CarIsAlreadyInMaintenanceException extends BusinessException{
+
+ public CarIsAlreadyInMaintenanceException(String message) {
+ super(message);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/CarIsAlreadyInRentException.java b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/CarIsAlreadyInRentException.java
new file mode 100644
index 0000000..4ae010c
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/CarIsAlreadyInRentException.java
@@ -0,0 +1,9 @@
+package com.turkcell.rentacar.exceptions.businessExceptions;
+
+public class CarIsAlreadyInRentException extends BusinessException {
+
+ public CarIsAlreadyInRentException(String message) {
+ super(message);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/EntityAlreadyExistsException.java b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/EntityAlreadyExistsException.java
new file mode 100644
index 0000000..989dc5d
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/EntityAlreadyExistsException.java
@@ -0,0 +1,9 @@
+package com.turkcell.rentacar.exceptions.businessExceptions;
+
+public class EntityAlreadyExistsException extends BusinessException {
+
+ public EntityAlreadyExistsException(String message) {
+ super(message);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/EntityNotFoundException.java b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/EntityNotFoundException.java
new file mode 100644
index 0000000..c4b75ab
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/EntityNotFoundException.java
@@ -0,0 +1,8 @@
+package com.turkcell.rentacar.exceptions.businessExceptions;
+
+public class EntityNotFoundException extends BusinessException {
+
+ public EntityNotFoundException(String message) {
+ super(message);
+ }
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/NationalIdentityNotValidException.java b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/NationalIdentityNotValidException.java
new file mode 100644
index 0000000..9643430
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/NationalIdentityNotValidException.java
@@ -0,0 +1,8 @@
+package com.turkcell.rentacar.exceptions.businessExceptions;
+
+public class NationalIdentityNotValidException extends BusinessException {
+
+ public NationalIdentityNotValidException(String message) {
+ super(message);
+ }
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/PaymentFailedException.java b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/PaymentFailedException.java
new file mode 100644
index 0000000..dbbd993
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/PaymentFailedException.java
@@ -0,0 +1,9 @@
+package com.turkcell.rentacar.exceptions.businessExceptions;
+
+public class PaymentFailedException extends BusinessException {
+
+ public PaymentFailedException(String message) {
+ super(message);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/ReturnDateIsAfterNowException.java b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/ReturnDateIsAfterNowException.java
new file mode 100644
index 0000000..972dfc3
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/businessExceptions/ReturnDateIsAfterNowException.java
@@ -0,0 +1,9 @@
+package com.turkcell.rentacar.exceptions.businessExceptions;
+
+public class ReturnDateIsAfterNowException extends BusinessException {
+
+ public ReturnDateIsAfterNowException(String message) {
+ super(message);
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/exceptions/globalExceptions/ValidationExceptionHandling.java b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/globalExceptions/ValidationExceptionHandling.java
new file mode 100644
index 0000000..99940cd
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/exceptions/globalExceptions/ValidationExceptionHandling.java
@@ -0,0 +1,28 @@
+package com.turkcell.rentacar.exceptions.globalExceptions;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.FieldError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+import com.turkcell.rentacar.core.utilities.results.ErrorDataResult;
+
+public class ValidationExceptionHandling {
+
+ @ExceptionHandler
+ @ResponseStatus(code = HttpStatus.BAD_REQUEST)
+ public ErrorDataResult handleValidationException(
+ MethodArgumentNotValidException argumentNotValidException) {
+ Map validationErrors = new HashMap();
+ for (FieldError fieldError : argumentNotValidException.getBindingResult().getFieldErrors()) {
+ validationErrors.put(fieldError.getField(), fieldError.getDefaultMessage());
+ }
+ ErrorDataResult errorResults = new ErrorDataResult<>(validationErrors, "Validate.Error");
+ return errorResults;
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/halkbankPaymentService/HalkbankPaymentManager.java b/rentacar/src/main/java/com/turkcell/rentacar/halkbankPaymentService/HalkbankPaymentManager.java
new file mode 100644
index 0000000..b0d9737
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/halkbankPaymentService/HalkbankPaymentManager.java
@@ -0,0 +1,15 @@
+package com.turkcell.rentacar.halkbankPaymentService;
+
+import java.time.LocalDate;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class HalkbankPaymentManager implements HalkbankPaymentService {
+
+ @Override
+ public boolean payment(LocalDate expirationDate, String cvv, String creditCardNo, String cardHolder) {
+ return true;
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/halkbankPaymentService/HalkbankPaymentService.java b/rentacar/src/main/java/com/turkcell/rentacar/halkbankPaymentService/HalkbankPaymentService.java
new file mode 100644
index 0000000..f337f64
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/halkbankPaymentService/HalkbankPaymentService.java
@@ -0,0 +1,9 @@
+package com.turkcell.rentacar.halkbankPaymentService;
+
+import java.time.LocalDate;
+
+public interface HalkbankPaymentService {
+
+ public boolean payment(LocalDate expirationDate, String cvv, String creditCardNo, String cardHolder);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/nationalIdentityService/FakeNationalIdentityManager.java b/rentacar/src/main/java/com/turkcell/rentacar/nationalIdentityService/FakeNationalIdentityManager.java
new file mode 100644
index 0000000..b62dd41
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/nationalIdentityService/FakeNationalIdentityManager.java
@@ -0,0 +1,13 @@
+package com.turkcell.rentacar.nationalIdentityService;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class FakeNationalIdentityManager implements NationalIdentityService {
+
+ @Override
+ public boolean checkNationalIdentity(String nationalIdentity) {
+ return true;
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/nationalIdentityService/NationalIdentityManager.java b/rentacar/src/main/java/com/turkcell/rentacar/nationalIdentityService/NationalIdentityManager.java
new file mode 100644
index 0000000..d5f6152
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/nationalIdentityService/NationalIdentityManager.java
@@ -0,0 +1,38 @@
+package com.turkcell.rentacar.nationalIdentityService;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class NationalIdentityManager implements NationalIdentityService {
+
+ @Override
+ public boolean checkNationalIdentity(String nationalIdentity) {
+ int[] numbers = split(nationalIdentity);
+
+ if (numbers != null) {
+ boolean condition1 = (numbers[0] + numbers[1] + numbers[2] + numbers[3] + numbers[4] + numbers[5]
+ + numbers[6] + numbers[7] + numbers[8] + numbers[9]) % 10 == numbers[10];
+ boolean condition2 = (((numbers[0] + numbers[2] + numbers[4] + numbers[6] + numbers[8]) * 7)
+ + ((numbers[1] + numbers[3] + numbers[5] + numbers[7]) * 9)) % 10 == numbers[9];
+ boolean condition3 = ((numbers[0] + numbers[2] + numbers[4] + numbers[6] + numbers[8]) * 8)
+ % 10 == numbers[10];
+
+ return condition1 && condition2 && condition3;
+ }
+ return false;
+ }
+
+ private static int[] split(String nationalIdentity) {
+ int[] numbers = new int[11];
+
+ if (nationalIdentity == null || nationalIdentity.length() != 11) {
+ return null;
+ }
+
+ for (int i = 0; i < 11; i++) {
+ numbers[i] = Integer.parseInt(nationalIdentity.substring(i, (i + 1)));
+ }
+ return numbers;
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/nationalIdentityService/NationalIdentityService.java b/rentacar/src/main/java/com/turkcell/rentacar/nationalIdentityService/NationalIdentityService.java
new file mode 100644
index 0000000..298ff45
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/nationalIdentityService/NationalIdentityService.java
@@ -0,0 +1,7 @@
+package com.turkcell.rentacar.nationalIdentityService;
+
+public interface NationalIdentityService {
+
+ public boolean checkNationalIdentity(String nationalIdentity);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/outServices/halkbankPaymentService/HalkbankPaymentManager.java b/rentacar/src/main/java/com/turkcell/rentacar/outServices/halkbankPaymentService/HalkbankPaymentManager.java
new file mode 100644
index 0000000..1cd6819
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/outServices/halkbankPaymentService/HalkbankPaymentManager.java
@@ -0,0 +1,15 @@
+package com.turkcell.rentacar.outServices.halkbankPaymentService;
+
+import java.time.LocalDate;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class HalkbankPaymentManager implements HalkbankPaymentService {
+
+ @Override
+ public boolean payment(LocalDate expirationDate, String cvv, String creditCardNo, String cardHolder) {
+ return true;
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/outServices/halkbankPaymentService/HalkbankPaymentService.java b/rentacar/src/main/java/com/turkcell/rentacar/outServices/halkbankPaymentService/HalkbankPaymentService.java
new file mode 100644
index 0000000..e1ab72a
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/outServices/halkbankPaymentService/HalkbankPaymentService.java
@@ -0,0 +1,9 @@
+package com.turkcell.rentacar.outServices.halkbankPaymentService;
+
+import java.time.LocalDate;
+
+public interface HalkbankPaymentService {
+
+ public boolean payment(LocalDate expirationDate, String cvv, String creditCardNo, String cardHolder);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/outServices/nationalIdentityService/NationalIdentityManager.java b/rentacar/src/main/java/com/turkcell/rentacar/outServices/nationalIdentityService/NationalIdentityManager.java
new file mode 100644
index 0000000..51fb2c9
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/outServices/nationalIdentityService/NationalIdentityManager.java
@@ -0,0 +1,38 @@
+package com.turkcell.rentacar.outServices.nationalIdentityService;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class NationalIdentityManager implements NationalIdentityService {
+
+ @Override
+ public boolean checkNationalIdentity(String nationalIdentity) {
+ int[] numbers = split(nationalIdentity);
+
+ if (numbers != null) {
+ boolean condition1 = (numbers[0] + numbers[1] + numbers[2] + numbers[3] + numbers[4] + numbers[5]
+ + numbers[6] + numbers[7] + numbers[8] + numbers[9]) % 10 == numbers[10];
+ boolean condition2 = (((numbers[0] + numbers[2] + numbers[4] + numbers[6] + numbers[8]) * 7)
+ + ((numbers[1] + numbers[3] + numbers[5] + numbers[7]) * 9)) % 10 == numbers[9];
+ boolean condition3 = ((numbers[0] + numbers[2] + numbers[4] + numbers[6] + numbers[8]) * 8)
+ % 10 == numbers[10];
+
+ return condition1 && condition2 && condition3;
+ }
+ return false;
+ }
+
+ private static int[] split(String nationalIdentity) {
+ int[] numbers = new int[11];
+
+ if (nationalIdentity == null || nationalIdentity.length() != 11) {
+ return null;
+ }
+
+ for (int i = 0; i < 11; i++) {
+ numbers[i] = Integer.parseInt(nationalIdentity.substring(i, (i + 1)));
+ }
+ return numbers;
+ }
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/outServices/nationalIdentityService/NationalIdentityService.java b/rentacar/src/main/java/com/turkcell/rentacar/outServices/nationalIdentityService/NationalIdentityService.java
new file mode 100644
index 0000000..0d76928
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/outServices/nationalIdentityService/NationalIdentityService.java
@@ -0,0 +1,7 @@
+package com.turkcell.rentacar.outServices.nationalIdentityService;
+
+public interface NationalIdentityService {
+
+ public boolean checkNationalIdentity(String nationalIdentity);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/outServices/ziraatBankPaymentService/ZiraatBankPaymentManager.java b/rentacar/src/main/java/com/turkcell/rentacar/outServices/ziraatBankPaymentService/ZiraatBankPaymentManager.java
new file mode 100644
index 0000000..51862ab
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/outServices/ziraatBankPaymentService/ZiraatBankPaymentManager.java
@@ -0,0 +1,14 @@
+package com.turkcell.rentacar.outServices.ziraatBankPaymentService;
+
+import java.time.LocalDate;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class ZiraatBankPaymentManager implements ZiraatBankPaymentService{
+
+ @Override
+ public boolean payment(String creditCardNo, String cardHolder, LocalDate expirationDate, String cvv) {
+ return true;
+ }
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/outServices/ziraatBankPaymentService/ZiraatBankPaymentService.java b/rentacar/src/main/java/com/turkcell/rentacar/outServices/ziraatBankPaymentService/ZiraatBankPaymentService.java
new file mode 100644
index 0000000..baefcbd
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/outServices/ziraatBankPaymentService/ZiraatBankPaymentService.java
@@ -0,0 +1,9 @@
+package com.turkcell.rentacar.outServices.ziraatBankPaymentService;
+
+import java.time.LocalDate;
+
+public interface ZiraatBankPaymentService {
+
+ public boolean payment(String creditCardNo, String cardHolder, LocalDate expirationDate, String cvv);
+
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/ziraatBankPaymentService/ZiraatBankPaymentManager.java b/rentacar/src/main/java/com/turkcell/rentacar/ziraatBankPaymentService/ZiraatBankPaymentManager.java
new file mode 100644
index 0000000..6c902ad
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/ziraatBankPaymentService/ZiraatBankPaymentManager.java
@@ -0,0 +1,14 @@
+package com.turkcell.rentacar.ziraatBankPaymentService;
+
+import java.time.LocalDate;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class ZiraatBankPaymentManager implements ZiraatBankPaymentService{
+
+ @Override
+ public boolean payment(String creditCardNo, String cardHolder, LocalDate expirationDate, String cvv) {
+ return true;
+ }
+}
diff --git a/rentacar/src/main/java/com/turkcell/rentacar/ziraatBankPaymentService/ZiraatBankPaymentService.java b/rentacar/src/main/java/com/turkcell/rentacar/ziraatBankPaymentService/ZiraatBankPaymentService.java
new file mode 100644
index 0000000..a632b53
--- /dev/null
+++ b/rentacar/src/main/java/com/turkcell/rentacar/ziraatBankPaymentService/ZiraatBankPaymentService.java
@@ -0,0 +1,9 @@
+package com.turkcell.rentacar.ziraatBankPaymentService;
+
+import java.time.LocalDate;
+
+public interface ZiraatBankPaymentService {
+
+ public boolean payment(String creditCardNo, String cardHolder, LocalDate expirationDate, String cvv);
+
+}
diff --git a/rentacar/src/main/resources/application.properties b/rentacar/src/main/resources/application.properties
new file mode 100644
index 0000000..db01470
--- /dev/null
+++ b/rentacar/src/main/resources/application.properties
@@ -0,0 +1,9 @@
+spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
+spring.jpa.hibernate.ddl-auto=update
+spring.jpa.hibernate.show-sql=true
+spring.datasource.url=jdbc:postgresql://localhost:5432/Rent_A_Car
+spring.datasource.username=postgres
+spring.datasource.password=123123
+spring.jpa.properties.javax.persistence.validation.mode = none
+spring.mvc.pathmatch.matching-strategy = ant-path-matcher
+server.port = 8081
\ No newline at end of file
diff --git a/rentacar/src/test/java/com/turkcell/rentacar/RentacarApplicationTests.java b/rentacar/src/test/java/com/turkcell/rentacar/RentacarApplicationTests.java
new file mode 100644
index 0000000..436a168
--- /dev/null
+++ b/rentacar/src/test/java/com/turkcell/rentacar/RentacarApplicationTests.java
@@ -0,0 +1,13 @@
+package com.turkcell.rentacar;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class RentacarApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}