Index: .gitignore
===================================================================
--- .gitignore	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ .gitignore	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -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/
Index: .mvn/wrapper/maven-wrapper.properties
===================================================================
--- .mvn/wrapper/maven-wrapper.properties	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ .mvn/wrapper/maven-wrapper.properties	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
Index: mvnw
===================================================================
--- mvnw	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ mvnw	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -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 "$@"
Index: mvnw.cmd
===================================================================
--- mvnw.cmd	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ mvnw.cmd	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -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%
Index: pom.xml
===================================================================
--- pom.xml	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ pom.xml	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>3.0.1</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
+	<groupId>com.example</groupId>
+	<artifactId>fooddeliverysystem</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<name>fooddeliverysystem</name>
+	<description>Demo project for Spring Boot</description>
+	<properties>
+		<java.version>17</java.version>
+	</properties>
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-jpa</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-thymeleaf</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.thymeleaf.extras</groupId>
+			<artifactId>thymeleaf-extras-springsecurity6</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.postgresql</groupId>
+			<artifactId>postgresql</artifactId>
+			<scope>runtime</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<version>1.18.24</version>
+			<scope>provided</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-security</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.thymeleaf.extras</groupId>
+			<artifactId>thymeleaf-extras-springsecurity5</artifactId>
+			<version>3.1.1.RELEASE</version>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
Index: src/main/java/com/example/fooddeliverysystem/FooddeliverysystemApplication.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/FooddeliverysystemApplication.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/FooddeliverysystemApplication.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,19 @@
+package com.example.fooddeliverysystem;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+@SpringBootApplication
+public class FooddeliverysystemApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(FooddeliverysystemApplication.class, args);
+	}
+	@Bean
+	public PasswordEncoder passwordEncoder(){
+		return new BCryptPasswordEncoder();
+	}
+}
Index: src/main/java/com/example/fooddeliverysystem/configuration/UsernameAndPasswordAuthProvider.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/configuration/UsernameAndPasswordAuthProvider.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/configuration/UsernameAndPasswordAuthProvider.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,42 @@
+package com.example.fooddeliverysystem.configuration;
+
+import com.example.fooddeliverysystem.service.UserService;
+import org.springframework.security.authentication.AuthenticationProvider;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Component;
+
+@Component
+public class UsernameAndPasswordAuthProvider implements AuthenticationProvider {
+
+
+    private final UserService userService;
+    private final PasswordEncoder passwordEncoder;
+
+    public UsernameAndPasswordAuthProvider(UserService userService, PasswordEncoder passwordEncoder) {
+        this.userService = userService;
+        this.passwordEncoder = passwordEncoder;
+    }
+
+    @Override
+    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
+        String username = authentication.getName();
+        String password = authentication.getCredentials().toString();
+
+        UserDetails userDetails = this.userService.loadUserByUsername(username);
+        if (!passwordEncoder.matches(password, userDetails.getPassword())) {
+            throw new BadCredentialsException("Password is incorrect!");
+        }
+
+        return new UsernamePasswordAuthenticationToken(userDetails, userDetails.getPassword(), userDetails.getAuthorities());
+    }
+
+    @Override
+    public boolean supports(Class<?> authentication) {
+        return authentication.equals(UsernamePasswordAuthenticationToken.class);
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/configuration/WebSecurityConfiguration.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/configuration/WebSecurityConfiguration.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/configuration/WebSecurityConfiguration.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,58 @@
+package com.example.fooddeliverysystem.configuration;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.security.web.SecurityFilterChain;
+
+
+@Configuration
+@EnableWebSecurity
+public class WebSecurityConfiguration {
+
+    private final PasswordEncoder passwordEncoder;
+    private final UsernameAndPasswordAuthProvider usernameAndPasswordAuthProvider;
+
+    public WebSecurityConfiguration(PasswordEncoder passwordEncoder, UsernameAndPasswordAuthProvider usernameAndPasswordAuthProvider) {
+        this.passwordEncoder = passwordEncoder;
+        this.usernameAndPasswordAuthProvider = usernameAndPasswordAuthProvider;
+    }
+
+    @Bean
+    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
+        http.csrf()
+                .disable()
+                .authorizeHttpRequests()
+                .requestMatchers("/salePlaces").hasAnyRole("ADMIN", "CONSUMER")
+                .requestMatchers("/checkOrderStatus").hasAnyRole("ADMIN", "CONSUMER")
+                .requestMatchers("/salePlace/Orders").hasAnyRole("ADMIN", "SALEPLACEEMPLOYEE")
+                .requestMatchers("/salePlace/**").hasAnyRole("ADMIN", "CONSUMER")
+                .requestMatchers("/checkOrderStatus").hasAnyRole("ADMIN", "CONSUMER")
+                .requestMatchers("/deliveryOrders").hasAnyRole("ADMIN", "DELIVER")
+                .requestMatchers("/takeOrder/*").hasAnyRole("ADMIN", "DELIVER")
+                .requestMatchers("/showOrderDeliverer").hasAnyRole("ADMIN", "DELIVER")
+                .requestMatchers("/orderPayment/*").hasAnyRole("ADMIN", "DELIVER")
+                .requestMatchers("/reports/**").hasRole("ADMIN")
+                .requestMatchers("/images/**","/home","/").permitAll()
+                .anyRequest()
+                .authenticated()
+                .and()
+                .formLogin()
+                .permitAll()
+                .failureUrl("/login?error=BadCredentials")
+                .defaultSuccessUrl("/home", true)
+                .and()
+                .logout()
+                .logoutUrl("/logout")
+                .clearAuthentication(true)
+                .invalidateHttpSession(true)
+                .deleteCookies("JSESSIONID")
+                .logoutSuccessUrl("/home");
+
+
+        return http.build();
+
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/exceptions/BadCredentialsException.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/exceptions/BadCredentialsException.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/exceptions/BadCredentialsException.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,8 @@
+package com.example.fooddeliverysystem.exceptions;
+
+public class BadCredentialsException extends Exception{
+
+    public BadCredentialsException(String message) {
+        super(message);
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/exceptions/FoodItemNotFoundException.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/exceptions/FoodItemNotFoundException.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/exceptions/FoodItemNotFoundException.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,8 @@
+package com.example.fooddeliverysystem.exceptions;
+
+public class FoodItemNotFoundException extends Exception{
+
+    public FoodItemNotFoundException(String message){
+        super(message);
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/exceptions/OrderNotFoundException.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/exceptions/OrderNotFoundException.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/exceptions/OrderNotFoundException.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,8 @@
+package com.example.fooddeliverysystem.exceptions;
+
+public class OrderNotFoundException extends Exception{
+
+    public OrderNotFoundException(String message) {
+        super(message);
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/exceptions/SalePlaceNotFoundException.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/exceptions/SalePlaceNotFoundException.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/exceptions/SalePlaceNotFoundException.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,11 @@
+package com.example.fooddeliverysystem.exceptions;
+
+
+import com.example.fooddeliverysystem.repository.SalePlaceRepository;
+
+public class SalePlaceNotFoundException extends Exception{
+
+    public SalePlaceNotFoundException(String message){
+        super(message);
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/exceptions/UserNotFoundException.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/exceptions/UserNotFoundException.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/exceptions/UserNotFoundException.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.exceptions;
+
+public class UserNotFoundException extends Exception{
+
+    public UserNotFoundException(String message){
+        super(message);
+    }
+
+}
Index: src/main/java/com/example/fooddeliverysystem/model/Admin.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/Admin.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/Admin.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,20 @@
+package com.example.fooddeliverysystem.model;
+
+import com.example.fooddeliverysystem.model.enums.Role;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Table(name = "admin_table")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Admin {
+    @Id
+    @Column(name = "korisnik_id")
+    private Long adminId;
+
+
+}
Index: src/main/java/com/example/fooddeliverysystem/model/Consumer.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/Consumer.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/Consumer.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,28 @@
+package com.example.fooddeliverysystem.model;
+
+import com.example.fooddeliverysystem.model.enums.Role;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Table(name = "potrosuvac")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Consumer {
+
+    @Id
+    @Column(name = "korisnik_id")
+    private Long consumerId;
+
+    @Column(name = "broj_naracki")
+    private Integer numberOfOrders;
+
+    @ManyToOne
+    @JoinColumn(name = "lokacija_id")
+    private Location location;
+
+
+}
Index: src/main/java/com/example/fooddeliverysystem/model/Deliver.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/Deliver.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/Deliver.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,30 @@
+package com.example.fooddeliverysystem.model;
+
+import com.example.fooddeliverysystem.model.enums.Role;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Table(name = "dostavuvac")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Deliver {
+
+    @Id
+    @Column(name = "korisnik_id")
+    private Long delivererId;
+
+    @ManyToOne
+    @JoinColumn(name = "admin_id")
+    private Admin admin;
+
+    @ManyToOne
+    @JoinColumn(name = "vozilo_id")
+    private Vehicle vehicle;
+
+
+
+}
Index: src/main/java/com/example/fooddeliverysystem/model/FoodItem.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/FoodItem.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/FoodItem.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,58 @@
+package com.example.fooddeliverysystem.model;
+
+import com.example.fooddeliverysystem.model.enums.Role;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Entity
+@Table(name = "hrana")
+
+@AllArgsConstructor
+@NoArgsConstructor
+public class FoodItem {
+
+    @Id
+    @Column(name = "id_stavka")
+    private Long foodItemId;
+
+    @Column(name = "ime_hra")
+    private String foodItemName;
+
+    @ManyToOne
+    @JoinColumn(name = "vrabotenpd_id")
+    private SalePlaceEmployee salePlaceEmployee;
+
+    @ManyToOne
+    @JoinColumn(name = "id_mesto")
+    private SalePlace salePlace;
+
+    @ManyToMany(fetch = FetchType.EAGER)
+    @JoinTable(name = "hrana_e_napravena_namirnica",
+    joinColumns = @JoinColumn(name = "id_stavka"),
+    inverseJoinColumns = @JoinColumn(name = "id_namirnica"))
+    private List<FoodStructure> foodStructures;
+
+    public Long getFoodItemId() {
+        return foodItemId;
+    }
+
+    public String getFoodItemName() {
+        return foodItemName;
+    }
+
+    public SalePlaceEmployee getSalePlaceEmployee() {
+        return salePlaceEmployee;
+    }
+
+    public SalePlace getSalePlace() {
+        return salePlace;
+    }
+
+    public List<FoodStructure> getFoodStructures() {
+        return foodStructures;
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/model/FoodStructure.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/FoodStructure.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/FoodStructure.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,28 @@
+package com.example.fooddeliverysystem.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Table(name = "namirnica")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class FoodStructure {
+
+    @Id
+    @Column(name = "id_namirnica")
+    private Long foodStructureId;
+
+    @Column(name = "ime_name")
+    private String foodStructureName;
+
+    @Column(name = "dali_alergent")
+    private Boolean isAllergen;
+
+}
Index: src/main/java/com/example/fooddeliverysystem/model/Franchize.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/Franchize.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/Franchize.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,24 @@
+package com.example.fooddeliverysystem.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Table(name = "franshiza")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Franchize {
+
+    @Id
+    @Column(name = "franshiza_id")
+    private Long franchizeId;
+
+    @Column(name = "ime")
+    private String franchizeName;
+}
Index: src/main/java/com/example/fooddeliverysystem/model/Location.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/Location.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/Location.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,27 @@
+package com.example.fooddeliverysystem.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Table(name = "lokacija")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Location {
+    @Id
+    @Column(name = "lokacija_id")
+    private Long locationId;
+
+
+    @Column(name = "adresa")
+    private String address;
+
+    @Column(name = "broj")
+    private Integer number;
+}
Index: src/main/java/com/example/fooddeliverysystem/model/Order.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/Order.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/Order.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,74 @@
+package com.example.fooddeliverysystem.model;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.sql.Timestamp;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+
+@Entity
+@Table(name = "naracka")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@NamedStoredProcedureQuery(
+        name = "calculate_cost_of_order_food2",
+        procedureName = "calculate_cost_of_order_food2",
+        parameters = {
+                @StoredProcedureParameter(mode = ParameterMode.IN, type = Integer.class, name = "order_id")
+        }
+)
+public class Order {
+
+    @Id
+    @Column(name = "naracka_id")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long orderId;
+
+    @Column(name = "nacinplakjanje")
+    private String typeOfPayment;
+
+    @Column(name = "status")
+    private String orderStatus;
+
+    @Column(name = "datum_naracka")
+    private Timestamp orderDate;
+
+    @ManyToOne
+    @JoinColumn(name = "dostavuvac_id")
+    private Deliver deliver;
+
+    @ManyToOne
+    @JoinColumn(name = "id_mesto")
+    private SalePlace salePlace;
+
+    @ManyToOne
+    @JoinColumn(name = "potrosuvac_id")
+    private Consumer consumer;
+
+    @ManyToOne
+    @JoinColumn(name = "naplata_id")
+    private OrderPayment orderPayment;
+
+    @Transient
+    private Integer orderCost;
+    public Order(String orderStatus, Timestamp orderDate, SalePlace salePlace, Consumer consumer) {
+        this.orderStatus = orderStatus;
+        this.orderDate = orderDate;
+        this.salePlace = salePlace;
+        this.consumer = consumer;
+
+    }
+
+    public Order(String typeOfPayment, String orderStatus, Timestamp orderDate, SalePlace salePlace, Consumer consumer) {
+        this.typeOfPayment = typeOfPayment;
+        this.orderStatus = orderStatus;
+        this.orderDate = orderDate;
+        this.salePlace = salePlace;
+        this.consumer = consumer;
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/model/OrderHasFood.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/OrderHasFood.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/OrderHasFood.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,21 @@
+package com.example.fooddeliverysystem.model;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+@Entity
+@Table(name = "naracka_sodrzi_hrana")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OrderHasFood {
+
+    @EmbeddedId
+    private OrderHasFoodKey orderHasFoodKey;
+
+
+
+    @Column(name = "kolicina")
+    private Integer quantity;
+}
Index: src/main/java/com/example/fooddeliverysystem/model/OrderHasFoodKey.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/OrderHasFoodKey.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/OrderHasFoodKey.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,27 @@
+package com.example.fooddeliverysystem.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Embeddable
+@Data
+@NoArgsConstructor
+
+public class OrderHasFoodKey implements Serializable {
+
+    @Column(name = "id_stavka")
+    private Long foodItemId;
+
+    @Column(name = "naracka_id")
+    private Long orderId;
+
+    public OrderHasFoodKey(Long foodItemId, Long orderId) {
+        this.foodItemId = foodItemId;
+        this.orderId = orderId;
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/model/OrderPayment.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/OrderPayment.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/OrderPayment.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,44 @@
+package com.example.fooddeliverysystem.model;
+
+import jakarta.persistence.*;
+
+import java.sql.Timestamp;
+import java.time.LocalDate;
+
+@Entity
+@Table(name = "naplata")
+public class OrderPayment {
+
+    @Id
+    @Column(name = "naplata_id")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long orderPaymentId;
+
+    @Column(name = "iznos")
+    private Integer orderCost;
+
+    @Column(name = "nplakjanje")
+    private String orderPaymentType;
+
+    @Column(name = "datum_naplata")
+    private Timestamp orderPaymentDate;
+
+    @ManyToOne
+    @JoinColumn(name = "potrosuvac_id")
+    private Consumer consumer;
+
+    @ManyToOne
+    @JoinColumn(name = "dostavuvac_id")
+    private Deliver deliver;
+
+    public OrderPayment(Integer orderCost, String orderPaymentType, Timestamp orderPaymentDate, Consumer consumer, Deliver deliver) {
+        this.orderCost = orderCost;
+        this.orderPaymentType = orderPaymentType;
+        this.orderPaymentDate = orderPaymentDate;
+        this.consumer = consumer;
+        this.deliver = deliver;
+    }
+    public OrderPayment(){
+
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/model/Price.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/Price.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/Price.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,38 @@
+package com.example.fooddeliverysystem.model;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDate;
+
+@Entity
+@Table(name = "cena")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+
+public class Price {
+
+
+   // @JoinColumn(name = "id_stavka", referencedColumnName = "id_stavka", nullable = false)
+    //@ManyToOne
+   // private FoodItem foodItem;
+
+   // @Id
+    //@Column(name = "broj_cena")
+    //private Long priceNumber;
+
+    @EmbeddedId
+    private PriceKey priceKey;
+
+    @Column(name = "iznos")
+    private Integer cost;
+
+    @Column(name = "vazi_od")
+    private LocalDate validFrom;
+
+    @Column(name = "vazi_do")
+    private LocalDate validTo;
+}
Index: src/main/java/com/example/fooddeliverysystem/model/PriceKey.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/PriceKey.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/PriceKey.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,32 @@
+package com.example.fooddeliverysystem.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.OneToOne;
+
+import java.io.Serializable;
+
+@Embeddable
+public class PriceKey implements Serializable {
+
+    @OneToOne(optional = false)
+    @JoinColumn(name = "id_stavka", nullable = false)
+    private FoodItem foodItem;
+
+    @Column(name = "broj_cena", nullable = false)
+    private Long priceNumber;
+
+
+    public PriceKey(){
+
+    }
+
+    public FoodItem getFoodItem() {
+        return foodItem;
+    }
+
+    public Long getPriceNumber() {
+        return priceNumber;
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/model/SalePlace.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/SalePlace.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/SalePlace.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,68 @@
+package com.example.fooddeliverysystem.model;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Entity
+@Table(name = "prodazhnomesto")
+
+@NoArgsConstructor
+@AllArgsConstructor
+public class SalePlace {
+    @Id
+    @Column(name = "id_mesto")
+    private Long salePalceId;
+
+    @Column(name = "ime")
+    private String salePlaceName;
+
+    @Column(name = "ulica")
+    private String salePlaceStreetName;
+
+    @Column(name = "broj")
+    private Integer salePlaceStreetNumber;
+
+    @ManyToOne
+    @JoinColumn(name = "franshiza_id")
+    private Franchize franchize;
+
+    @ManyToOne
+    @JoinColumn(name = "admin_id")
+    private Admin admin;
+
+    @OneToMany(mappedBy = "salePlace", fetch = FetchType.EAGER)
+    List<FoodItem> foodItemList;
+
+    public Long getSalePalceId() {
+        return salePalceId;
+    }
+
+    public String getSalePlaceName() {
+        return salePlaceName;
+    }
+
+    public String getSalePlaceStreetName() {
+        return salePlaceStreetName;
+    }
+
+    public Integer getSalePlaceStreetNumber() {
+        return salePlaceStreetNumber;
+    }
+
+    public Franchize getFranchize() {
+        return franchize;
+    }
+
+    public Admin getAdmin() {
+        return admin;
+    }
+
+    public List<FoodItem> getFoodItemList() {
+        return foodItemList;
+    }
+}
+
Index: src/main/java/com/example/fooddeliverysystem/model/SalePlaceEmployee.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/SalePlaceEmployee.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/SalePlaceEmployee.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,31 @@
+package com.example.fooddeliverysystem.model;
+
+import com.example.fooddeliverysystem.model.enums.Role;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Table(name = "vrabotenpd")
+
+@AllArgsConstructor
+@NoArgsConstructor
+public class SalePlaceEmployee {
+
+    @Id
+    @Column(name = "korisnik_id")
+    private Long salePlaceEmployeeId;
+
+    @ManyToOne
+    @JoinColumn(name = "id_mesto")
+    private SalePlace salePlace;
+
+    public Long getSalePlaceEmployeeId() {
+        return salePlaceEmployeeId;
+    }
+
+    public SalePlace getSalePlace() {
+        return salePlace;
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/model/User.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/User.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/User.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,36 @@
+package com.example.fooddeliverysystem.model;
+
+import com.example.fooddeliverysystem.model.enums.Role;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDate;
+
+@Entity
+@Table(name = "korisnik")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class User {
+
+    @Id
+    @Column(name = "korisnik_id")
+    private Long user_id;
+
+    @Column(name = "ime")
+    private String name;
+
+    @Column(name = "datum_kreiranje")
+    private LocalDate dateCreated;
+
+    @Column(name = "username")
+    private String username;
+
+    @Column(name = "password")
+    private String password;
+
+    @Transient
+    private Role userRole;
+}
Index: src/main/java/com/example/fooddeliverysystem/model/UserPrincipal.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/UserPrincipal.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/UserPrincipal.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,50 @@
+//package com.example.fooddeliverysystem.model;
+//
+//import org.springframework.security.core.GrantedAuthority;
+//import org.springframework.security.core.userdetails.UserDetails;
+//
+//import java.util.Collection;
+//
+//public class UserPrincipal {
+//
+//    private User user;
+//
+//    public UserPrincipal(User user){
+//        this.user = user;
+//    }
+//
+//    @Override
+//    public Collection<? extends GrantedAuthority> getAuthorities() {
+//        return null;
+//    }
+//
+//    @Override
+//    public String getPassword() {
+//        return null;
+//    }
+//
+//    @Override
+//    public String getUsername() {
+//        return null;
+//    }
+//
+//    @Override
+//    public boolean isAccountNonExpired() {
+//        return false;
+//    }
+//
+//    @Override
+//    public boolean isAccountNonLocked() {
+//        return false;
+//    }
+//
+//    @Override
+//    public boolean isCredentialsNonExpired() {
+//        return false;
+//    }
+//
+//    @Override
+//    public boolean isEnabled() {
+//        return false;
+//    }
+//}
Index: src/main/java/com/example/fooddeliverysystem/model/Vehicle.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/Vehicle.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/Vehicle.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,24 @@
+package com.example.fooddeliverysystem.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Table(name = "vozilo")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Vehicle {
+
+    @Id
+    @Column(name = "vozilo_id")
+    private Long vehicleId;
+
+    @Column(name = "tip_vozilo")
+    private String vehichleName;
+}
Index: src/main/java/com/example/fooddeliverysystem/model/enums/Role.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/enums/Role.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/enums/Role.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,8 @@
+package com.example.fooddeliverysystem.model.enums;
+
+public enum Role {
+    ADMIN,
+    CONSUMER,
+    DELIVER,
+    SALEPLACEEMPLOYEE
+}
Index: src/main/java/com/example/fooddeliverysystem/model/objects/FoodItemsWithQuantity.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/objects/FoodItemsWithQuantity.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/objects/FoodItemsWithQuantity.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,13 @@
+package com.example.fooddeliverysystem.model.objects;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class FoodItemsWithQuantity{
+    private String foodName;
+    private Integer foodQuantity;
+}
Index: src/main/java/com/example/fooddeliverysystem/model/userssecurity/UserPrincipal.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/userssecurity/UserPrincipal.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/userssecurity/UserPrincipal.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,56 @@
+package com.example.fooddeliverysystem.model.userssecurity;
+
+import com.example.fooddeliverysystem.model.User;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+public class UserPrincipal implements UserDetails {
+
+    private final User user;
+
+    public UserPrincipal(User user) {
+        this.user = user;
+    }
+
+    @Override
+    public Collection<? extends GrantedAuthority> getAuthorities() {
+        List<GrantedAuthority> authorityList = new ArrayList<>();
+        authorityList.add(new SimpleGrantedAuthority("ROLE_" + this.user.getUserRole().name()));
+        return authorityList;
+    }
+
+    @Override
+    public String getPassword() {
+        return this.user.getPassword();
+    }
+
+    @Override
+    public String getUsername() {
+        return this.user.getUsername();
+    }
+
+    @Override
+    public boolean isAccountNonExpired() {
+        return true;
+    }
+
+    @Override
+    public boolean isAccountNonLocked() {
+        return true;
+    }
+
+    @Override
+    public boolean isCredentialsNonExpired() {
+        return true;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/model/views/BestPacketsForEachSalePlace.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/views/BestPacketsForEachSalePlace.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/views/BestPacketsForEachSalePlace.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,32 @@
+package com.example.fooddeliverysystem.model.views;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.Immutable;
+
+@Entity(name = "najdobri_paketi_za_sekoe_prodazno_mesto")
+@Immutable
+@Data
+@NoArgsConstructor
+public class BestPacketsForEachSalePlace {
+
+
+    @Column(name = "ime")
+    private String namePlace;
+
+    @Id
+    @Column(name = "paket_id")
+    private Long packetId;
+
+    @Column(name = "se_sostoi_od")
+    private String contains;
+
+    @Column(name = "vkupno_prodadeni")
+    private Integer totalSold;
+
+    @Column(name = "ime_vraboten")
+    private String employeeThatAddedName;
+}
Index: src/main/java/com/example/fooddeliverysystem/model/views/DeliverNumberOfOrdersDeliveredBySalePlace.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/views/DeliverNumberOfOrdersDeliveredBySalePlace.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/views/DeliverNumberOfOrdersDeliveredBySalePlace.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,31 @@
+package com.example.fooddeliverysystem.model.views;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.Immutable;
+
+@Entity(name = "dostavuvac_dostavi_za_sekoe_prod_mesto")
+@Immutable
+@Data
+@NoArgsConstructor
+public class DeliverNumberOfOrdersDeliveredBySalePlace {
+
+    @Id
+    @Column(name = "id_mesto")
+    private Long salePlaceId;
+
+    @Column(name = "ime")
+    private String deliverName;
+
+    @Column(name = "ime_mesto")
+    private String salePlaceName;
+
+    @Column(name = "broj_naracki")
+    private Integer numberOfOrders;
+
+    @Column(name = "vkupna_suma")
+    private Integer totalSum;
+}
Index: src/main/java/com/example/fooddeliverysystem/model/views/FranchizeEarningsBySalePlace.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/views/FranchizeEarningsBySalePlace.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/views/FranchizeEarningsBySalePlace.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,26 @@
+package com.example.fooddeliverysystem.model.views;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.Immutable;
+
+@Entity(name = "franshiza_promet_mesta_tri_meseci")
+@Immutable
+@Data
+@NoArgsConstructor
+public class FranchizeEarningsBySalePlace {
+
+    @Id
+    @Column(name = "ime_franshiza")
+    private String franchizeName;
+
+    @Column(name = "ime_prodaznomesto")
+    private String salePlaceName;
+
+    @Column(name = "vkupen_promet")
+    private Integer totalSold;
+
+}
Index: src/main/java/com/example/fooddeliverysystem/model/views/MostLoyalCustomerForEachPlace.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/views/MostLoyalCustomerForEachPlace.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/views/MostLoyalCustomerForEachPlace.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,34 @@
+package com.example.fooddeliverysystem.model.views;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.Immutable;
+
+@Entity(name = "najveren_potrosuvac_za_sekoe_prodazno_mesto")
+@Immutable
+@Data
+@NoArgsConstructor
+public class MostLoyalCustomerForEachPlace {
+
+    @Column(name = "ime_potrosuvac")
+    private String customerName;
+
+    @Column(name = "ime_mesto")
+    private String salePlaceName;
+
+    @Column(name = "adresa_potrosuvac")
+    private String customerAdress;
+
+    @Column(name = "broj_adresa_potrosuvac")
+    private Integer customerAdressNumber;
+
+    @Id
+    @Column(name = "broj_naracka")
+    private Long orderNumber;
+
+
+
+}
Index: src/main/java/com/example/fooddeliverysystem/model/views/TotalCouponsByCustomer.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/model/views/TotalCouponsByCustomer.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/model/views/TotalCouponsByCustomer.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,25 @@
+package com.example.fooddeliverysystem.model.views;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.Immutable;
+
+@Entity(name = "potrosuvaci_vkupen_iznos_kuponi")
+@Immutable
+@Data
+@NoArgsConstructor
+public class TotalCouponsByCustomer {
+
+    @Id
+    @Column(name = "korisnik_id")
+    private Long userId;
+
+    @Column(name = "ime")
+    private String userName;
+
+    @Column(name = "vkupen_iznos")
+    private Integer totalSum;
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/AdminRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/AdminRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/AdminRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.repository;
+
+import com.example.fooddeliverysystem.model.Admin;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface AdminRepository extends JpaRepository<Admin, Long> {
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/ConsumerRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/ConsumerRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/ConsumerRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.repository;
+
+import com.example.fooddeliverysystem.model.Consumer;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ConsumerRepository extends JpaRepository<Consumer, Long> {
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/DeliverRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/DeliverRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/DeliverRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.repository;
+
+import com.example.fooddeliverysystem.model.Deliver;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface DeliverRepository extends JpaRepository<Deliver, Long> {
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/FoodItemRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/FoodItemRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/FoodItemRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,7 @@
+package com.example.fooddeliverysystem.repository;
+
+import com.example.fooddeliverysystem.model.FoodItem;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface FoodItemRepository extends JpaRepository<FoodItem, Long> {
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/OrderHasFoodRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/OrderHasFoodRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/OrderHasFoodRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,13 @@
+package com.example.fooddeliverysystem.repository;
+
+import com.example.fooddeliverysystem.model.OrderHasFood;
+import com.example.fooddeliverysystem.model.OrderHasFoodKey;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface OrderHasFoodRepository extends JpaRepository<OrderHasFood, OrderHasFoodKey> {
+    List<OrderHasFood> findAllByOrderHasFoodKeyOrderId(Long orderId);
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/OrderPaymentRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/OrderPaymentRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/OrderPaymentRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.repository;
+
+import com.example.fooddeliverysystem.model.OrderPayment;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface OrderPaymentRepository extends JpaRepository<OrderPayment, Long> {
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/OrderRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/OrderRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/OrderRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,23 @@
+package com.example.fooddeliverysystem.repository;
+
+import com.example.fooddeliverysystem.model.Consumer;
+import com.example.fooddeliverysystem.model.Deliver;
+import com.example.fooddeliverysystem.model.Order;
+import com.example.fooddeliverysystem.model.SalePlace;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.query.Procedure;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface OrderRepository extends JpaRepository<Order, Long> {
+
+    List<Order> findAllBySalePlaceAndOrderStatus(SalePlace salePlace, String orderStatus);
+
+    List<Order> findAllByOrderStatus(String status);
+
+    List<Order> findAllByOrderStatusAndDeliver(String status, Deliver deliver);
+
+    List<Order> findAllByConsumer(Consumer consumer);
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/PriceRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/PriceRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/PriceRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,15 @@
+package com.example.fooddeliverysystem.repository;
+
+import com.example.fooddeliverysystem.model.FoodItem;
+import com.example.fooddeliverysystem.model.Price;
+import com.example.fooddeliverysystem.model.PriceKey;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+@Repository
+public interface PriceRepository extends JpaRepository<Price, PriceKey> {
+    List<Price> findAllByPriceKey_FoodItem(FoodItem foodItem);
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/SalePlaceEmployeeRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/SalePlaceEmployeeRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/SalePlaceEmployeeRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.repository;
+
+import com.example.fooddeliverysystem.model.SalePlaceEmployee;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface SalePlaceEmployeeRepository extends JpaRepository<SalePlaceEmployee, Long> {
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/SalePlaceRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/SalePlaceRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/SalePlaceRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.repository;
+
+import com.example.fooddeliverysystem.model.SalePlace;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface SalePlaceRepository extends JpaRepository<SalePlace, Long> {
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/UserRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/UserRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/UserRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,13 @@
+package com.example.fooddeliverysystem.repository;
+
+import com.example.fooddeliverysystem.model.User;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+@Repository
+public interface UserRepository extends JpaRepository<User, Long> {
+
+    Optional<User> findByUsername(String username);
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/storedprocedure/OrderCostCalcualte.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/storedprocedure/OrderCostCalcualte.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/storedprocedure/OrderCostCalcualte.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,23 @@
+package com.example.fooddeliverysystem.repository.storedprocedure;
+
+import jakarta.persistence.*;
+import org.springframework.data.jpa.repository.query.Procedure;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+
+@Component
+public class OrderCostCalcualte {
+
+    @PersistenceContext
+    private EntityManager em;
+
+    @Procedure
+    public Integer calculate_cost_of_order_food(Long orderId){
+        StoredProcedureQuery query = em.createNamedStoredProcedureQuery("calculate_cost_of_order_food2");
+        query = query.setParameter("order_id", Integer.valueOf(String.valueOf(orderId)));
+        query.execute();
+       // System.out.println(query.getOutputParameterValue("vkupno_cena_hrana"));
+        return null;
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/BestPacketsForEachSalePlaceRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/BestPacketsForEachSalePlaceRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/BestPacketsForEachSalePlaceRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.repository.viewsrepos;
+
+import com.example.fooddeliverysystem.model.views.BestPacketsForEachSalePlace;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface BestPacketsForEachSalePlaceRepository extends JpaRepository<BestPacketsForEachSalePlace, Long> {
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/DeliverNumberOfOrdersDeliveredBySalePlaceRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/DeliverNumberOfOrdersDeliveredBySalePlaceRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/DeliverNumberOfOrdersDeliveredBySalePlaceRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.repository.viewsrepos;
+
+import com.example.fooddeliverysystem.model.views.DeliverNumberOfOrdersDeliveredBySalePlace;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface DeliverNumberOfOrdersDeliveredBySalePlaceRepository extends JpaRepository<DeliverNumberOfOrdersDeliveredBySalePlace, Long> {
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/FranchizeEarningsBySalePlaceRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/FranchizeEarningsBySalePlaceRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/FranchizeEarningsBySalePlaceRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.repository.viewsrepos;
+
+import com.example.fooddeliverysystem.model.views.FranchizeEarningsBySalePlace;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface FranchizeEarningsBySalePlaceRepository extends JpaRepository<FranchizeEarningsBySalePlace, String> {
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/MostLoyalCustomerForEachPlaceRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/MostLoyalCustomerForEachPlaceRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/MostLoyalCustomerForEachPlaceRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.repository.viewsrepos;
+
+import com.example.fooddeliverysystem.model.views.MostLoyalCustomerForEachPlace;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface MostLoyalCustomerForEachPlaceRepository extends JpaRepository<MostLoyalCustomerForEachPlace, Long> {
+}
Index: src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/TotalCouponsByCustomerRepository.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/TotalCouponsByCustomerRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/repository/viewsrepos/TotalCouponsByCustomerRepository.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.repository.viewsrepos;
+
+import com.example.fooddeliverysystem.model.views.TotalCouponsByCustomer;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TotalCouponsByCustomerRepository extends JpaRepository<TotalCouponsByCustomer,Long> {
+}
Index: src/main/java/com/example/fooddeliverysystem/service/BestPacketsForEachSalePlaceService.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/BestPacketsForEachSalePlaceService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/BestPacketsForEachSalePlaceService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,10 @@
+package com.example.fooddeliverysystem.service;
+
+import com.example.fooddeliverysystem.model.views.BestPacketsForEachSalePlace;
+
+import java.util.List;
+
+public interface BestPacketsForEachSalePlaceService {
+
+    List<BestPacketsForEachSalePlace> listAll();
+}
Index: src/main/java/com/example/fooddeliverysystem/service/DeliverNumberOfOrdersDeliveredBySalePlaceService.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/DeliverNumberOfOrdersDeliveredBySalePlaceService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/DeliverNumberOfOrdersDeliveredBySalePlaceService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,10 @@
+package com.example.fooddeliverysystem.service;
+
+import com.example.fooddeliverysystem.model.views.DeliverNumberOfOrdersDeliveredBySalePlace;
+
+import java.util.List;
+
+public interface DeliverNumberOfOrdersDeliveredBySalePlaceService {
+
+    List<DeliverNumberOfOrdersDeliveredBySalePlace> listAll();
+}
Index: src/main/java/com/example/fooddeliverysystem/service/FoodItemService.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/FoodItemService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/FoodItemService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,11 @@
+package com.example.fooddeliverysystem.service;
+
+import com.example.fooddeliverysystem.model.FoodItem;
+
+import java.util.List;
+
+public interface FoodItemService {
+
+    List<FoodItem> findAllFoodItemsByIds(List<Long> foodItemIds);
+    FoodItem findFoodItemById(Long id);
+}
Index: src/main/java/com/example/fooddeliverysystem/service/FranchizeEarningsBySalePlaceService.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/FranchizeEarningsBySalePlaceService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/FranchizeEarningsBySalePlaceService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,10 @@
+package com.example.fooddeliverysystem.service;
+
+import com.example.fooddeliverysystem.model.views.FranchizeEarningsBySalePlace;
+
+import java.util.List;
+
+public interface FranchizeEarningsBySalePlaceService {
+
+    List<FranchizeEarningsBySalePlace> listAll();
+}
Index: src/main/java/com/example/fooddeliverysystem/service/HasFoodService.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/HasFoodService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/HasFoodService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,12 @@
+package com.example.fooddeliverysystem.service;
+
+import com.example.fooddeliverysystem.model.OrderHasFood;
+import com.example.fooddeliverysystem.model.objects.FoodItemsWithQuantity;
+
+import java.util.List;
+
+public interface HasFoodService {
+    List<OrderHasFood> findAllFoodsInOrder(Long orderId);
+
+    List<FoodItemsWithQuantity> findAllFoodnamesInOrder(Long orderId);
+}
Index: src/main/java/com/example/fooddeliverysystem/service/MostLoyalCustomerForEachPlaceService.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/MostLoyalCustomerForEachPlaceService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/MostLoyalCustomerForEachPlaceService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,10 @@
+package com.example.fooddeliverysystem.service;
+
+import com.example.fooddeliverysystem.model.views.MostLoyalCustomerForEachPlace;
+
+import java.util.List;
+
+public interface MostLoyalCustomerForEachPlaceService {
+
+    List<MostLoyalCustomerForEachPlace> listAll();
+}
Index: src/main/java/com/example/fooddeliverysystem/service/OrderPaymentService.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/OrderPaymentService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/OrderPaymentService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.service;
+
+import com.example.fooddeliverysystem.exceptions.FoodItemNotFoundException;
+import com.example.fooddeliverysystem.exceptions.OrderNotFoundException;
+
+public interface OrderPaymentService {
+
+    void createOrderPayment(Long orderId) throws OrderNotFoundException, FoodItemNotFoundException;
+}
Index: src/main/java/com/example/fooddeliverysystem/service/OrderService.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/OrderService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/OrderService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,28 @@
+package com.example.fooddeliverysystem.service;
+
+import com.example.fooddeliverysystem.exceptions.FoodItemNotFoundException;
+import com.example.fooddeliverysystem.exceptions.OrderNotFoundException;
+import com.example.fooddeliverysystem.exceptions.SalePlaceNotFoundException;
+import com.example.fooddeliverysystem.model.Order;
+
+import java.util.List;
+
+public interface OrderService {
+
+    void placeOrder(String typeOfPayment, Long salePlaceId, List<Long> foodIds, List<Integer> foodPrices, List<Integer> foodQuantities, String username) throws SalePlaceNotFoundException;
+
+    Order changeOrderStatus(Long orderId, String status);
+
+    Integer calculateCostOfOrder(Long orderId) throws FoodItemNotFoundException;
+    List<Order> findAllOrdersReadyToBeDelivered();
+
+    List<Order> findAllOrdersForDeliver(String username);
+
+    Order updateOrderDeliver(String username, Long orderId);
+
+    Order findOrderById(Long orderId) throws OrderNotFoundException;
+
+    List<Order> findAllOrdersForCustomer(String username);
+
+    void saveOrder(Order order);
+}
Index: src/main/java/com/example/fooddeliverysystem/service/PriceService.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/PriceService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/PriceService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,13 @@
+package com.example.fooddeliverysystem.service;
+
+import com.example.fooddeliverysystem.exceptions.FoodItemNotFoundException;
+import com.example.fooddeliverysystem.model.FoodItem;
+import com.example.fooddeliverysystem.model.Price;
+
+import java.util.List;
+
+public interface PriceService {
+
+    List<Price> findAllPrices();
+    Price findCurrentPriceForFoodItem(FoodItem foodItem) throws FoodItemNotFoundException;
+}
Index: src/main/java/com/example/fooddeliverysystem/service/SalePlaceService.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/SalePlaceService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/SalePlaceService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,16 @@
+package com.example.fooddeliverysystem.service;
+
+import com.example.fooddeliverysystem.exceptions.SalePlaceNotFoundException;
+import com.example.fooddeliverysystem.model.Order;
+import com.example.fooddeliverysystem.model.SalePlace;
+
+import java.util.List;
+
+public interface SalePlaceService {
+
+    List<SalePlace> findAll();
+    SalePlace findSalePlaceServiceById(Long id) throws SalePlaceNotFoundException;
+
+    List<Order> findAllCreatedOrders(String username) throws SalePlaceNotFoundException;
+     SalePlace findSalePlaceForUser(String username);
+}
Index: src/main/java/com/example/fooddeliverysystem/service/TotalCouponsByCustomerService.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/TotalCouponsByCustomerService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/TotalCouponsByCustomerService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,9 @@
+package com.example.fooddeliverysystem.service;
+
+import com.example.fooddeliverysystem.model.views.TotalCouponsByCustomer;
+
+import java.util.List;
+
+public interface TotalCouponsByCustomerService {
+    List<TotalCouponsByCustomer> listAll();
+}
Index: src/main/java/com/example/fooddeliverysystem/service/UserService.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/UserService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/UserService.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,14 @@
+package com.example.fooddeliverysystem.service;
+
+import com.example.fooddeliverysystem.exceptions.UserNotFoundException;
+import com.example.fooddeliverysystem.model.User;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.util.List;
+
+public interface UserService {
+
+    List<User> findAllUsers();
+
+    UserDetails loadUserByUsername(String username);
+}
Index: src/main/java/com/example/fooddeliverysystem/service/impl/BestPacketsForEachSalePlaceServiceImpl.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/impl/BestPacketsForEachSalePlaceServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/impl/BestPacketsForEachSalePlaceServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,23 @@
+package com.example.fooddeliverysystem.service.impl;
+
+import com.example.fooddeliverysystem.model.views.BestPacketsForEachSalePlace;
+import com.example.fooddeliverysystem.repository.viewsrepos.BestPacketsForEachSalePlaceRepository;
+import com.example.fooddeliverysystem.service.BestPacketsForEachSalePlaceService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class BestPacketsForEachSalePlaceServiceImpl implements BestPacketsForEachSalePlaceService {
+
+    private final BestPacketsForEachSalePlaceRepository bestPacketsForEachSalePlaceRepository;
+
+    public BestPacketsForEachSalePlaceServiceImpl(BestPacketsForEachSalePlaceRepository bestPacketsForEachSalePlaceRepository) {
+        this.bestPacketsForEachSalePlaceRepository = bestPacketsForEachSalePlaceRepository;
+    }
+
+    @Override
+    public List<BestPacketsForEachSalePlace> listAll() {
+        return this.bestPacketsForEachSalePlaceRepository.findAll();
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/service/impl/DeliverNumberOfOrdersDeliveredBySalePlaceServiceImpl.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/impl/DeliverNumberOfOrdersDeliveredBySalePlaceServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/impl/DeliverNumberOfOrdersDeliveredBySalePlaceServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,23 @@
+package com.example.fooddeliverysystem.service.impl;
+
+import com.example.fooddeliverysystem.model.views.DeliverNumberOfOrdersDeliveredBySalePlace;
+import com.example.fooddeliverysystem.repository.viewsrepos.DeliverNumberOfOrdersDeliveredBySalePlaceRepository;
+import com.example.fooddeliverysystem.service.DeliverNumberOfOrdersDeliveredBySalePlaceService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class DeliverNumberOfOrdersDeliveredBySalePlaceServiceImpl implements DeliverNumberOfOrdersDeliveredBySalePlaceService {
+
+    private final DeliverNumberOfOrdersDeliveredBySalePlaceRepository deliverNumberOfOrdersDeliveredBySalePlaceRepository;
+
+    public DeliverNumberOfOrdersDeliveredBySalePlaceServiceImpl(DeliverNumberOfOrdersDeliveredBySalePlaceRepository deliverNumberOfOrdersDeliveredBySalePlaceRepository) {
+        this.deliverNumberOfOrdersDeliveredBySalePlaceRepository = deliverNumberOfOrdersDeliveredBySalePlaceRepository;
+    }
+
+    @Override
+    public List<DeliverNumberOfOrdersDeliveredBySalePlace> listAll() {
+        return this.deliverNumberOfOrdersDeliveredBySalePlaceRepository.findAll();
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/service/impl/FoodItemServceImpl.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/impl/FoodItemServceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/impl/FoodItemServceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,28 @@
+package com.example.fooddeliverysystem.service.impl;
+
+import com.example.fooddeliverysystem.model.FoodItem;
+import com.example.fooddeliverysystem.repository.FoodItemRepository;
+import com.example.fooddeliverysystem.service.FoodItemService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class FoodItemServceImpl implements FoodItemService {
+
+    private final FoodItemRepository foodItemRepository;
+
+    public FoodItemServceImpl(FoodItemRepository foodItemRepository) {
+        this.foodItemRepository = foodItemRepository;
+    }
+
+    @Override
+    public List<FoodItem> findAllFoodItemsByIds(List<Long> foodItemIds) {
+        return this.foodItemRepository.findAllById(foodItemIds);
+    }
+
+    @Override
+    public FoodItem findFoodItemById(Long id) {
+        return this.foodItemRepository.findById(id).get();
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/service/impl/FranchizeEarningsBySalePlaceServiceImpl.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/impl/FranchizeEarningsBySalePlaceServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/impl/FranchizeEarningsBySalePlaceServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,24 @@
+package com.example.fooddeliverysystem.service.impl;
+
+import com.example.fooddeliverysystem.model.views.FranchizeEarningsBySalePlace;
+import com.example.fooddeliverysystem.repository.viewsrepos.FranchizeEarningsBySalePlaceRepository;
+import com.example.fooddeliverysystem.service.FranchizeEarningsBySalePlaceService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class FranchizeEarningsBySalePlaceServiceImpl implements FranchizeEarningsBySalePlaceService {
+
+
+    private final FranchizeEarningsBySalePlaceRepository franchizeEarningsBySalePlaceRepository;
+
+    public FranchizeEarningsBySalePlaceServiceImpl(FranchizeEarningsBySalePlaceRepository franchizeEarningsBySalePlaceRepository) {
+        this.franchizeEarningsBySalePlaceRepository = franchizeEarningsBySalePlaceRepository;
+    }
+
+    @Override
+    public List<FranchizeEarningsBySalePlace> listAll() {
+        return this.franchizeEarningsBySalePlaceRepository.findAll();
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/service/impl/HasFoodServiceImpl.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/impl/HasFoodServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/impl/HasFoodServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,49 @@
+package com.example.fooddeliverysystem.service.impl;
+
+import com.example.fooddeliverysystem.model.FoodItem;
+import com.example.fooddeliverysystem.model.OrderHasFood;
+import com.example.fooddeliverysystem.model.objects.FoodItemsWithQuantity;
+import com.example.fooddeliverysystem.repository.FoodItemRepository;
+import com.example.fooddeliverysystem.repository.OrderHasFoodRepository;
+import com.example.fooddeliverysystem.service.FoodItemService;
+import com.example.fooddeliverysystem.service.HasFoodService;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class HasFoodServiceImpl implements HasFoodService {
+
+
+    private final OrderHasFoodRepository orderHasFoodRepository;
+    private final FoodItemRepository foodItemRepository;
+    public HasFoodServiceImpl(OrderHasFoodRepository orderHasFoodRepository, FoodItemRepository foodItemRepository) {
+        this.orderHasFoodRepository = orderHasFoodRepository;
+        this.foodItemRepository = foodItemRepository;
+    }
+    @Override
+    public List<OrderHasFood> findAllFoodsInOrder(Long orderId) {
+        return this.orderHasFoodRepository.findAllByOrderHasFoodKeyOrderId(orderId);
+    }
+
+    @Override
+    public List<FoodItemsWithQuantity> findAllFoodnamesInOrder(Long orderId) {
+        List<FoodItemsWithQuantity> foodNamesAndQuantites = new ArrayList<>();
+
+        List<OrderHasFood> orderHasFoodList = this.orderHasFoodRepository.findAll();
+        for(OrderHasFood orderHasFood: orderHasFoodList){
+            if(orderId.equals(orderHasFood.getOrderHasFoodKey().getOrderId())){
+                FoodItem foodItem = this.foodItemRepository.findById(orderHasFood.getOrderHasFoodKey().getFoodItemId()).get();
+                String name = foodItem.getFoodItemName();
+                Integer quantity = orderHasFood.getQuantity();
+                foodNamesAndQuantites.add(new FoodItemsWithQuantity(name, quantity));
+
+            }
+
+
+        }
+
+        return foodNamesAndQuantites;
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/service/impl/MostLoyalCustomerForEachPlaceServiceImpl.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/impl/MostLoyalCustomerForEachPlaceServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/impl/MostLoyalCustomerForEachPlaceServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,23 @@
+package com.example.fooddeliverysystem.service.impl;
+
+import com.example.fooddeliverysystem.model.views.MostLoyalCustomerForEachPlace;
+import com.example.fooddeliverysystem.repository.viewsrepos.MostLoyalCustomerForEachPlaceRepository;
+import com.example.fooddeliverysystem.service.MostLoyalCustomerForEachPlaceService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class MostLoyalCustomerForEachPlaceServiceImpl implements MostLoyalCustomerForEachPlaceService {
+
+    private final MostLoyalCustomerForEachPlaceRepository mostLoyalCustomerForEachPlaceRepository;
+
+    public MostLoyalCustomerForEachPlaceServiceImpl(MostLoyalCustomerForEachPlaceRepository mostLoyalCustomerForEachPlaceRepository) {
+        this.mostLoyalCustomerForEachPlaceRepository = mostLoyalCustomerForEachPlaceRepository;
+    }
+
+    @Override
+    public List<MostLoyalCustomerForEachPlace> listAll() {
+        return this.mostLoyalCustomerForEachPlaceRepository.findAll();
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/service/impl/OrderPaymentServiceImpl.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/impl/OrderPaymentServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/impl/OrderPaymentServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,43 @@
+package com.example.fooddeliverysystem.service.impl;
+
+import com.example.fooddeliverysystem.exceptions.FoodItemNotFoundException;
+import com.example.fooddeliverysystem.exceptions.OrderNotFoundException;
+import com.example.fooddeliverysystem.model.Consumer;
+import com.example.fooddeliverysystem.model.Deliver;
+import com.example.fooddeliverysystem.model.Order;
+import com.example.fooddeliverysystem.model.OrderPayment;
+import com.example.fooddeliverysystem.repository.OrderPaymentRepository;
+import com.example.fooddeliverysystem.service.OrderPaymentService;
+import com.example.fooddeliverysystem.service.OrderService;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+
+@Service
+public class OrderPaymentServiceImpl implements OrderPaymentService {
+
+    private final OrderService orderService;
+    private final OrderPaymentRepository orderPaymentRepository;
+
+    public OrderPaymentServiceImpl(OrderService orderService, OrderPaymentRepository orderPaymentRepository) {
+        this.orderService = orderService;
+        this.orderPaymentRepository = orderPaymentRepository;
+    }
+
+
+
+    @Override
+    public void createOrderPayment(Long orderId) throws OrderNotFoundException, FoodItemNotFoundException {
+      Order order = this.orderService.findOrderById(orderId);
+      Integer orderCost = this.orderService.calculateCostOfOrder(orderId);
+      Deliver deliver = order.getDeliver();
+      Consumer consumer = order.getConsumer();
+      OrderPayment orderPayment = new OrderPayment(orderCost, order.getTypeOfPayment(), Timestamp.valueOf(LocalDateTime.now()), consumer, deliver);
+      order.setOrderStatus("zavrsena");
+      OrderPayment orderPayment1 = this.orderPaymentRepository.save(orderPayment);
+      Order order1 = this.orderService.findOrderById(orderId);
+      order1.setOrderPayment(orderPayment1);
+      this.orderService.saveOrder(order1);
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/service/impl/OrderServiceImpl.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/impl/OrderServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/impl/OrderServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,127 @@
+package com.example.fooddeliverysystem.service.impl;
+
+import com.example.fooddeliverysystem.exceptions.FoodItemNotFoundException;
+import com.example.fooddeliverysystem.exceptions.OrderNotFoundException;
+import com.example.fooddeliverysystem.exceptions.SalePlaceNotFoundException;
+import com.example.fooddeliverysystem.model.*;
+import com.example.fooddeliverysystem.repository.*;
+import com.example.fooddeliverysystem.service.OrderService;
+import com.example.fooddeliverysystem.service.PriceService;
+import com.example.fooddeliverysystem.service.SalePlaceService;
+import com.example.fooddeliverysystem.service.UserService;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class OrderServiceImpl implements OrderService {
+
+    private final SalePlaceService salePlaceService;
+    private final OrderRepository orderRepository;
+    private final OrderHasFoodRepository orderHasFoodRepository;
+    private final UserRepository userRepository;
+    private final ConsumerRepository consumerRepository;
+
+    private final FoodItemRepository foodItemRepository;
+    private final DeliverRepository deliverRepository;
+    private final PriceService priceService;
+    public OrderServiceImpl(SalePlaceService salePlaceRepository, OrderRepository orderRepository, OrderHasFoodRepository orderHasFoodRepository, UserRepository userRepository,
+                            ConsumerRepository consumerRepository, FoodItemRepository foodItemRepository, PriceService priceService, DeliverRepository deliverRepository) {
+        this.salePlaceService = salePlaceRepository;
+        this.orderRepository = orderRepository;
+        this.orderHasFoodRepository = orderHasFoodRepository;
+        this.userRepository = userRepository;
+        this.consumerRepository = consumerRepository;
+        this.foodItemRepository = foodItemRepository;
+        this.priceService = priceService;
+        this.deliverRepository = deliverRepository;
+    }
+
+    @Override
+    public void placeOrder(String typeOfPayment, Long salePlaceId, List<Long> foodIds, List<Integer> foodPrices, List<Integer> foodQuantities, String username) throws SalePlaceNotFoundException {
+        SalePlace salePlace = this.salePlaceService.findSalePlaceServiceById(salePlaceId);
+        User user = this.userRepository.findByUsername(username).get();
+        Consumer consumer = this.consumerRepository.findById(user.getUser_id()).get();
+
+        Order order = new Order(typeOfPayment,"kreirana", Timestamp.valueOf(LocalDateTime.now()), salePlace ,consumer);
+        List<OrderHasFood> orderHasFoodList = new ArrayList<>();
+        order = orderRepository.save(order);
+        for(int i = 0; i < foodIds.size(); i++){
+
+            if(foodQuantities.get(i) != null) {
+                OrderHasFood orderHasFood = new OrderHasFood(new OrderHasFoodKey(foodIds.get(i), order.getOrderId()), foodQuantities.get(i));
+                orderHasFoodList.add(orderHasFood);
+            }
+        }
+        this.orderHasFoodRepository.saveAll(orderHasFoodList);
+
+
+
+    }
+
+    @Override
+    public Order changeOrderStatus(Long orderId, String status) {
+        Order order = this.orderRepository.findById(orderId).get();
+        order.setOrderStatus(status);
+
+        return this.orderRepository.save(order);
+    }
+
+    @Override
+    public Integer calculateCostOfOrder(Long orderId)  throws FoodItemNotFoundException {
+        Integer totalCost = 0;
+        List<OrderHasFood> orderHasFoodList = this.orderHasFoodRepository.findAllByOrderHasFoodKeyOrderId(orderId);
+        for(OrderHasFood orderHasFood: orderHasFoodList){
+            Long foodItemId = orderHasFood.getOrderHasFoodKey().getFoodItemId();
+            FoodItem foodItem = this.foodItemRepository.findById(foodItemId).get();
+            Integer quantity = orderHasFood.getQuantity();
+            Integer price = this.priceService.findCurrentPriceForFoodItem(foodItem).getCost();
+            totalCost += quantity * price;
+
+        }
+
+        return totalCost;
+    }
+
+    @Override
+    public List<Order> findAllOrdersReadyToBeDelivered() {
+        return this.orderRepository.findAllByOrderStatus("spremna");
+    }
+
+    @Override
+    public List<Order> findAllOrdersForDeliver(String username) {
+        User user = this.userRepository.findByUsername(username).get();
+        Deliver deliver = this.deliverRepository.findById(user.getUser_id()).get();
+        return this.orderRepository.findAllByOrderStatusAndDeliver("prevzemena", deliver);
+    }
+
+    @Override
+    public Order updateOrderDeliver(String username, Long orderId) {
+        User user = this.userRepository.findByUsername(username).get();
+        Deliver deliver = this.deliverRepository.findById(user.getUser_id()).get();
+        Order order = this.orderRepository.findById(orderId).get();
+        order.setDeliver(deliver);
+        return this.orderRepository.save(order);
+    }
+
+    @Override
+    public Order findOrderById(Long orderId) throws OrderNotFoundException {
+        return this.orderRepository.findById(orderId).orElseThrow(() -> new OrderNotFoundException("order cannot be found"));
+    }
+
+    @Override
+    public List<Order> findAllOrdersForCustomer(String username) {
+        User user = this.userRepository.findByUsername(username).get();
+        Consumer customer = this.consumerRepository.findById(user.getUser_id()).get();
+        return this.orderRepository.findAllByConsumer(customer);
+    }
+
+    @Override
+    public void saveOrder(Order order) {
+        this.orderRepository.save(order);
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/service/impl/PriceServiceImpl.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/impl/PriceServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/impl/PriceServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,36 @@
+package com.example.fooddeliverysystem.service.impl;
+
+import com.example.fooddeliverysystem.exceptions.FoodItemNotFoundException;
+import com.example.fooddeliverysystem.model.FoodItem;
+import com.example.fooddeliverysystem.model.Price;
+import com.example.fooddeliverysystem.repository.PriceRepository;
+import com.example.fooddeliverysystem.service.PriceService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class PriceServiceImpl implements PriceService {
+
+    private final PriceRepository priceRepository;
+
+    public PriceServiceImpl(PriceRepository priceRepository) {
+        this.priceRepository = priceRepository;
+    }
+
+    @Override
+    public List<Price> findAllPrices() {
+        return this.priceRepository.findAll();
+    }
+
+    @Override
+    public Price findCurrentPriceForFoodItem(FoodItem foodItem) throws FoodItemNotFoundException {
+        List<Price> pricesForFoodItem = this.priceRepository.findAllByPriceKey_FoodItem(foodItem);
+        Optional<Price> currentPrice = pricesForFoodItem.stream()
+                .sorted((price1, price2) -> (int) (price2.getPriceKey().getPriceNumber() - price1.getPriceKey().getPriceNumber()))
+                .findFirst();
+        return currentPrice.orElseThrow(() -> new FoodItemNotFoundException("food item cannot be found"));
+
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/service/impl/SalePlaceServiceImpl.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/impl/SalePlaceServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/impl/SalePlaceServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,59 @@
+package com.example.fooddeliverysystem.service.impl;
+
+import com.example.fooddeliverysystem.exceptions.SalePlaceNotFoundException;
+import com.example.fooddeliverysystem.model.Order;
+import com.example.fooddeliverysystem.model.SalePlace;
+import com.example.fooddeliverysystem.model.SalePlaceEmployee;
+import com.example.fooddeliverysystem.model.User;
+import com.example.fooddeliverysystem.repository.OrderRepository;
+import com.example.fooddeliverysystem.repository.SalePlaceEmployeeRepository;
+import com.example.fooddeliverysystem.repository.SalePlaceRepository;
+import com.example.fooddeliverysystem.repository.UserRepository;
+import com.example.fooddeliverysystem.service.SalePlaceService;
+import com.example.fooddeliverysystem.service.UserService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class SalePlaceServiceImpl implements SalePlaceService {
+
+    private SalePlaceRepository salePlaceRepository;
+    private OrderRepository orderRepository;
+
+    private UserRepository userRepository;
+    private SalePlaceEmployeeRepository salePlaceEmployeeRepository;
+    public SalePlaceServiceImpl(SalePlaceRepository salePlaceRepository, OrderRepository orderRepository, UserRepository userRepository,
+                                SalePlaceEmployeeRepository salePlaceEmployeeRepository) {
+        this.salePlaceRepository = salePlaceRepository;
+        this.orderRepository = orderRepository;
+        this.userRepository = userRepository;
+        this.salePlaceEmployeeRepository = salePlaceEmployeeRepository;
+    }
+
+    @Override
+    public List<SalePlace> findAll() {
+        return this.salePlaceRepository.findAll();
+    }
+
+    @Override
+    public SalePlace findSalePlaceServiceById(Long id) throws SalePlaceNotFoundException {
+        return this.salePlaceRepository.findById(id).orElseThrow(() -> new SalePlaceNotFoundException("Sale place not found"));
+
+    }
+
+    @Override
+    public List<Order> findAllCreatedOrders(String username) throws SalePlaceNotFoundException{
+
+        return this.orderRepository.findAllBySalePlaceAndOrderStatus(findSalePlaceForUser(username), "kreirana");
+    }
+
+    @Override
+    public SalePlace findSalePlaceForUser(String username){
+        User user = this.userRepository.findByUsername(username).get();
+
+        SalePlaceEmployee salePlaceEmployee = this.salePlaceEmployeeRepository.findById(user.getUser_id()).get();
+        return salePlaceEmployee.getSalePlace();
+    }
+}
+
Index: src/main/java/com/example/fooddeliverysystem/service/impl/TotalCouponsByCustomerServiceImpl.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/impl/TotalCouponsByCustomerServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/impl/TotalCouponsByCustomerServiceImpl.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,23 @@
+package com.example.fooddeliverysystem.service.impl;
+
+import com.example.fooddeliverysystem.model.views.TotalCouponsByCustomer;
+import com.example.fooddeliverysystem.repository.viewsrepos.TotalCouponsByCustomerRepository;
+import com.example.fooddeliverysystem.service.TotalCouponsByCustomerService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class TotalCouponsByCustomerServiceImpl implements TotalCouponsByCustomerService {
+
+    private  final TotalCouponsByCustomerRepository totalCouponsByCustomerRepository;
+
+    public TotalCouponsByCustomerServiceImpl(TotalCouponsByCustomerRepository totalCouponsByCustomerRepository) {
+        this.totalCouponsByCustomerRepository = totalCouponsByCustomerRepository;
+    }
+
+    @Override
+    public List<TotalCouponsByCustomer> listAll() {
+        return this.totalCouponsByCustomerRepository.findAll();
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/service/impl/UserServiceImplementation.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/service/impl/UserServiceImplementation.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/service/impl/UserServiceImplementation.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,58 @@
+package com.example.fooddeliverysystem.service.impl;
+
+import com.example.fooddeliverysystem.exceptions.UserNotFoundException;
+import com.example.fooddeliverysystem.model.User;
+
+import com.example.fooddeliverysystem.model.enums.Role;
+import com.example.fooddeliverysystem.model.userssecurity.UserPrincipal;
+import com.example.fooddeliverysystem.repository.*;
+import com.example.fooddeliverysystem.service.UserService;
+import org.springframework.security.config.authentication.UserServiceBeanDefinitionParser;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class UserServiceImplementation implements UserService, UserDetailsService {
+    private final UserRepository userRepository;
+    private final AdminRepository adminRepository;
+    private final ConsumerRepository consumerRepository;
+    private final SalePlaceEmployeeRepository salePlaceEmployeeRepository;
+
+    private final DeliverRepository deliverRepository;
+    public UserServiceImplementation(UserRepository userRepository, AdminRepository adminRepository, ConsumerRepository consumerRepository, SalePlaceEmployeeRepository salePlaceEmployeeRepository,
+                                     DeliverRepository deliverRepository) {
+        this.userRepository = userRepository;
+        this.adminRepository = adminRepository;
+        this.consumerRepository = consumerRepository;
+        this.salePlaceEmployeeRepository = salePlaceEmployeeRepository;
+        this.deliverRepository = deliverRepository;
+    }
+
+    @Override
+    public List<User> findAllUsers() {
+        return this.userRepository.findAll();
+    }
+
+
+
+    @Override
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+        User user = this.userRepository.findByUsername(username).orElseThrow(() -> new UsernameNotFoundException("Username not found"));
+        Long id = user.getUser_id();
+        if(this.adminRepository.findById(id).isPresent())
+            user.setUserRole(Role.ADMIN);
+        else if(this.consumerRepository.findById(id).isPresent())
+            user.setUserRole(Role.CONSUMER);
+        else if(this.deliverRepository.findById(id).isPresent())
+            user.setUserRole(Role.DELIVER);
+        else
+            user.setUserRole(Role.SALEPLACEEMPLOYEE);
+        return new UserPrincipal(user);
+    }
+
+
+}
Index: src/main/java/com/example/fooddeliverysystem/web/DeliveryController.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/web/DeliveryController.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/web/DeliveryController.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,79 @@
+package com.example.fooddeliverysystem.web;
+
+
+import com.example.fooddeliverysystem.exceptions.FoodItemNotFoundException;
+import com.example.fooddeliverysystem.exceptions.OrderNotFoundException;
+import com.example.fooddeliverysystem.model.Order;
+import com.example.fooddeliverysystem.service.OrderPaymentService;
+import com.example.fooddeliverysystem.service.OrderService;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Controller
+public class DeliveryController {
+
+    private final OrderService orderService;
+
+    private final OrderPaymentService orderPaymentService;
+    public DeliveryController(OrderService orderService, OrderPaymentService orderPaymentService) {
+        this.orderService = orderService;
+        this.orderPaymentService = orderPaymentService;
+    }
+
+    @GetMapping("/deliveryOrders")
+    public String showOrdersForDelivery(Model model){
+        List<Integer> costs = new ArrayList<>();
+        List<Order> orders = this.orderService.findAllOrdersReadyToBeDelivered();
+        for(Order order: orders){
+            try {
+                costs.add(this.orderService.calculateCostOfOrder(order.getOrderId()));
+            } catch (FoodItemNotFoundException e) {
+                System.out.println(e.getMessage());
+            }
+        }
+        model.addAttribute("orders", orders);
+        model.addAttribute("costs", costs);
+        return "delivery";
+    }
+
+    @GetMapping("/takeOrder/{id}")
+    public String deliverTakesOrder(@PathVariable Long id, HttpServletRequest httpServletRequest){
+        this.orderService.changeOrderStatus(id, "prevzemena");
+        this.orderService.updateOrderDeliver(httpServletRequest.getRemoteUser(), id);
+        return "redirect:/showOrderDeliverer";
+    }
+    @GetMapping("/showOrderDeliverer")
+    public String showDelivererAllOrders(Model model, HttpServletRequest httpServletRequest){
+        List<Integer> costs = new ArrayList<>();
+        List<Order> orders = this.orderService.findAllOrdersForDeliver(httpServletRequest.getRemoteUser());
+        System.out.println(orders);
+        for(Order order: orders){
+            try {
+                costs.add(this.orderService.calculateCostOfOrder(order.getOrderId()));
+            } catch (FoodItemNotFoundException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        model.addAttribute("orders", orders);
+        model.addAttribute("costs", costs);
+        return "ordersfordeliver";
+    }
+    @GetMapping("/orderPayment/{id}")
+    public String markOrderAsPayed(@PathVariable Long id){
+        try {
+            this.orderPaymentService.createOrderPayment(id);
+        } catch (OrderNotFoundException e) {
+            System.out.println(e.getMessage());
+        } catch (FoodItemNotFoundException e) {
+            System.out.println(e.getMessage());
+        }
+        return "redirect:/showOrderDeliverer";
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/web/ReportsController.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/web/ReportsController.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/web/ReportsController.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,62 @@
+package com.example.fooddeliverysystem.web;
+
+import com.example.fooddeliverysystem.service.*;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import java.util.HashSet;
+import java.util.Set;
+
+@Controller
+public class ReportsController {
+
+    private final BestPacketsForEachSalePlaceService bestPacketsForEachSalePlaceService;
+    private final MostLoyalCustomerForEachPlaceService mostLoyalCustomerForEachPlaceService;
+
+    private final FranchizeEarningsBySalePlaceService franchizeEarningsBySalePlaceService;
+
+    private final DeliverNumberOfOrdersDeliveredBySalePlaceService deliverNumberOfOrdersDeliveredBySalePlaceService;
+
+    private final TotalCouponsByCustomerService totalCouponsByCustomerService;
+    public ReportsController(BestPacketsForEachSalePlaceService bestPacketsForEachSalePlaceService,
+                             MostLoyalCustomerForEachPlaceService mostLoyalCustomerForEachPlaceService,
+                             FranchizeEarningsBySalePlaceService franchizeEarningsBySalePlaceService,
+                             DeliverNumberOfOrdersDeliveredBySalePlaceService deliverNumberOfOrdersDeliveredBySalePlaceService,
+                             TotalCouponsByCustomerService totalCouponsByCustomerService) {
+        this.bestPacketsForEachSalePlaceService = bestPacketsForEachSalePlaceService;
+        this.mostLoyalCustomerForEachPlaceService = mostLoyalCustomerForEachPlaceService;
+        this.franchizeEarningsBySalePlaceService = franchizeEarningsBySalePlaceService;
+        this.deliverNumberOfOrdersDeliveredBySalePlaceService = deliverNumberOfOrdersDeliveredBySalePlaceService;
+        this.totalCouponsByCustomerService = totalCouponsByCustomerService;
+    }
+
+    @GetMapping("/reports/bestPacketsEachSalePlace")
+    public String getBestPacketsEachSalePlace(Model model){
+        model.addAttribute("report", this.bestPacketsForEachSalePlaceService.listAll());
+        return "reportsBestPacketsEachSalePlace";
+    }
+    @GetMapping("/reports/mostLoyalCustomerForEachPlace")
+    public String getMostLoyalCustomerForEachPlace(Model model){
+        model.addAttribute("report", this.mostLoyalCustomerForEachPlaceService.listAll());
+        return "reportsMostLoyalCustomerForEachPlace";
+    }
+    @GetMapping("/reports/franchizeEarningsBySalePlace")
+    public String getFranchizeEarningsBySalePlace(Model model){
+        model.addAttribute("report", this.franchizeEarningsBySalePlaceService.listAll());
+        return "reportsFranchizeEarningsBySalePlace";
+    }
+
+    @GetMapping("/reports/DeliverNumberOfOrdersDeliveredBySalePlace")
+    public String getDeliverNumberOfOrdersDeliveredBySalePlace(Model model){
+        Set s = new HashSet(this.deliverNumberOfOrdersDeliveredBySalePlaceService.listAll());
+        model.addAttribute("report", s);
+        return "reportsDeliverNumberOfOrdersDeliveredBySalePlace";
+    }
+
+    @GetMapping("/reports/TotalCouponsByCustomer")
+    public String getTotalCouponsByCustomer(Model model){
+        model.addAttribute("report", this.totalCouponsByCustomerService.listAll());
+        return "reportsTotalCouponsByCustomer";
+    }
+}
Index: src/main/java/com/example/fooddeliverysystem/web/SalePlaceController.java
===================================================================
--- src/main/java/com/example/fooddeliverysystem/web/SalePlaceController.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/java/com/example/fooddeliverysystem/web/SalePlaceController.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,156 @@
+package com.example.fooddeliverysystem.web;
+
+import com.example.fooddeliverysystem.exceptions.FoodItemNotFoundException;
+import com.example.fooddeliverysystem.exceptions.SalePlaceNotFoundException;
+import com.example.fooddeliverysystem.model.*;
+import com.example.fooddeliverysystem.model.objects.FoodItemsWithQuantity;
+import com.example.fooddeliverysystem.repository.PriceRepository;
+import com.example.fooddeliverysystem.repository.storedprocedure.OrderCostCalcualte;
+import com.example.fooddeliverysystem.service.*;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Controller
+public class SalePlaceController {
+
+    private final OrderCostCalcualte orderCostCalcualte;
+
+    private final SalePlaceService salePlaceService;
+    private final PriceService priceService;
+    private final OrderService orderService;
+    private final HasFoodService hasFoodService;
+    private final FoodItemService foodItemService;
+
+
+    public SalePlaceController(SalePlaceService salePlaceService, PriceService priceService, OrderService orderService, HasFoodService hasFoodService,
+                               FoodItemService foodItemService, OrderCostCalcualte orderCostCalcualte) {
+        this.salePlaceService = salePlaceService;
+        this.priceService = priceService;
+        this.orderService = orderService;
+        this.hasFoodService = hasFoodService;
+        this.foodItemService = foodItemService;
+        this.orderCostCalcualte = orderCostCalcualte;
+    }
+
+    @GetMapping("/salePlaces")
+    public String showSalePlaces(Model model) {
+        List<SalePlace> salePlaceList = this.salePlaceService.findAll();
+        model.addAttribute("salePlaces", salePlaceList);
+
+        return "saleplaces";
+    }
+
+    @GetMapping("/salePlace/{id}")
+    public String showSalePlaceFooItems(@PathVariable Long id, Model model) {
+        try {
+            model.addAttribute("foodItems", this.salePlaceService.findSalePlaceServiceById(id).getFoodItemList());
+            model.addAttribute("salePlaceId", id);
+            List<Price> prices = new ArrayList<>();
+            this.salePlaceService.findSalePlaceServiceById(id)
+                    .getFoodItemList()
+                    .forEach(foodItem -> {
+                        try {
+                            prices.add(this.priceService.findCurrentPriceForFoodItem(foodItem));
+                        } catch (FoodItemNotFoundException e) {
+                            model.addAttribute("foodItemError", e.getMessage());
+                        }
+                    });
+            System.out.println(prices);
+
+            model.addAttribute("prices", prices);
+        } catch (SalePlaceNotFoundException salePlaceNotFoundException) {
+            model.addAttribute("error", salePlaceNotFoundException.getMessage());
+        }
+        return "saleplacefooditems";
+    }
+
+    @PostMapping("/salePlace/{id}")
+    public String createOrderInSalePlace(@PathVariable Long id,
+                                         @RequestParam List<Long> foodIds,
+                                         @RequestParam List<Integer> foodPrice,
+                                         @RequestParam List<Integer> quantity,
+                                         @RequestParam String typeOfPayment,
+                                         HttpServletRequest httpServletRequest) {
+        try {
+            this.orderService.placeOrder(typeOfPayment, id, foodIds, foodPrice, quantity, httpServletRequest.getRemoteUser());
+
+        } catch (SalePlaceNotFoundException e) {
+            throw new RuntimeException(e);
+        }
+        return "redirect:/checkOrderStatus";
+    }
+
+    @GetMapping("/salePlace/Orders")
+    public String showSalePlaceOrders(Model model, HttpServletRequest httpServletRequest) {
+
+        Map<Long, List<FoodItem>> map = new HashMap<>();
+        String username = httpServletRequest.getRemoteUser();
+        try {
+            List<Order> orders = this.salePlaceService.findAllCreatedOrders(username).stream().sorted(Comparator.comparingLong(Order::getOrderId)).collect(Collectors.toList());
+            List<OrderHasFood> orderHasFoodList = new ArrayList<>();
+            model.addAttribute("orders", orders);
+            List<List<OrderHasFood>> outer = new ArrayList<>();
+            for (Order order : orders) {
+                List<OrderHasFood> inner = this.hasFoodService.findAllFoodsInOrder(order.getOrderId());
+                outer.add(inner);
+                List<FoodItem> items = new ArrayList<>();
+                for (OrderHasFood orderHasFood : inner) {
+                    FoodItem foodItems = this.salePlaceService.findSalePlaceServiceById(this.salePlaceService.findSalePlaceForUser(username).getSalePalceId())
+                            .getFoodItemList()
+                            .stream().filter(foodItem -> foodItem.getFoodItemId().equals(orderHasFood.getOrderHasFoodKey().getFoodItemId()))
+                            .findFirst().get();
+                    items.add(foodItems);
+
+                }
+                map.put(order.getOrderId(), items);
+                model.addAttribute("quantity", outer);
+            }
+
+            model.addAttribute("orderHasFoods", map);
+
+        } catch (SalePlaceNotFoundException e) {
+            model.addAttribute("error", "sale place not found");
+        }
+        return "saleplaceorders";
+
+    }
+
+    @GetMapping("/changeOrderStatus/{id}")
+    public String changeOrderStauts(@PathVariable Long id) {
+        this.orderService.changeOrderStatus(id, "spremna");
+        return "redirect:/salePlace/Orders";
+    }
+
+    @GetMapping("/checkOrderStatus")
+    public String showOrderStatusToUser(HttpServletRequest httpServletRequest, Model model) {
+        String username = httpServletRequest.getRemoteUser();
+        List<Order> orders = this.orderService.findAllOrdersForCustomer(username);
+        model.addAttribute("orders", orders.stream().sorted((a,b) -> Long.compare(b.getOrderId(), a.getOrderId())).collect(Collectors.toList()));
+        Map<Long, List<FoodItemsWithQuantity>> foodNamesInOrder = new HashMap<>();
+        for(Order order: orders){
+            foodNamesInOrder.put(order.getOrderId(), this.hasFoodService.findAllFoodnamesInOrder(order.getOrderId()));
+        }
+
+        model.addAttribute("foodNames", foodNamesInOrder);
+        return "showOrderStatusCustomer";
+    }
+
+    @GetMapping("/home")
+    public String showHomePage() {
+
+        return "home";
+    }
+    @GetMapping("/")
+    public String showHome() {
+        return "home";
+    }
+}
Index: src/main/resources/application-prod.properties
===================================================================
--- src/main/resources/application-prod.properties	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/application-prod.properties	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,13 @@
+spring.datasource.url=jdbc:postgresql://localhost:9999/db_202223z_va_prj_fooddeliverysystem?currentSchema=project
+spring.datasource.username=db_202223z_va_prj_fooddeliverysystem_owner
+spring.datasource.password=fef149cea32b
+
+
+## default connection pool
+
+spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQL95Dialect
+spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
+
+spring.jpa.hibernate.ddl-auto=validate
+spring.jpa.show-sql=true
+
Index: src/main/resources/application.properties
===================================================================
--- src/main/resources/application.properties	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/application.properties	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,1 @@
+spring.profiles.active=prod
Index: src/main/resources/templates/delivery.html
===================================================================
--- src/main/resources/templates/delivery.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/templates/delivery.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+          integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+</head>
+<body>
+
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark" style="height: 55px">
+    <div class="collapse navbar-collapse" id="navbarSupportedContent">
+        <ul class="navbar-nav mr-auto">
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none;"
+                                    th:href="@{/home}">Врати се назад</a></li>
+        </ul>
+    </div>
+</nav>
+<h1 class="display-4" style="margin-left: 1%; font-size: 33px;">Подготвени нарачки за достава</h1>
+<div style="width: 1500px; height: 1000px; margin-top: 20px; margin-left: 20px">
+    <div th:each="order : ${orders}"
+         style="width: 350px; padding-top: 10px; background-color: #f6f5f5; margin-bottom: 10px ; margin-right: 15px; height: 210px; display: inline-block; border: 1px solid black">
+        <p style="margin-left: 20px;" th:text="'Улица: ' + ${order.getConsumer().getLocation().getAddress()}"></p>
+        <p style="margin-left: 20px;" th:text="'Број: ' + ${order.getConsumer().getLocation().getNumber()}"></p>
+        <p style="margin-left: 20px;" th:if="${orderStat.index < costs.size()}"
+           th:text="'Цена: ' + ${costs.get(orderStat.index)}"></p>
+        <p style="margin-left: 20px;" th:text="'Продажно место: ' + ${order.getSalePlace().getSalePlaceName()}"></p>
+        <a style="margin-left: 15px; margin-top: -4px;" class="btn btn-success text-white "
+           th:href="@{'/takeOrder/{id}' (id = ${order.getOrderId()})}">Превземи нарачка</a>
+    </div>
+</div>
+</body>
+</html>
Index: src/main/resources/templates/home.html
===================================================================
--- src/main/resources/templates/home.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/templates/home.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
+      xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity5">
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+      integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+<head>
+    <meta charset="UTF-8">
+    <title>Home</title>
+</head>
+<body>
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark" style="height: 55px">
+    <div class="collapse navbar-collapse" id="navbarSupportedContent">
+        <ul class="navbar-nav mr-auto" >
+            <!--<li class="nav-item"><a th:href="@{/home}"><img src="../images/logo.jpg" height="60px" width="121px"></a></li>-->
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none; margin-right: 20px" th:href="@{/home}">FoodDelivery</a></li>
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none; margin-right: 20px" th:href="@{/salePlaces}" sec:authorize="hasRole('ROLE_CONSUMER')">Продажни места</a></li>
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none; margin-right: 20px" th:href="@{/checkOrderStatus}" sec:authorize="hasRole('ROLE_CONSUMER')">Статус нарачки</a></li>
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none; margin-right: 20px" th:href="@{/salePlace/Orders}" sec:authorize="hasRole('ROLE_SALEPLACEEMPLOYEE')">Нарачки</a></li>
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none; margin-right: 20px" th:href="@{/deliveryOrders}" sec:authorize="hasRole('ROLE_DELIVER')">Превземете нарачка</a></li>
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none; margin-right: 20px" th:href="@{/showOrderDeliverer}" sec:authorize="hasRole('ROLE_DELIVER')">Ваши нарачки</a></li>
+
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none; margin-right: 20px" th:href="@{/reports/bestPacketsEachSalePlace}" sec:authorize="hasRole('ROLE_ADMIN')">Најдобри пакети</a></li>
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none; margin-right: 20px" th:href="@{/reports/mostLoyalCustomerForEachPlace}" sec:authorize="hasRole('ROLE_ADMIN')">Најверен потрошувач</a></li>
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none; margin-right: 20px" th:href="@{/reports/franchizeEarningsBySalePlace}" sec:authorize="hasRole('ROLE_ADMIN')">Промет франшиза</a></li>
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none; margin-right: 20px" th:href="@{/reports/DeliverNumberOfOrdersDeliveredBySalePlace}" sec:authorize="hasRole('ROLE_ADMIN')">Доставувач број достави</a></li>
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none; margin-right: 20px" th:href="@{/reports/TotalCouponsByCustomer}" sec:authorize="hasRole('ROLE_ADMIN')">Купони</a></li>
+            <a href="/logout" style="color: #01ea01;position: absolute;margin-left: 90%;" sec:authorize="isAuthenticated()">Log out</a>
+            <a href="/login" style="color: #01ea01;position: absolute;margin-left: 90%;" sec:authorize="!isAuthenticated()">Log in</a>
+
+        </ul>
+    </div>
+
+</nav>
+
+
+
+    <img style = "height: 915px; width: 2000px;" class ='img-fluid' th:src = "@{/images/homepage.jpg}" />
+
+
+</body>
+</html>
Index: src/main/resources/templates/ordersfordeliver.html
===================================================================
--- src/main/resources/templates/ordersfordeliver.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/templates/ordersfordeliver.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+          integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+</head>
+<body>
+
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark" style="height: 55px">
+    <div class="collapse navbar-collapse" id="navbarSupportedContent">
+        <ul class="navbar-nav mr-auto">
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none;"
+                                    th:href="@{/home}">Врати се назад</a></li>
+        </ul>
+    </div>
+</nav>
+<h1 class="display-4" style="margin-left: 5%; font-size: 33px;">Ваши достави</h1>
+    <div th:each="order : ${orders}" style="width: 90%; margin-left: auto; margin-right: auto; margin-top:10px;" class="border">
+        <table class="table" >
+            <tr><th scope="col">Адреса</th><th scope="col">Број</th><th scope="col">Цена</th><th scope="col">Продажно место</th><th scope="col">Начин на плаќање</th><th scope="col"></th></tr>
+
+            <tr>
+                <td th:text="${order.getConsumer().getLocation().getAddress()}"></td>
+                <td th:text="${order.getConsumer().getLocation().getNumber()}"></td>
+                <td th:text="${costs.get(orderStat.index)}"></td>
+                <td th:text="${order.getSalePlace().getSalePlaceName()}"></td>
+                <td th:text="${order.getTypeOfPayment()}"></td>
+                <td><a class="btn btn-success text-white " th:href="@{'/orderPayment/{id}' (id = ${order.getOrderId()})}">Потврдете дека е платена</a></td>
+            </tr>
+        </table>
+    </div>
+
+
+</body>
+</html>
Index: src/main/resources/templates/reportsBestPacketsEachSalePlace.html
===================================================================
--- src/main/resources/templates/reportsBestPacketsEachSalePlace.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/templates/reportsBestPacketsEachSalePlace.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Najdobar Paket</title>
+  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+        integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+</head>
+<body>
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark" style="height: 55px">
+  <div class="collapse navbar-collapse" id="navbarSupportedContent">
+    <ul class="navbar-nav mr-auto">
+      <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none;"
+                              th:href="@{/home}">Врати се назад</a></li>
+    </ul>
+  </div>
+</nav>
+<h1 class="display-4">Најдобри пакети за продажно место</h1>
+<table class="table">
+
+  <thead class="thead-light">
+  <tr>
+    <th scope="col">Продажно место</th>
+    <th scope="col">Id Пакет</th>
+    <th scope="col">Содржи</th>
+    <th scope="col">Вкупно продадени</th>
+   <th scope="col">Вработен кој го додал</th></tr>
+  </thead>
+  <tbody>
+    <tr th:each ="res: ${report}" itemscope="row">
+      <td th:text = "${res.getNamePlace()}"></td>
+      <td th:text = "${res.getPacketId()}"> </td>
+      <td th:text = "${res.getContains()}"></td>
+      <td th:text = "${res.getTotalSold()}"></td>
+      <td th:text = "${res.getEmployeeThatAddedName()}"></td>
+
+    </tr>
+  </tbody>
+</table>
+</body>
+</html>
Index: src/main/resources/templates/reportsDeliverNumberOfOrdersDeliveredBySalePlace.html
===================================================================
--- src/main/resources/templates/reportsDeliverNumberOfOrdersDeliveredBySalePlace.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/templates/reportsDeliverNumberOfOrdersDeliveredBySalePlace.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Dostavuvach broj dostavi</title>
+  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+        integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+</head>
+<body>
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark" style="height: 55px">
+  <div class="collapse navbar-collapse" id="navbarSupportedContent">
+    <ul class="navbar-nav mr-auto">
+      <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none;"
+                              th:href="@{/home}">Врати се назад</a></li>
+    </ul>
+  </div>
+</nav>
+<h1 class="display-4">Број на достави на доставувач за секое продажно место</h1>
+<table class="table">
+
+  <thead class="thead-light">
+  <th>Доставувач</th>
+  <th>Продажно место</th>
+  <th>Број на нарачки</th>
+  <th>Сума</th>
+
+  </thead>
+  <tbody>
+  <tr th:each ="res: ${report}" itemscope="row">
+    <td th:text = "${res.getDeliverName()}"></td>
+    <td th:text = "${res.getSalePlaceName()}"> </td>
+    <td th:text = "${res.getNumberOfOrders()}"></td>
+    <td th:text = "${res.getTotalSum()}"></td>
+
+
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
Index: src/main/resources/templates/reportsFranchizeEarningsBySalePlace.html
===================================================================
--- src/main/resources/templates/reportsFranchizeEarningsBySalePlace.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/templates/reportsFranchizeEarningsBySalePlace.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Promet franshiza</title>
+  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+        integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+</head>
+<body>
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark" style="height: 55px">
+  <div class="collapse navbar-collapse" id="navbarSupportedContent">
+    <ul class="navbar-nav mr-auto">
+      <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none;"
+                              th:href="@{/home}">Врати се назад</a></li>
+    </ul>
+  </div>
+</nav>
+<h1 class="display-4">Промет франшиза за секое продажно место</h1>
+<table class="table">
+
+  <thead class="thead-light">
+  <tr>
+  <th>Име франшиза</th>
+  <th>Име продажно место</th>
+  <th>Промет</th>
+  </tr>
+  </thead>
+  <tbody>
+  <tr th:each ="res: ${report}" itemscope="row">
+    <td th:text = "${res.getFranchizeName()}"></td>
+    <td th:text = "${res.getSalePlaceName()}"> </td>
+    <td th:text = "${res.getTotalSold()}"></td>
+
+
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
Index: src/main/resources/templates/reportsMostLoyalCustomerForEachPlace.html
===================================================================
--- src/main/resources/templates/reportsMostLoyalCustomerForEachPlace.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/templates/reportsMostLoyalCustomerForEachPlace.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Najveren potroshuvach</title>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+          integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+</head>
+<body>
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark" style="height: 55px">
+    <div class="collapse navbar-collapse" id="navbarSupportedContent">
+        <ul class="navbar-nav mr-auto">
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none;"
+                                    th:href="@{/home}">Врати се назад</a></li>
+        </ul>
+    </div>
+</nav>
+<h1 class="display-4">Најверен потрошувач за секое продажно место</h1>
+<table class="table">
+
+    <thead class="thead-light">
+    <tr>
+    <th>Потрошувач</th>
+    <th>Продажно место</th>
+    <th>Адреса на потрошувач</th>
+    <th>Број на адреса</th>
+    <th>Број на нарачки</th>
+    </tr>
+    </thead>
+    <tbody>
+    <tr th:each ="res: ${report}" itemscope="row">
+        <td th:text = "${res.getCustomerName()}"></td>
+        <td th:text = "${res.getSalePlaceName()}"> </td>
+        <td th:text = "${res.getCustomerAdress()}"></td>
+        <td th:text = "${res.getCustomerAdressNumber()}"></td>
+        <td th:text = "${res.getOrderNumber()}"></td>
+
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
Index: src/main/resources/templates/reportsTotalCouponsByCustomer.html
===================================================================
--- src/main/resources/templates/reportsTotalCouponsByCustomer.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/templates/reportsTotalCouponsByCustomer.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Купони</title>
+  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+        integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+</head>
+<body>
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark" style="height: 55px">
+  <div class="collapse navbar-collapse" id="navbarSupportedContent">
+    <ul class="navbar-nav mr-auto">
+      <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none;"
+                              th:href="@{/home}">Врати се назад</a></li>
+    </ul>
+  </div>
+</nav>
+<h1 class="display-4">Купони на купувачи</h1>
+<table class="table">
+
+  <thead class="thead-light">
+  <th>Id на корисник</th>
+  <th>Username</th>
+  <th>Сума</th>
+
+
+  </thead>
+  <tbody>
+  <tr th:each ="res: ${report}" itemscope="row">
+    <td th:text = "${res.getUserId()}"></td>
+    <td th:text = "${res.getUserName()}"> </td>
+    <td th:text = "${res.getTotalSum()}"></td>
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
Index: src/main/resources/templates/saleplacefooditems.html
===================================================================
--- src/main/resources/templates/saleplacefooditems.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/templates/saleplacefooditems.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+          integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+</head>
+
+<body>
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark" style="height: 55px">
+    <div class="collapse navbar-collapse" id="navbarSupportedContent">
+        <ul class="navbar-nav mr-auto">
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none;"
+                                    th:href="@{/home}">Врати се назад</a></li>
+        </ul>
+    </div>
+</nav>
+
+<div th:if="${error != null}">
+    <p th:text="${error}"></p>
+</div>
+
+<table class="table">
+    <thead class="thead-light">
+    <tr>
+        <th scope="col">Продукт</th>
+        <th scope="col">Цена</th>
+        <th scope="col">Количина</th>
+    </tr>
+    </thead>
+
+    <tbody>
+    <form th:action="@{'/salePlace/{id}'(id = ${salePlaceId})}" th:method="POST">
+        <tr th:each="foodItem : ${foodItems}">
+            <td>
+                <input hidden th:text="${foodItem.getFoodItemName()}" th:value="${foodItem.getFoodItemId()}"
+                       name="foodIds"/>
+            </td>
+            <td>
+                <input hidden th:if="${foodItemStat.index < prices.size()}"
+                       th:value="${prices.get(foodItemStat.index).getCost()}"
+                       th:text="${prices.get(foodItemStat.index).getCost()}"
+                       name="foodPrice" class="cena">
+            </td>
+            <td>
+                <input type="number" name="quantity" class="kolichina">
+            </td>
+        </tr>
+        <tr>
+            <td>
+                <select name="typeOfPayment" id="typeOfPayment">
+                    <option value="cash">Во готово</option>
+                    <option value="card">Картичка</option>
+                </select>
+            </td>
+            <td>Вкупно: <span id="totalPrice">0</span></td>
+            <td>
+                <input type="submit" value="Направете нарачка">
+            </td>
+        </tr>
+    </form>
+    </tbody>
+</table>
+
+</body>
+<script>
+    const totalPriceSpan = document.querySelector('#totalPrice');
+    const kolichini = document.getElementsByClassName("kolichina");
+    for(let j = 0; j<kolichini.length;j++){
+        kolichini[j].addEventListener('change',handleTotalPrice);
+    }
+    function handleTotalPrice(event){
+        const ceni = document.getElementsByClassName("cena");
+        let total = 0;
+        for(let i = 0; i<kolichini.length;i++){
+            total+=ceni[i].value * kolichini[i].value;
+        }
+        totalPriceSpan.innerHTML = total.toString();
+    }
+</script>
+</html>
Index: src/main/resources/templates/saleplaceorders.html
===================================================================
--- src/main/resources/templates/saleplaceorders.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/templates/saleplaceorders.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+          integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+</head>
+<body>
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark" style="height: 55px">
+    <div class="collapse navbar-collapse" id="navbarSupportedContent">
+        <ul class="navbar-nav mr-auto">
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none;"
+                                    th:href="@{/home}">Врати се назад</a></li>
+        </ul>
+    </div>
+</nav>
+<h1 class="display-4" style="margin-left: 5%; font-size: 33px;">Нарачки</h1>
+
+
+<div th:each="order : ${orders}" style="width: 90%; margin-left: auto; margin-right: auto; margin-top:10px;" class="border">
+    <table class="table container-fluid" >
+        <tr><th scope="col" style="width: 25%">Број</th><th scope="col"style="width: 25%">Статус</th><th scope="col" style="width: 25%">Производ</th><th scope="col"style="width: 25%"></th></tr>
+
+        <tr>
+            <td th:text="${order.getOrderId()}"></td>
+            <td th:text="${order.getOrderStatus()}"></td>
+            <td>
+                <div th:each="food : ${orderHasFoods.get(order.getOrderId())}" >
+                    <span th:text="${food.getFoodItemName()}"></span>
+                    <th:block th:each = "q1: ${quantity}">
+                        <th:block th:each = "q2 : ${q1}">
+                            <span th:if = "${q2.getOrderHasFoodKey().orderId == order.getOrderId() && food.getFoodItemId() == q2.getOrderHasFoodKey().foodItemId }" th:text = "${q2.quantity}">
+
+                            </span>
+                        </th:block>
+                    </th:block>
+                </div>
+
+            </td>
+
+            <td><a class="btn btn-success text-white " th:href="@{'/changeOrderStatus/{id}' (id = ${order.getOrderId()})}">Промени го статусот во спремна</a></td>
+        </tr>
+    </table>
+</div>
+
+</body>
+</html>
Index: src/main/resources/templates/saleplaces.html
===================================================================
--- src/main/resources/templates/saleplaces.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/templates/saleplaces.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+          integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+</head>
+<body>
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark" style="height: 55px">
+    <div class="collapse navbar-collapse" id="navbarSupportedContent">
+        <ul class="navbar-nav mr-auto">
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none;"
+                                    th:href="@{/home}">Врати се назад</a></li>
+        </ul>
+    </div>
+</nav>
+
+
+<h1 class="display-4" style="margin-left:15px; font-size: 33px;">Продажни места</h1>
+<br/>
+<table class="table">
+    <tbody>
+    <tr th:each="salePlace : ${salePlaces}">
+        <td>
+            <a th:href="@{'/salePlace/{id}'(id = ${salePlace.getSalePalceId()})}"
+               th:text="${salePlace.getSalePlaceName()}"
+               style="font-weight: bolder; text-decoration: none; margin-left: 10px; text-transform: uppercase; color:black;"></a>
+        </td>
+    </tr>
+    </tbody>
+</table>
+
+</body>
+</html>
Index: src/main/resources/templates/showOrderStatusCustomer.html
===================================================================
--- src/main/resources/templates/showOrderStatusCustomer.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/main/resources/templates/showOrderStatusCustomer.html	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css"
+          integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+</head>
+<body>
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark" style="height: 55px">
+    <div class="collapse navbar-collapse" id="navbarSupportedContent">
+        <ul class="navbar-nav mr-auto">
+            <li class="nav-item"><a style="color: white; font-weight: bolder; text-decoration: none;"
+                                    th:href="@{/home}">Врати се назад</a></li>
+        </ul>
+    </div>
+</nav>
+<h1 class="display-4" style="margin-left:15px; font-size: 33px;">Историјат на вашите нарачки</h1>
+<table class="table">
+    <thead class="thead-light">
+    <tr>
+        <th scope="col">БР.</th>
+        <th scope="col">СТАТУС</th>
+        <th scope="col">СОДРЖИ</th>
+    </tr>
+    </thead>
+    <tbody>
+    <tr th:each="order: ${orders}" itemscope="row">
+        <td
+            th:text="${order.getOrderId()}"></td>
+        <td
+            th:text="${order.getOrderStatus()}"></td>
+        <td>
+            <div th:each = "foodObj : ${foodNames.get(order.getOrderId())}">
+                <span th:text = "${foodObj.getFoodName()}"></span>
+                <span th:text = "${foodObj.getFoodQuantity()}"></span>
+            </div>
+        </td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
Index: src/test/java/com/example/fooddeliverysystem/FooddeliverysystemApplicationTests.java
===================================================================
--- src/test/java/com/example/fooddeliverysystem/FooddeliverysystemApplicationTests.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
+++ src/test/java/com/example/fooddeliverysystem/FooddeliverysystemApplicationTests.java	(revision 8d11f8c8bebea20f293d0a27e03c1e19c049ba9b)
@@ -0,0 +1,13 @@
+package com.example.fooddeliverysystem;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class FooddeliverysystemApplicationTests {
+
+	@Test
+	void contextLoads() {
+	}
+
+}
