Showing preview only (357K chars total). Download the full file or copy to clipboard to get everything.
Repository: foysal-mahmud/E-BookShop----Spring-boot
Branch: master
Commit: 8802dc749387
Files: 128
Total size: 320.5 KB
Directory structure:
gitextract_kryo0iqb/
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ └── maven.yml
├── .gitignore
├── .mvn/
│ └── wrapper/
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── .vscode/
│ └── launch.json
├── README.md
├── adminportal/
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── adminportal/
│ │ │ ├── AdminportalApplication.java
│ │ │ ├── config/
│ │ │ │ └── SecurityConfig.java
│ │ │ ├── controller/
│ │ │ │ ├── BookController.java
│ │ │ │ ├── HomeController.java
│ │ │ │ └── ResourceController.java
│ │ │ ├── domain/
│ │ │ │ ├── Book.java
│ │ │ │ ├── User.java
│ │ │ │ └── security/
│ │ │ │ ├── Authority.java
│ │ │ │ ├── PasswordResetToken.java
│ │ │ │ ├── Role.java
│ │ │ │ └── UserRole.java
│ │ │ ├── repository/
│ │ │ │ ├── BookRepository.java
│ │ │ │ ├── RoleRepository.java
│ │ │ │ └── UserRepository.java
│ │ │ ├── service/
│ │ │ │ ├── BookService.java
│ │ │ │ ├── UserService.java
│ │ │ │ └── impl/
│ │ │ │ ├── BookServiceImpl.java
│ │ │ │ ├── UserSecurityService.java
│ │ │ │ └── UserServiceImpl.java
│ │ │ └── utility/
│ │ │ └── SecurityUtility.java
│ │ └── resources/
│ │ ├── application.properties
│ │ ├── static/
│ │ │ ├── css/
│ │ │ │ ├── non-responsive.css
│ │ │ │ └── style.css
│ │ │ └── fonts/
│ │ │ └── FontAwesome.otf
│ │ └── templates/
│ │ ├── addBook.html
│ │ ├── bookInfo.html
│ │ ├── bookList.html
│ │ ├── common/
│ │ │ └── header.html
│ │ ├── home.html
│ │ ├── login.html
│ │ └── updateBook.html
│ └── test/
│ └── java/
│ └── com/
│ └── adminportal/
│ └── AdminportalApplicationTests.java
├── bin/
│ ├── .gitignore
│ ├── .mvn/
│ │ └── wrapper/
│ │ ├── maven-wrapper.jar
│ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── resources/
│ └── application.properties
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── eCommerce/
│ │ ├── ECommerceApplication.java
│ │ ├── config/
│ │ │ └── SecurityConfig.java
│ │ ├── controller/
│ │ │ ├── CheckoutController.java
│ │ │ ├── HomeController.java
│ │ │ ├── SearchController.java
│ │ │ └── ShoppingCartController.java
│ │ ├── domain/
│ │ │ ├── BillingAddress.java
│ │ │ ├── Book.java
│ │ │ ├── BookToCartItem.java
│ │ │ ├── CartItem.java
│ │ │ ├── Order.java
│ │ │ ├── Payment.java
│ │ │ ├── ShippingAddress.java
│ │ │ ├── ShoppingCart.java
│ │ │ ├── User.java
│ │ │ ├── UserBilling.java
│ │ │ ├── UserPayment.java
│ │ │ ├── UserShipping.java
│ │ │ └── security/
│ │ │ ├── Authority.java
│ │ │ ├── PasswordResetToken.java
│ │ │ ├── Role.java
│ │ │ └── UserRole.java
│ │ ├── repository/
│ │ │ ├── BookRepository.java
│ │ │ ├── BookToCartItemRepository.java
│ │ │ ├── CartItemRepository.java
│ │ │ ├── OrderRepository.java
│ │ │ ├── PasswordResetTokenRepository.java
│ │ │ ├── RoleRepository.java
│ │ │ ├── ShoppingCartRepository.java
│ │ │ ├── UserPaymentRepository.java
│ │ │ ├── UserRepository.java
│ │ │ └── UserShippingRepository.java
│ │ ├── service/
│ │ │ ├── BillingAddressService.java
│ │ │ ├── BookService.java
│ │ │ ├── CartItemService.java
│ │ │ ├── OrderService.java
│ │ │ ├── PaymentService.java
│ │ │ ├── ShippingAddressService.java
│ │ │ ├── ShoppingCartService.java
│ │ │ ├── UserPaymentService.java
│ │ │ ├── UserService.java
│ │ │ ├── UserShippingService.java
│ │ │ └── impl/
│ │ │ ├── BillingAddressServiceImpl.java
│ │ │ ├── BookServiceImpl.java
│ │ │ ├── CartItemServiceImpl.java
│ │ │ ├── OrderServiceImpl.java
│ │ │ ├── PaymentServiceImpl.java
│ │ │ ├── ShippingAddressServiceImpl.java
│ │ │ ├── ShoppingCartServiceImpl.java
│ │ │ ├── UserPaymentServiceImpl.java
│ │ │ ├── UserSecurityService.java
│ │ │ ├── UserServiceImpl.java
│ │ │ └── UserShippingServiceImpl.java
│ │ └── utility/
│ │ ├── MailConstructor.java
│ │ ├── SecurityUtility.java
│ │ └── USConstants.java
│ └── resources/
│ ├── application.properties
│ ├── messages.properties
│ ├── static/
│ │ ├── css/
│ │ │ ├── jquery.dataTables_themeroller.css
│ │ │ ├── non-responsive.css
│ │ │ └── style.css
│ │ ├── fonts/
│ │ │ └── FontAwesome.otf
│ │ └── js/
│ │ └── scripts.js
│ └── templates/
│ ├── badRequestPage.html
│ ├── bookDetail.html
│ ├── bookshelf.html
│ ├── checkout.html
│ ├── common/
│ │ └── header.html
│ ├── faq.html
│ ├── index.html
│ ├── myAccount.html
│ ├── myProfile.html
│ ├── orderConfirmationEmailTemplate.html
│ ├── orderSubmittedPage.html
│ └── shoppingCart.html
└── test/
└── java/
└── com/
└── eCommerce/
└── ECommerceApplicationTests.java
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: maven
directory: "/"
schedule:
interval: daily
time: '21:00'
timezone: Asia/Jakarta
open-pull-requests-limit: 10
================================================
FILE: .github/workflows/maven.yml
================================================
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Java CI with Maven
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn -B package --file pom.xml
# Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive
# - name: Update dependency graph
# uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6
================================================
FILE: .gitignore
================================================
target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
logs
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/
================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
================================================
FILE: .vscode/launch.json
================================================
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Chrome 127.0.0.1",
"type": "chrome",
"request": "launch",
"port": 9249,
"webRoot": "${workspaceFolder}",
"url": "http://127.0.0.1:2331/p/Bookstore/src/main/resources/templates/index.html?_cmAuth\u003drewvcqiueo"
}
]
}
================================================
FILE: README.md
================================================
# E-Commerce
Complete E-Commerce Project using Spring, Hibernate, Bootstrap & MySQL
> [!WARNING]
> **Note Regarding This Project:**
>
> It has been a long time (3+ years) since I transitioned to JavaScript, and I have mostly forgotten a lot of things about Spring Boot. As a result, it is now very difficult for me to answer project-related questions regarding this technology.
> [!TIP]
> There are two separate projects in this repository:
> - <span style="color: blue;">**🔮 Admin Panel**</span>
> - <span style="color: blue;">**🍄 Main Ecommerce**</span>
>
> Download the repository and move the projects to different folders to run them separately.
> 📹 You can find video demo of this 2 projects in "𝐷𝑒𝑚𝑜 𝑉𝑖𝑑𝑒𝑜" folder.
<h1 align="center" style="font-size: 72px; color: #FFA500; text-shadow: 2px 2px 4px #000000;">🎉 Thank You! 🎉</h1>
<br />
## Project Demo video : In "Demo Video" folder
## Home Page:



## Book Details Page:


## Login and Registation:











## Billing Address:



## Shipping Address:



## Shopping Cart:




## Checkout:





## Order Confirmation:





## --------------- The End -------------------
================================================
FILE: adminportal/mvnw
================================================
#!/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
#
# http://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.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 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 /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
#
# Look for the Apple JDKs first to preserve the existing behaviour, and then look
# for the new JDKs provided by Oracle.
#
if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
#
# Apple JDKs
#
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
fi
if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
#
# Apple JDKs
#
export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
fi
if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
#
# Oracle JDKs
#
export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
fi
if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
#
# Apple JDKs
#
export JAVA_HOME=`/usr/libexec/java_home`
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 Migwn, 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)`"
# TODO classpath?
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="`which 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
# 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"`
fi
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
local basedir=$(pwd)
local wdir=$(pwd)
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
wdir=$(cd "$wdir/.."; pwd)
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# 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 \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} "$@"
================================================
FILE: adminportal/mvnw.cmd
================================================
@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 http://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 Maven2 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 key stroke 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 enable echoing my 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 "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\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
set MAVEN_CMD_LINE_ARGS=%*
@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="".\.mvn\wrapper\maven-wrapper.jar""
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
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 "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\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%
exit /B %ERROR_CODE%
================================================
FILE: adminportal/pom.xml
================================================
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.adminportal</groupId>
<artifactId>adminportal</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Bookstore</name>
<description>frontend part for our bookstore project</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: adminportal/src/main/java/com/adminportal/AdminportalApplication.java
================================================
package com.adminportal;
import java.util.HashSet;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.adminportal.domain.User;
import com.adminportal.domain.security.Role;
import com.adminportal.domain.security.UserRole;
import com.adminportal.service.UserService;
import com.adminportal.utility.SecurityUtility;
@SpringBootApplication
public class AdminportalApplication implements CommandLineRunner{
@Autowired
private UserService userService;
public static void main(String[] args) {
SpringApplication.run(AdminportalApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
User user1 = new User();
user1.setUsername("admin");
user1.setPassword(SecurityUtility.passwordEncoder().encode("admin"));
user1.setEmail("admin@gmail.com");
Set<UserRole> userRoles = new HashSet<>();
Role role1= new Role();
role1.setRoleId(0);
role1.setName("ROLE_ADMIN");
userRoles.add(new UserRole(user1, role1));
userService.createUser(user1, userRoles);
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/config/SecurityConfig.java
================================================
package com.adminportal.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import com.adminportal.service.impl.UserSecurityService;
import com.adminportal.utility.SecurityUtility;
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled=true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private Environment env;
@Autowired
private UserSecurityService userSecurityService;
private BCryptPasswordEncoder passwordEncoder() {
return SecurityUtility.passwordEncoder();
}
private static final String[] PUBLIC_MATCHERS = {
"/css/**",
"/js/**",
"/image/**",
"/newUser",
"/forgetPassword",
"/login",
"/fonts/**"
};
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests().
/* antMatchers("/**").*/
antMatchers(PUBLIC_MATCHERS).
permitAll().anyRequest().authenticated();
http
.csrf().disable().cors().disable()
.formLogin().failureUrl("/login?error")
.defaultSuccessUrl("/")
.loginPage("/login").permitAll()
.and()
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/?logout").deleteCookies("remember-me").permitAll()
.and()
.rememberMe();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userSecurityService).passwordEncoder(passwordEncoder());
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/controller/BookController.java
================================================
package com.adminportal.controller;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import javax.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.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import com.adminportal.domain.Book;
import com.adminportal.service.BookService;
@Controller
@RequestMapping("/book")
public class BookController {
@Autowired
private BookService bookService;
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String addBook(Model model) {
Book book = new Book();
model.addAttribute("book", book);
return "addBook";
}
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addBookPost(@ModelAttribute("book") Book book, HttpServletRequest request) {
bookService.save(book);
MultipartFile bookImage = book.getBookImage();
try {
byte[] bytes = bookImage.getBytes();
String name = book.getId() + ".png";
BufferedOutputStream stream = new BufferedOutputStream(
new FileOutputStream(new File("src/main/resources/static/image/book/" + name)));
stream.write(bytes);
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
return "redirect:bookList";
}
@RequestMapping("/bookInfo")
public String bookInfo(@RequestParam("id") Long id, Model model) {
Book book = bookService.findById(id);
model.addAttribute("book", book);
return "bookInfo";
}
@RequestMapping("/updateBook")
public String updateBook(@RequestParam("id") Long id, Model model) {
Book book = bookService.findById(id);
model.addAttribute("book", book);
return "updateBook";
}
@RequestMapping(value="/updateBook", method=RequestMethod.POST)
public String updateBookPost(@ModelAttribute("book") Book book, HttpServletRequest request) {
bookService.save(book);
MultipartFile bookImage = book.getBookImage();
if(!bookImage.isEmpty()) {
try {
byte[] bytes = bookImage.getBytes();
String name = book.getId() + ".png";
Files.delete(Paths.get("src/main/resources/static/image/book/"+name));
BufferedOutputStream stream = new BufferedOutputStream(
new FileOutputStream(new File("src/main/resources/static/image/book/" + name)));
stream.write(bytes);
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return "redirect:/book/bookInfo?id="+book.getId();
}
@RequestMapping("/bookList")
public String bookList(Model model) {
List<Book> bookList = bookService.findAll();
model.addAttribute("bookList", bookList);
return "bookList";
}
@RequestMapping(value="/remove", method=RequestMethod.POST)
public String remove(
@ModelAttribute("id") String id, Model model
) {
bookService.deleteById(Long.parseLong(id.substring(8)));
List<Book> bookList = bookService.findAll();
model.addAttribute("bookList", bookList);
return "redirect:/book/bookList";
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/controller/HomeController.java
================================================
package com.adminportal.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HomeController {
@RequestMapping("/")
public String index(){
return "redirect:/home";
}
@RequestMapping("/home")
public String home(){
return "home";
}
@RequestMapping("/login")
public String login(){
return "login";
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/controller/ResourceController.java
================================================
package com.adminportal.controller;
import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.adminportal.service.BookService;
@RestController
public class ResourceController {
@Autowired
private BookService bookService;
@RequestMapping(value="/book/removeList", method=RequestMethod.POST)
public String removeList(
@RequestBody ArrayList<String> bookIdList, Model model
){
for (String id : bookIdList) {
String bookId =id.substring(8);
bookService.deleteById(Long.parseLong(bookId));
}
return "delete success";
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/domain/Book.java
================================================
package com.adminportal.domain;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Transient;
import org.springframework.web.multipart.MultipartFile;
import com.fasterxml.jackson.annotation.JsonIgnore;
@Entity
public class Book {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String title;
private String author;
private String publisher;
private String publicationDate;
private String language;
private String category;
private int numberOfPages;
private String format;
private int isbn;
private double shippingWeight;
private double listPrice;
private double ourPrice;
private boolean active=true;
@Column(columnDefinition="text")
private String description;
private int inStockNumber;
@Transient
private MultipartFile bookImage;
@OneToMany(mappedBy = "book")
@JsonIgnore
private List<BookToCartItem> bookToCartItemList;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public String getPublicationDate() {
return publicationDate;
}
public void setPublicationDate(String publicationDate) {
this.publicationDate = publicationDate;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public int getNumberOfPages() {
return numberOfPages;
}
public void setNumberOfPages(int numberOfPages) {
this.numberOfPages = numberOfPages;
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
public int getIsbn() {
return isbn;
}
public void setIsbn(int isbn) {
this.isbn = isbn;
}
public double getShippingWeight() {
return shippingWeight;
}
public void setShippingWeight(double shippingWeight) {
this.shippingWeight = shippingWeight;
}
public double getListPrice() {
return listPrice;
}
public void setListPrice(double listPrice) {
this.listPrice = listPrice;
}
public double getOurPrice() {
return ourPrice;
}
public void setOurPrice(double ourPrice) {
this.ourPrice = ourPrice;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getInStockNumber() {
return inStockNumber;
}
public void setInStockNumber(int inStockNumber) {
this.inStockNumber = inStockNumber;
}
public MultipartFile getBookImage() {
return bookImage;
}
public void setBookImage(MultipartFile bookImage) {
this.bookImage = bookImage;
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/domain/User.java
================================================
package com.adminportal.domain;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import com.adminportal.domain.security.Authority;
import com.adminportal.domain.security.UserRole;
import com.fasterxml.jackson.annotation.JsonIgnore;
@Entity
public class User implements UserDetails{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id", nullable = false, updatable = false)
private Long id;
private String username;
private String password;
private String firstName;
private String lastName;
@Column(name="email", nullable = false, updatable = false)
private String email;
private String phone;
private boolean enabled=true;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JsonIgnore
private Set<UserRole> userRoles = new HashSet<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public Set<UserRole> getUserRoles() {
return userRoles;
}
public void setUserRoles(Set<UserRole> userRoles) {
this.userRoles = userRoles;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Set<GrantedAuthority> authorites = new HashSet<>();
userRoles.forEach(ur -> authorites.add(new Authority(ur.getRole().getName())));
return authorites;
}
@Override
public boolean isAccountNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isAccountNonLocked() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isCredentialsNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isEnabled() {
return enabled;
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/domain/security/Authority.java
================================================
package com.adminportal.domain.security;
import org.springframework.security.core.GrantedAuthority;
public class Authority implements GrantedAuthority{
private final String authority;
public Authority(String authority) {
this.authority = authority;
}
@Override
public String getAuthority() {
return authority;
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/domain/security/PasswordResetToken.java
================================================
package com.adminportal.domain.security;
import java.util.Calendar;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import com.adminportal.domain.User;
@Entity
public class PasswordResetToken {
private static final int EXPIRATION = 60 * 24;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String token;
@OneToOne(targetEntity = User.class, fetch = FetchType.EAGER)
@JoinColumn(nullable=false, name="user_id")
private User user;
private Date expiryDate;
public PasswordResetToken(){}
public PasswordResetToken(final String token, final User user) {
super ();
this.token = token;
this.user = user;
this.expiryDate = calculateExpiryDate(EXPIRATION);
}
private Date calculateExpiryDate (final int expiryTimeInMinutes) {
final Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(new Date().getTime());
cal.add(Calendar.MINUTE, expiryTimeInMinutes);
return new Date(cal.getTime().getTime());
}
public void updateToken(final String token) {
this.token = token;
this.expiryDate = calculateExpiryDate(EXPIRATION);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Date getExpiryDate() {
return expiryDate;
}
public void setExpiryDate(Date expiryDate) {
this.expiryDate = expiryDate;
}
public static int getExpiration() {
return EXPIRATION;
}
@Override
public String toString() {
return "PasswordResetToken [id=" + id + ", token=" + token + ", user=" + user + ", expiryDate=" + expiryDate
+ "]";
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/domain/security/Role.java
================================================
package com.adminportal.domain.security;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
@Entity
public class Role {
@Id
private int roleId;
private String name;
@OneToMany(mappedBy = "role", cascade = CascadeType.ALL, fetch=FetchType.LAZY)
private Set<UserRole> userRoles = new HashSet<>();
public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<UserRole> getUserRoles() {
return userRoles;
}
public void setUserRoles(Set<UserRole> userRoles) {
this.userRoles = userRoles;
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/domain/security/UserRole.java
================================================
package com.adminportal.domain.security;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import com.adminportal.domain.User;
@Entity
@Table(name="user_role")
public class UserRole {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long userRoleId;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="user_id")
private User user;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="role_id")
private Role role;
public UserRole(){}
public UserRole(User user, Role role) {
this.user = user;
this.role = role;
}
public Long getUserRoleId() {
return userRoleId;
}
public void setUserRoleId(Long userRoleId) {
this.userRoleId = userRoleId;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/repository/BookRepository.java
================================================
package com.adminportal.repository;
import org.springframework.data.repository.CrudRepository;
import com.adminportal.domain.Book;
public interface BookRepository extends CrudRepository<Book, Long>{
}
================================================
FILE: adminportal/src/main/java/com/adminportal/repository/RoleRepository.java
================================================
package com.adminportal.repository;
import org.springframework.data.repository.CrudRepository;
import com.adminportal.domain.security.Role;
public interface RoleRepository extends CrudRepository<Role, Long> {
Role findByname(String name);
}
================================================
FILE: adminportal/src/main/java/com/adminportal/repository/UserRepository.java
================================================
package com.adminportal.repository;
import org.springframework.data.repository.CrudRepository;
import com.adminportal.domain.User;
public interface UserRepository extends CrudRepository<User, Long> {
User findByUsername(String username);
}
================================================
FILE: adminportal/src/main/java/com/adminportal/service/BookService.java
================================================
package com.adminportal.service;
import java.util.List;
import com.adminportal.domain.Book;
public interface BookService {
Book save(Book book);
List<Book> findAll();
Book findById(Long id);
}
================================================
FILE: adminportal/src/main/java/com/adminportal/service/UserService.java
================================================
package com.adminportal.service;
import java.util.Set;
import com.adminportal.domain.User;
import com.adminportal.domain.security.UserRole;
public interface UserService {
User createUser(User user, Set<UserRole> userRoles) throws Exception;
User save(User user);
}
================================================
FILE: adminportal/src/main/java/com/adminportal/service/impl/BookServiceImpl.java
================================================
package com.adminportal.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.adminportal.domain.Book;
import com.adminportal.repository.BookRepository;
import com.adminportal.service.BookService;
@Service
public class BookServiceImpl implements BookService{
@Autowired
private BookRepository bookRepository;
public Book save(Book book) {
return bookRepository.save(book);
}
public List<Book> findAll() {
return (List<Book>) bookRepository.findAll();
}
public Book findById(Long id) {
return bookRepository.findById(id).orElse(null);
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/service/impl/UserSecurityService.java
================================================
package com.adminportal.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
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 com.adminportal.domain.User;
import com.adminportal.repository.UserRepository;
@Service
public class UserSecurityService implements UserDetailsService{
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if(null == user) {
throw new UsernameNotFoundException("Username not found");
}
return user;
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/service/impl/UserServiceImpl.java
================================================
package com.adminportal.service.impl;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.adminportal.domain.User;
import com.adminportal.domain.security.UserRole;
import com.adminportal.repository.RoleRepository;
import com.adminportal.repository.UserRepository;
import com.adminportal.service.UserService;
@Service
public class UserServiceImpl implements UserService {
private static final Logger LOG = LoggerFactory.getLogger(UserService.class);
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Override
public User createUser(User user, Set<UserRole> userRoles) {
User localUser = userRepository.findByUsername(user.getUsername());
if (localUser != null) {
LOG.info("user {} already exists. Nothing will be done.", user.getUsername());
} else {
for (UserRole ur : userRoles) {
roleRepository.save(ur.getRole());
}
user.getUserRoles().addAll(userRoles);
localUser = userRepository.save(user);
}
return localUser;
}
@Override
public User save(User user) {
return userRepository.save(user);
}
}
================================================
FILE: adminportal/src/main/java/com/adminportal/utility/SecurityUtility.java
================================================
package com.adminportal.utility;
import java.security.SecureRandom;
import java.util.Random;
import org.springframework.context.annotation.Bean;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;
@Component
public class SecurityUtility {
private static final String SALT = "salt"; // Salt should be protected carefully
@Bean
public static BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(12, new SecureRandom(SALT.getBytes()));
}
@Bean
public static String randomPassword() {
String SALTCHARS = "ABCEFGHIJKLMNOPQRSTUVWXYZ1234567890";
StringBuilder salt = new StringBuilder();
Random rnd = new Random();
while (salt.length()<18) {
int index= (int) (rnd.nextFloat()*SALTCHARS.length());
salt.append(SALTCHARS.charAt(index));
}
String saltStr = salt.toString();
return saltStr;
}
}
================================================
FILE: adminportal/src/main/resources/application.properties
================================================
server.port=8081
server.context-path=/adminportal
spring.thymeleaf.cache=false
# ===============================
# = DATA SOURCE
# ===============================
# Set here configurations for the database connection
spring.datasource.url=jdbc:mysql://localhost:3306/ecommercedatabase
# Username and secret
spring.datasource.username=root
spring.datasource.password=foysal28
# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
# ===============================
# = JPA / HIBERNATE
# ===============================
# Use spring.jpa.properties.* for Hibernate native properties (the prefix is
# stripped before adding them to the entity manager).
# Show or not log for each sql query
spring.jpa.show-sql=true
# Hibernate ddl auto (create, create-drop, update): with "update" the database
# schema will be automatically updated accordingly to java entities found in
# the project
spring.jpa.hibernate.ddl-auto = update
# Allows Hibernate to generate SQL optimized for a particular DBMS
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
================================================
FILE: adminportal/src/main/resources/static/css/non-responsive.css
================================================
/* Template-specific stuff
*
* Customizations just for the template; these are not necessary for anything
* with disabling the responsiveness.
*/
/* Account for fixed navbar */
body {
padding-top: 70px;
padding-bottom: 30px;
}
body,
.navbar-fixed-top,
.navbar-fixed-bottom {
min-width: 970px;
}
/* Don't let the lead text change font-size. */
.lead {
font-size: 16px;
}
/* Finesse the page header spacing */
.page-header {
margin-bottom: 30px;
}
.page-header .lead {
margin-bottom: 10px;
}
/* Non-responsive overrides
*
* Utilize the following CSS to disable the responsive-ness of the container,
* grid system, and navbar.
*/
/* Reset the container */
.container {
width: 970px;
max-width: none !important;
}
/* Demonstrate the grids */
.col-xs-4 {
padding-top: 15px;
padding-bottom: 15px;
/*background-color: #eee;*/
/*background-color: rgba(86,61,124,.15);*/
/*border: 1px solid #ddd;*/
/*border: 1px solid rgba(86,61,124,.2);*/
}
.container .navbar-header,
.container .navbar-collapse {
margin-right: 0;
margin-left: 0;
}
/* Always float the navbar header */
.navbar-header {
float: left;
}
/* Undo the collapsing navbar */
.navbar-collapse {
display: block !important;
height: auto !important;
padding-bottom: 0;
overflow: visible !important;
visibility: visible !important;
}
.navbar-toggle {
display: none;
}
.navbar-collapse {
border-top: 0;
}
.navbar-brand {
margin-left: -15px;
}
/* Always apply the floated nav */
.navbar-nav {
float: left;
margin: 0;
}
.navbar-nav > li {
float: left;
}
.navbar-nav > li > a {
padding: 15px;
}
/* Redeclare since we override the float above */
.navbar-nav.navbar-right {
float: right;
}
/* Undo custom dropdowns */
.navbar .navbar-nav .open .dropdown-menu {
position: absolute;
float: left;
background-color: #fff;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, .15);
border-width: 0 1px 1px;
border-radius: 0 0 4px 4px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
}
.navbar-default .navbar-nav .open .dropdown-menu > li > a {
color: #333;
}
.navbar .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar .navbar-nav .open .dropdown-menu > li > a:focus,
.navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff !important;
background-color: #428bca !important;
}
.navbar .navbar-nav .open .dropdown-menu > .disabled > a,
.navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .disabled > a:focus {
color: #999 !important;
background-color: transparent !important;
}
/* Undo form expansion */
.navbar-form {
float: left;
width: auto;
padding-top: 0;
padding-bottom: 0;
margin-right: 0;
margin-left: 0;
border: 0;
-webkit-box-shadow: none;
box-shadow: none;
}
/* Copy-pasted from forms.less since we mixin the .form-inline styles. */
.navbar-form .form-group {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
.navbar-form .form-control {
display: inline-block;
width: auto;
vertical-align: middle;
}
.navbar-form .form-control-static {
display: inline-block;
}
.navbar-form .input-group {
display: inline-table;
vertical-align: middle;
}
.navbar-form .input-group .input-group-addon,
.navbar-form .input-group .input-group-btn,
.navbar-form .input-group .form-control {
width: auto;
}
.navbar-form .input-group > .form-control {
width: 100%;
}
.navbar-form .control-label {
margin-bottom: 0;
vertical-align: middle;
}
.navbar-form .radio,
.navbar-form .checkbox {
display: inline-block;
margin-top: 0;
margin-bottom: 0;
vertical-align: middle;
}
.navbar-form .radio label,
.navbar-form .checkbox label {
padding-left: 0;
}
.navbar-form .radio input[type="radio"],
.navbar-form .checkbox input[type="checkbox"] {
position: relative;
margin-left: 0;
}
.navbar-form .has-feedback .form-control-feedback {
top: 0;
}
/* Undo inline form compaction on small screens */
.form-inline .form-group {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .form-control {
display: inline-block;
width: auto;
vertical-align: middle;
}
.form-inline .form-control-static {
display: inline-block;
}
.form-inline .input-group {
display: inline-table;
vertical-align: middle;
}
.form-inline .input-group .input-group-addon,
.form-inline .input-group .input-group-btn,
.form-inline .input-group .form-control {
width: auto;
}
.form-inline .input-group > .form-control {
width: 100%;
}
.form-inline .control-label {
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .radio,
.form-inline .checkbox {
display: inline-block;
margin-top: 0;
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .radio label,
.form-inline .checkbox label {
padding-left: 0;
}
.form-inline .radio input[type="radio"],
.form-inline .checkbox input[type="checkbox"] {
position: relative;
margin-left: 0;
}
.form-inline .has-feedback .form-control-feedback {
top: 0;
}
================================================
FILE: adminportal/src/main/resources/static/css/style.css
================================================
body {
}
hr {
border: none;
height: 1px;
color: #333;
background-color: #333;
}
.container {
width: 90%;
}
.page-top {
margin-top: -70px;
}
.navbar {
margin-bottom: 20px;
}
.box {
border: 1px solid red;
}
.home-headline{
font-family: 'Times New Roman', Times, serif;
font-size:24px;
color: #fff;
margin: auto;
text-align: center;
margin-top: -13px;
}
.home-headline span {
background-color: #231F20;
padding: 5px 22px;
}
.section-headline {
font-family: 'Times New Roman', Times, serif;
font-size:24px;
color: #fff;
margin: auto;
text-align: center;
margin-top: 90px;
}
.section-headline span {
background-color: #231F20;
padding: 5px 22px;
}
================================================
FILE: adminportal/src/main/resources/templates/addBook.html
================================================
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1000/xhtml">
<head th:replace="common/header :: common-header" />
<body>
<div th:replace="common/header :: navbar" />
<div class="container">
<div class="row">
<form class="form-horizontal" th:action="@{/book/add}" method="post"
enctype="multipart/form-data">
<fieldset>
<legend class="center-block">
New Book Information<span style="font-size: small"> * is a
required field</span>
</legend>
<!-- title -->
<div class="form-group">
<label class="col-md-2 control-label" for="title">* Title</label>
<div class="col-md-8">
<input type="text" name="title" class="form-control" id="title"
th:value="${book.title}" required="required" placeholder="Title" />
<span class="help-block">Title of the book</span>
</div>
</div>
<!-- author -->
<div class="form-group">
<label class="col-md-2 control-label" for="author">*
Author</label>
<div class="col-md-8">
<input type="text" name="author" class="form-control" id="author"
th:value="${book.author}" required="required"
placeholder="Author" /> <span class="help-block">Author
of the book</span>
</div>
</div>
<!-- publisher -->
<div class="form-group">
<label class="col-md-2 control-label" for="publisher">Publisher</label>
<div class="col-md-8">
<input type="text" name="publisher" class="form-control"
id="publisher" th:value="${book.publisher}"
placeholder="Publisher" /> <span class="help-block">Publisher
of the book</span>
</div>
</div>
<!-- publication date -->
<div class="form-group">
<label class="col-md-2 control-label" for="publicationDate">Publication
Date</label>
<div class="col-md-8">
<input type="date" class="form-control" id="publicationDate"
name="publicationDate" th:value="${book.publicationDate}"
placeholder="ublication Date" /> <span class="help-block">Publication
Date of the book</span>
</div>
</div>
<!-- language -->
<div class="form-group">
<label class="col-md-2 control-label" for="language">Language</label>
<div class="col-md-8">
<select th:value="${book.language}" id="language" name="language"
class="form-control">
<option value="english">English</option>
<option value="spanish">Spanish</option>
</select>
</div>
</div>
<!-- category -->
<div class="form-group">
<label class="col-md-2 control-label" for="category">*
Category</label>
<div class="col-md-8">
<select th:value="${book.category}" id="category" name="category"
class="form-control">
<option value="" selected="selected" disabled="disabled">Please
select an option...</option>
<option value="Management"
th:selected="(${book.category}=='Management')">Management</option>
<option value="Fiction"
th:selected="(${book.category}=='Fiction')">Fiction</option>
<option value="Engineering"
th:selected="(${book.category}=='Engineering')">Engineering</option>
<option value="Programming"
th:selected="(${book.category}=='Programming')">Programming</option>
<option value="Arts & Literature"
th:selected="(${book.category}=='Arts & Literature')">Arts
& Literature</option>
</select>
</div>
</div>
<!-- pages -->
<div class="form-group">
<label class="col-md-2 control-label" for="pageNumber">Pages</label>
<div class="col-md-8">
<input type="number" name="numberOfPages" class="form-control"
id="pageNumber" th:value="${book.numberOfPages}"
placeholder="Page Number" /> <span class="help-block">Number
of pages of the book</span>
</div>
</div>
<!-- format -->
<div class="form-group">
<label class="col-md-2 control-label" for="format">Format</label>
<div class="col-md-8">
<select th:value="${book.format}" id="format" name="format"
class="form-control">
<option value="paperback">Paperback</option>
<option value="hardcover">Hardcover</option>
</select>
</div>
</div>
<!-- isbn -->
<div class="form-group">
<label class="col-md-2 control-label" for="isbn">ISBN</label>
<div class="col-md-8">
<input type="text" name="isbn" class="form-control" id="isbn"
th:value="${book.isbn}" placeholder="ISBN" /> <span
class="help-block">ISBN of the book</span>
</div>
</div>
<!-- shipping weight -->
<div class="form-group">
<label class="col-md-2 control-label" for="shippingWeight">Shipping
Weight</label>
<div class="col-md-8">
<div class="input-group">
<input th:value="${book.shippingWeight}" type="number" step="0.01"
name="shippingWeight" class="form-control" id="shippingWeight"
placeholder="Shipping Weight" /> <span
class="input-group-addon">Ounces</span>
</div>
<span class="help-block">Shipping Weight of the book</span>
</div>
</div>
<!-- list price -->
<div class="form-group">
<label class="col-md-2 control-label" for="listPrice">List
Price</label>
<div class="col-md-8">
<div class="input-group">
<span class="input-group-addon">$</span> <input
th:value="${book.listPrice}" type="number" name="listPrice" step="0.01"
class="form-control" id="listPrice" placeholder="List Price" />
</div>
<span class="help-block">List price of the book</span>
</div>
</div>
<!-- our price -->
<div class="form-group">
<label class="col-md-2 control-label" for="ourPrice">Our
Price</label>
<div class="col-md-8">
<div class="input-group">
<span class="input-group-addon">$</span> <input
th:value="${book.ourPrice}" type="number" name="ourPrice" step="0.01"
class="form-control" id="ourPrice" placeholder="Our Price" />
</div>
<span class="help-block">Our price of the book</span>
</div>
</div>
<!-- in stock number -->
<div class="form-group">
<label class="col-md-2 control-label" for="inStockNumber">Number
in stock</label>
<div class="col-md-8">
<input th:value="${book.inStockNumber}" type="number"
name="inStockNumber" class="form-control" id="inStockNumber"
placeholder="Number of in-stock copies" /> <span
class="help-block">Number of in-stock copies</span>
</div>
</div>
<!-- status of book -->
<div class="form-group">
<label class="col-md-2 control-label" for="status">Status</label>
<div class="col-md-8">
<label><input value="true" type="radio" name="active"
checked="checked" /> Active </label> <label><input
value="false" type="radio" name="active" />
Inactive </label> <span class="help-block">Whether the book is
active or inactive</span>
</div>
</div>
<!-- description -->
<div class="form-group">
<label class="col-md-2 control-label" for="description">Description</label>
<div class="col-md-8">
<textarea name="description" rows="5" class="form-control"
id="description" th:value="${book.description}"
placeholder="Description" /></textarea>
<span class="help-block">Description of the book</span>
</div>
</div>
<!-- upload image -->
<div class="form-group">
<div class="col-md-2">
<label for="bookImage">Upload book image</label>
</div>
<div class="col-md-8">
<input id="bookImage" type="file" name="bookImage"
th:value="${book.bookImage}" />
</div>
</div>
<div class="form-group">
<div class="col-md-2"></div>
<div class="col-md-8">
<button type="submit" class="btn btn-success">Add Book</button>
<a class="btn btn-danger" th:href="@{/}">Cancel</a>
</div>
</div>
</fieldset>
</form>
</div>
</div>
<div th:replace="common/header :: body-bottom-scripts" />
</body>
</html>
================================================
FILE: adminportal/src/main/resources/templates/bookInfo.html
================================================
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1000/xhtml">
<head th:replace="common/header :: common-header" />
<body>
<div th:replace="common/header :: navbar" />
<div class="container">
<div>
<ol class="breadcrumb">
<li><a th:href="@{/book/bookList}"><i class="fa fa-long-arrow-left" aria-hidden="true"></i>Go back</a></li>
<li><strong><a th:href="@{/book/updateBook?id=}+${book.id}" class="fa fa-pencil" style="color: green"> Edit</a></strong></li>
</ol>
</div>
<div class="row">
<div class="col-xs-3">
<div class="panel panel-default">
<div class="panel-body">
<img th:src="@{/image/book/}+${book.id}+'.png'" class="img-responsive center-block" />
</div>
</div>
</div>
<div class="col-xs-9">
<h3 th:text="${book.title}" style="color: red; font-family: cursive"></h3><br/>
<div class="row">
<div class="col-xs-6">
<p><strong>Author: </strong><span th:text="${book.author}"></span></p>
<p><strong>Publisher: </strong><span th:text="${book.publisher}"></span></p>
<p><strong>Publication Date: </strong><span th:text="${book.publicationDate}"></span></p>
<p><strong>Language: </strong><span th:text="${book.language}"></span></p>
<p><strong>Category: </strong><span th:text="${book.category}"></span></p>
<p><strong>Pages: </strong><span th:text="${book.numberOfPages}"></span></p>
</div>
<div class="col-xs-6">
<p><strong>Format: </strong><span th:text="${book.format}"></span></p>
<p><strong>ISBN: </strong><span th:text="${book.isbn}"></span></p>
<p><strong>Shipping Weight: </strong><span th:text="${book.shippingWeight}"></span></p>
<p><strong>List Price: </strong><span th:text="${book.listPrice}"></span></p>
<p><strong>Our Price: </strong><span th:text="${book.ourPrice}"></span></p>
<p><strong>Number in Stock: </strong><span th:text="${book.inStockNumber}"></span></p>
</div>
</div>
<hr/>
<p><Strong>Description: </Strong><span th:utext="${book.description}"></span></p>
<br/><hr/>
</div>
</div>
</div>
<div th:replace="common/header :: body-bottom-scripts" />
</body>
</html>
================================================
FILE: adminportal/src/main/resources/templates/bookList.html
================================================
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1000/xhtml">
<head th:replace="common/header :: common-header" />
<body>
<div th:replace="common/header :: navbar" />
<div class="container">
<div class="table-responsive">
<table id="bookListTable" class="table table-bordered table-hover table-striped">
<thead>
<tr>
<th><input th:id="selectAllBooks" type="checkbox" /></th>
<th>Title</th>
<th>Author</th>
<th>Category</th>
<th>List Price</th>
<th>Our Price</th>
<th>Active?</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<tr data-th-each="book : ${bookList}">
<td>
<input hidden="hidden" name="id" th:value="${book.id}" />
<input th:id="'selected'+${book.id}" class="checkboxBook" type="checkbox" />
</td>
<td><a th:href="@{/book/bookInfo(id=${book.id})}"><span th:text="${book.title}"></span></a></td>
<td th:text="${book.author}"></td>
<td th:text="${book.category}"></td>
<td th:text="${book.listPrice}"></td>
<td th:text="${book.ourPrice}"></td>
<td th:text="${book.active}"></td>
<td>
<input hidden="hidden" name="id" th:value="${book.id}" />
<button th:id=" 'oneBook-'+${book.id}" class="btn btn-danger btn-xs delete-book" type="submit" value="delete" >
<span class="fa fa-times"></span>Delete</button>
</td>
</tr>
</tbody>
</table>
</div>
<button th:id="deleteSelected" class="btn btn-danger ">Delete Selected</button>
</div>
<div th:replace="common/header :: body-bottom-scripts" />
<script>
$(document).ready(function() {
$("#bookListTable").DataTable({
"lengthMenu": [ [5,10,15,20,-1],[5,10,15,20,"All"] ],
"ordering": false,
stateSave: true
});
});
</script>
</body>
</html>
================================================
FILE: adminportal/src/main/resources/templates/common/header.html
================================================
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"
xmlns:sec="http://www.w3.org/1999/xhtml">
<head th:fragment="common-header">
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>E-Commerce Admin</title>
<!-- Bootstrap core CSS -->
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet" />
<!-- Custom styles for this template -->
<link th:href="@{/css/style.css}" rel="stylesheet" />
<!-- data table -->
<link th:href="@{/css/jquery.dataTables.min.css}" rel="stylesheet" />
<link th:href="@{/css/dataTables.bootstrap.min.css}" rel="stylesheet" />
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet" />
<script src="//cdn.tinymce.com/4/tinymce.min.js"></script>
<script>tinymce.init({ selector:'textarea' });</script>
<link rel="icon" href="/image/applie-touch-icon.png" />
</head>
<body>
<div th:fragment="navbar">
<style>.navbar-default {
background-color: #a32222;
border-color: #293872;
}
.navbar-default .navbar-brand {
color: #ecf0f1;
}
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
color: #f8f9f8;
}
.navbar-default .navbar-text {
color: #ecf0f1;
}
.navbar-default .navbar-nav > li > a {
color: #ecf0f1;
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
color: #f8f9f8;
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .active > a:focus {
color: #f8f9f8;
background-color: #293872;
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .open > a:hover,
.navbar-default .navbar-nav > .open > a:focus {
color: #f8f9f8;
background-color: #293872;
}
.navbar-default .navbar-toggle {
border-color: #293872;
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
background-color: #293872;
}
.navbar-default .navbar-toggle .icon-bar {
background-color: #ecf0f1;
}
.navbar-default .navbar-collapse,
.navbar-default .navbar-form {
border-color: #ecf0f1;
}
.navbar-default .navbar-link {
color: #ecf0f1;
}
.navbar-default .navbar-link:hover {
color: #f8f9f8;
}
@media (max-width: 767px) {
.navbar-default .navbar-nav .open .dropdown-menu > li > a {
color: #ecf0f1;
}
.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
color: #f8f9f8;
}
.navbar-default .navbar-nav .open .dropdown-menu > .active > a,
.navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #f8f9f8;
background-color: #293872;
}
}</style>
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar" aria-expanded="false">
<span class="sr-only">Toggle navigation</span> <span
class="icon-bar"></span> <span class="icon-bar"></span> <span
class="icon-bar"></span>
</button>
<a class="navbar-brand" th:href="@{/}">Admin Portal</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="dropdown"><a href="#" class="dropdown-toggle"
data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">Book <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a th:href="@{/book/add}">Add a new book</a></li>
<li><a th:href="@{/book/bookList}">View book list</a></li>
</ul></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a th:href="@{/logout}">Sign out</a></li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>
</div>
<div th:fragment="body-bottom-scripts">
<script th:src="@{/js/jquery.min.js}"></script>
<script th:src="@{/js/bootstrap.min.js}"></script>
<script th:src="@{/js/bootbox.min.js}"></script>
<script th:src="@{/js/scripts.js}"></script>
<!-- data table -->
<script th:src="@{/js/jquery.dataTables.min.js}"></script>
<script th:src="@{/js/dataTables.bootstrap.min.js}"></script>
</div>
</body>
</html>
================================================
FILE: adminportal/src/main/resources/templates/home.html
================================================
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1000/xhtml">
<head th:replace="common/header :: common-header">
</head>
<body>
<div th:replace="common/header :: navbar" />
<h1 style="text-align:center; margin-top : 30px;"> <strong>Admin Portal</strong></h1>
<br/><br/>
<hr/>
<div style="text-align:center; margin-top : 40px;">
<a th:href="@{/book/add}"><button
style="background-color: #4CAF50; /* Green */ border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 36px;">Add New Book </button></a>
</div>
<div style="text-align:center; margin-top : 40px;">
<a th:href="@{/book/bookList}"><button
style="background-color: red; /* Green */ border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 36px;">View Book List</button></a>
</div>
<hr/>
<div th:replace="common/header :: body-bottom-scripts" />
</body>
</html>
================================================
FILE: adminportal/src/main/resources/templates/login.html
================================================
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1000/xhtml">
<head th:replace="common/header :: common-header" />
<body>
<div class="container">
<h2 style="text-align:center; margin-top : 30px;"> <strong>Admin Authentication</strong></h2>
<hr />
<img th:src="@{/image/logo.png}" class="img-responsive"
style="width: 250px;" />
<div class="row">
<div class="col-xs-4 col-md-offset-4">
<div class="bg-danger" th:if="${param.error}">Invalid username
and password.</div>
<div class="bg-danger" th:if="${param.logout}">You have been
logged out.</div>
<form class="form-signin" th:action="@{/login}" method="post">
<h2 class="form-signin-heading">Please sign in</h2>
<div class="form-group">
<label for="username" class="sr-only">Username: </label>
<input
type="text" class="form-control" placeholder="Username"
name="username" id="username" required="required"
autofocus="autofocus" />
</div>
<div class="form-group">
<label for="password" class="sr-only">Password</label>
<input
type="password" class="form-control" placeholder="Password"
name="password" id="password" required="required" />
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign
In</button>
</form>
</div>
</div>
</div>
<div th:replace="common/header :: body-bottom-scripts" />
</body>
</html>
================================================
FILE: adminportal/src/main/resources/templates/updateBook.html
================================================
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1000/xhtml">
<head th:replace="common/header :: common-header" />
<body>
<div th:replace="common/header :: navbar" />
<div class="container">
<div class="row">
<form class="form-horizontal" th:action="@{/book/updateBook}" method="post"
enctype="multipart/form-data">
<fieldset>
<legend class="center-block">
Update Book Information<span style="font-size: small"> * is a
required field</span>
</legend>
<input hidden="hidden" name="id" th:value="${book.id}" />
<!-- title -->
<div class="form-group">
<label class="col-md-2 control-label" for="title">* Title</label>
<div class="col-md-8">
<input type="text" name="title" class="form-control" id="title"
th:value="${book.title}" required="required" placeholder="Title" />
<span class="help-block">Title of the book</span>
</div>
</div>
<!-- author -->
<div class="form-group">
<label class="col-md-2 control-label" for="author">*
Author</label>
<div class="col-md-8">
<input type="text" name="author" class="form-control" id="author"
th:value="${book.author}" required="required"
placeholder="Author" /> <span class="help-block">Author
of the book</span>
</div>
</div>
<!-- publisher -->
<div class="form-group">
<label class="col-md-2 control-label" for="publisher">Publisher</label>
<div class="col-md-8">
<input type="text" name="publisher" class="form-control"
id="publisher" th:value="${book.publisher}"
placeholder="Publisher" /> <span class="help-block">Publisher
of the book</span>
</div>
</div>
<!-- publication date -->
<div class="form-group">
<label class="col-md-2 control-label" for="publicationDate">Publication
Date</label>
<div class="col-md-8">
<input type="date" class="form-control" id="publicationDate"
name="publicationDate" th:value="${book.publicationDate}"
placeholder="ublication Date" /> <span class="help-block">Publication
Date of the book</span>
</div>
</div>
<!-- language -->
<div class="form-group">
<label class="col-md-2 control-label" for="language">Language</label>
<div class="col-md-8">
<select th:value="${book.language}" id="language" name="language"
class="form-control">
<option value="english">English</option>
<option value="spanish">Spanish</option>
</select>
</div>
</div>
<!-- category -->
<div class="form-group">
<label class="col-md-2 control-label" for="category">*
Category</label>
<div class="col-md-8">
<select th:value="${book.category}" id="category" name="category"
class="form-control">
<option value="" selected="selected" disabled="disabled">Please
select an option...</option>
<option value="Management"
th:selected="(${book.category}=='Management')">Management</option>
<option value="Fiction"
th:selected="(${book.category}=='Fiction')">Fiction</option>
<option value="Engineering"
th:selected="(${book.category}=='Engineering')">Engineering</option>
<option value="Programming"
th:selected="(${book.category}=='Programming')">Programming</option>
<option value="Arts & Literature"
th:selected="(${book.category}=='Arts & Literature')">Arts
& Literature</option>
</select>
</div>
</div>
<!-- pages -->
<div class="form-group">
<label class="col-md-2 control-label" for="pageNumber">Pages</label>
<div class="col-md-8">
<input type="number" name="numberOfPages" class="form-control"
id="pageNumber" th:value="${book.numberOfPages}"
placeholder="Page Number" /> <span class="help-block">Number
of pages of the book</span>
</div>
</div>
<!-- format -->
<div class="form-group">
<label class="col-md-2 control-label" for="format">Format</label>
<div class="col-md-8">
<select th:value="${book.format}" id="format" name="format"
class="form-control">
<option value="paperback">Paperback</option>
<option value="hardcover">Hardcover</option>
</select>
</div>
</div>
<!-- isbn -->
<div class="form-group">
<label class="col-md-2 control-label" for="isbn">ISBN</label>
<div class="col-md-8">
<input type="text" name="isbn" class="form-control" id="isbn"
th:value="${book.isbn}" placeholder="ISBN" /> <span
class="help-block">ISBN of the book</span>
</div>
</div>
<!-- shipping weight -->
<div class="form-group">
<label class="col-md-2 control-label" for="shippingWeight">Shipping
Weight</label>
<div class="col-md-8">
<div class="input-group">
<input th:value="${book.shippingWeight}" type="number" step="0.01"
name="shippingWeight" class="form-control" id="shippingWeight"
placeholder="Shipping Weight" /> <span
class="input-group-addon">Ounces</span>
</div>
<span class="help-block">Shipping Weight of the book</span>
</div>
</div>
<!-- list price -->
<div class="form-group">
<label class="col-md-2 control-label" for="listPrice">List
Price</label>
<div class="col-md-8">
<div class="input-group">
<span class="input-group-addon">Tk/=</span> <input
th:value="${book.listPrice}" type="number" name="listPrice" step="0.01"
class="form-control" id="listPrice" placeholder="List Price" />
</div>
<span class="help-block">List price of the book</span>
</div>
</div>
<!-- our price -->
<div class="form-group">
<label class="col-md-2 control-label" for="ourPrice">Our
Price</label>
<div class="col-md-8">
<div class="input-group">
<span class="input-group-addon">Tk/=</span> <input
th:value="${book.ourPrice}" type="number" name="ourPrice" step="0.01"
class="form-control" id="ourPrice" placeholder="Our Price" />
</div>
<span class="help-block">Our price of the book</span>
</div>
</div>
<!-- in stock number -->
<div class="form-group">
<label class="col-md-2 control-label" for="inStockNumber">Number
in stock</label>
<div class="col-md-8">
<input th:value="${book.inStockNumber}" type="number"
name="inStockNumber" class="form-control" id="inStockNumber"
placeholder="Number of in-stock copies" /> <span
class="help-block">Number of in-stock copies</span>
</div>
</div>
<!-- status of book -->
<div class="form-group">
<label class="col-md-2 control-label" for="status">Status</label>
<div class="col-md-8">
<label><input value="true" type="radio" name="active"
th:checked="${book.active}" /> Active </label> <label><input
value="false" type="radio" name="active" th:checked="${!book.active}"/>
Inactive </label> <span class="help-block">Whether the book is
active or inactive</span>
</div>
</div>
<!-- description -->
<div class="form-group">
<label class="col-md-2 control-label" for="description">Description</label>
<div class="col-md-8">
<textarea name="description" rows="5" class="form-control"
id="description" th:value="${book.description}" th:text="${book.description}"
placeholder="Description" /></textarea>
<span class="help-block">Description of the book</span>
</div>
</div>
<!-- upload image -->
<div class="form-group">
<div class="col-md-2">
<label for="bookImage">Upload book image</label>
</div>
<div class="col-md-8">
<input id="bookImage" type="file" name="bookImage"
th:value="${book.bookImage}" />
</div>
</div>
<div class="form-group">
<div class="col-md-2"></div>
<div class="col-md-8">
<button type="submit" class="btn btn-success">Update Book</button>
<a class="btn btn-danger" th:href="@{/book/bookInfo(id=${book.id})}">Cancel</a>
</div>
</div>
</fieldset>
</form>
</div>
</div>
<div th:replace="common/header :: body-bottom-scripts" />
</body>
</html>
================================================
FILE: adminportal/src/test/java/com/adminportal/AdminportalApplicationTests.java
================================================
package com.adminportal;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class AdminportalApplicationTests {
@Test
public void contextLoads() {
}
}
================================================
FILE: bin/.gitignore
================================================
target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/
================================================
FILE: bin/.mvn/wrapper/maven-wrapper.properties
================================================
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip
================================================
FILE: bin/mvnw
================================================
#!/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
#
# http://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.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 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 /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
#
# Look for the Apple JDKs first to preserve the existing behaviour, and then look
# for the new JDKs provided by Oracle.
#
if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
#
# Apple JDKs
#
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
fi
if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
#
# Apple JDKs
#
export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
fi
if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
#
# Oracle JDKs
#
export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
fi
if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
#
# Apple JDKs
#
export JAVA_HOME=`/usr/libexec/java_home`
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 Migwn, 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)`"
# TODO classpath?
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="`which 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
# 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"`
fi
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
local basedir=$(pwd)
local wdir=$(pwd)
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
wdir=$(cd "$wdir/.."; pwd)
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# 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 \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} "$@"
================================================
FILE: bin/mvnw.cmd
================================================
@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 http://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 Maven2 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 key stroke 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 enable echoing my 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 "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\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
set MAVEN_CMD_LINE_ARGS=%*
@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="".\.mvn\wrapper\maven-wrapper.jar""
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
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 "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\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%
exit /B %ERROR_CODE%
================================================
FILE: bin/pom.xml
================================================
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bookstore</groupId>
<artifactId>bookstore</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Bookstore</name>
<description>frontend part for our bookstore project</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: bin/src/main/resources/application.properties
================================================
================================================
FILE: mvnw
================================================
#!/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
#
# http://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.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 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 /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
#
# Look for the Apple JDKs first to preserve the existing behaviour, and then look
# for the new JDKs provided by Oracle.
#
if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
#
# Apple JDKs
#
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
fi
if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
#
# Apple JDKs
#
export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
fi
if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
#
# Oracle JDKs
#
export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
fi
if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
#
# Apple JDKs
#
export JAVA_HOME=`/usr/libexec/java_home`
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 Migwn, 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)`"
# TODO classpath?
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="`which 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
# 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"`
fi
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
local basedir=$(pwd)
local wdir=$(pwd)
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
wdir=$(cd "$wdir/.."; pwd)
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# 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 \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} "$@"
================================================
FILE: mvnw.cmd
================================================
@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 http://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 Maven2 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 key stroke 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 enable echoing my 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 "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\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
set MAVEN_CMD_LINE_ARGS=%*
@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="".\.mvn\wrapper\maven-wrapper.jar""
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
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 "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\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%
exit /B %ERROR_CODE%
================================================
FILE: pom.xml
================================================
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bookstore</groupId>
<artifactId>bookstore</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eCommerce</name>
<description>frontend part </description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>21</java.version>
</properties>
<dependencies>
<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.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity6</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mysql</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: src/main/java/com/eCommerce/ECommerceApplication.java
================================================
package com.eCommerce;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ECommerceApplication {
public static void main(String[] args) {
SpringApplication.run(ECommerceApplication.class, args);
}
}
================================================
FILE: src/main/java/com/eCommerce/config/SecurityConfig.java
================================================
package com.eCommerce.config;
import com.eCommerce.service.impl.UserSecurityService;
import com.eCommerce.utility.SecurityUtility;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {
@Autowired
private Environment env;
@Autowired
private UserSecurityService userSecurityService;
private BCryptPasswordEncoder passwordEncoder() {
return SecurityUtility.passwordEncoder();
}
private static final String[] PUBLIC_MATCHERS = {
"/css/**",
"/js/**",
"/image/**",
"/",
"/newUser",
"/forgetPassword",
"/login",
"/fonts/**",
"/bookshelf",
"/bookDetail",
"/faq",
"/searchByCategory",
"/searchBook"
};
@Bean
public SecurityFilterChain configure(HttpSecurity http) throws Exception {
http
.cors(AbstractHttpConfigurer::disable)
.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(authz -> authz
.requestMatchers(PUBLIC_MATCHERS).permitAll().anyRequest().authenticated()
)
.formLogin(formLogin -> formLogin
.loginPage("/login")
.defaultSuccessUrl("/", true)
.failureUrl("/login?error")
)
.logout(logout -> logout
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/?logout").deleteCookies("remember-me").permitAll()
);
return http.build();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userSecurityService).passwordEncoder(passwordEncoder());
}
}
================================================
FILE: src/main/java/com/eCommerce/controller/CheckoutController.java
================================================
package com.eCommerce.controller;
import java.security.Principal;
import java.time.LocalDate;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.eCommerce.domain.BillingAddress;
import com.eCommerce.domain.CartItem;
import com.eCommerce.domain.Order;
import com.eCommerce.domain.Payment;
import com.eCommerce.domain.ShippingAddress;
import com.eCommerce.domain.ShoppingCart;
import com.eCommerce.domain.User;
import com.eCommerce.domain.UserBilling;
import com.eCommerce.domain.UserPayment;
import com.eCommerce.domain.UserShipping;
import com.eCommerce.service.BillingAddressService;
import com.eCommerce.service.CartItemService;
import com.eCommerce.service.OrderService;
import com.eCommerce.service.PaymentService;
import com.eCommerce.service.ShippingAddressService;
import com.eCommerce.service.ShoppingCartService;
import com.eCommerce.service.UserPaymentService;
import com.eCommerce.service.UserService;
import com.eCommerce.service.UserShippingService;
import com.eCommerce.utility.MailConstructor;
import com.eCommerce.utility.USConstants;
@Controller
public class CheckoutController {
private ShippingAddress shippingAddress = new ShippingAddress();
private BillingAddress billingAddress = new BillingAddress();
private Payment payment = new Payment();
@Autowired
private JavaMailSender mailSender;
@Autowired
private MailConstructor mailConstructor;
@Autowired
private UserService userService;
@Autowired
private CartItemService cartItemService;
@Autowired
private ShoppingCartService shoppingCartService;
@Autowired
private ShippingAddressService shippingAddressService;
@Autowired
private BillingAddressService billingAddressService;
@Autowired
private PaymentService paymentService;
@Autowired
private UserShippingService userShippingService;
@Autowired
private UserPaymentService userPaymentService;
@Autowired
private OrderService orderService;
@RequestMapping("/checkout")
public String checkout(
@RequestParam("id") Long cartId,
@RequestParam(value="missingRequiredField", required=false) boolean missingRequiredField,
Model model, Principal principal
){
User user = userService.findByUsername(principal.getName());
if(cartId != user.getShoppingCart().getId()) {
return "badRequestPage";
}
List<CartItem> cartItemList = cartItemService.findByShoppingCart(user.getShoppingCart());
if(cartItemList.size() == 0) {
model.addAttribute("emptyCart", true);
return "forward:/shoppintCart/cart";
}
for (CartItem cartItem : cartItemList) {
if(cartItem.getBook().getInStockNumber() < cartItem.getQty()) {
model.addAttribute("notEnoughStock", true);
return "forward:/shoppingCart/cart";
}
}
List<UserShipping> userShippingList = user.getUserShippingList();
List<UserPayment> userPaymentList = user.getUserPaymentList();
model.addAttribute("userShippingList", userShippingList);
model.addAttribute("userPaymentList", userPaymentList);
if (userPaymentList.size() == 0) {
model.addAttribute("emptyPaymentList", true);
} else {
model.addAttribute("emptyPaymentList", false);
}
if (userShippingList.size() == 0) {
model.addAttribute("emptyShippingList", true);
} else {
model.addAttribute("emptyShippingList", false);
}
ShoppingCart shoppingCart = user.getShoppingCart();
for(UserShipping userShipping : userShippingList) {
if(userShipping.isUserShippingDefault()) {
shippingAddressService.setByUserShipping(userShipping, shippingAddress);
}
}
for (UserPayment userPayment : userPaymentList) {
if(userPayment.isDefaultPayment()) {
paymentService.setByUserPayment(userPayment, payment);
billingAddressService.setByUserBilling(userPayment.getUserBilling(), billingAddress);
}
}
model.addAttribute("shippingAddress", shippingAddress);
model.addAttribute("payment", payment);
model.addAttribute("billingAddress", billingAddress);
model.addAttribute("cartItemList", cartItemList);
model.addAttribute("shoppingCart", user.getShoppingCart());
List<String> stateList = USConstants.listOfUSStatesCode;
Collections.sort(stateList);
model.addAttribute("stateList", stateList);
model.addAttribute("classActiveShipping", true);
if(missingRequiredField) {
model.addAttribute("missingRequiredField", true);
}
return "checkout";
}
@RequestMapping(value = "/checkout", method = RequestMethod.POST)
public String checkoutPost(@ModelAttribute("shippingAddress") ShippingAddress shippingAddress,
@ModelAttribute("billingAddress") BillingAddress billingAddress, @ModelAttribute("payment") Payment payment,
@ModelAttribute("billingSameAsShipping") String billingSameAsShipping,
@ModelAttribute("shippingMethod") String shippingMethod, Principal principal, Model model) {
ShoppingCart shoppingCart = userService.findByUsername(principal.getName()).getShoppingCart();
List<CartItem> cartItemList = cartItemService.findByShoppingCart(shoppingCart);
model.addAttribute("cartItemList", cartItemList);
if (billingSameAsShipping.equals("true")) {
billingAddress.setBillingAddressName(shippingAddress.getShippingAddressName());
billingAddress.setBillingAddressStreet1(shippingAddress.getShippingAddressStreet1());
billingAddress.setBillingAddressStreet2(shippingAddress.getShippingAddressStreet2());
billingAddress.setBillingAddressCity(shippingAddress.getShippingAddressCity());
billingAddress.setBillingAddressState(shippingAddress.getShippingAddressState());
billingAddress.setBillingAddressCountry(shippingAddress.getShippingAddressCountry());
billingAddress.setBillingAddressZipcode(shippingAddress.getShippingAddressZipcode());
}
if (shippingAddress.getShippingAddressStreet1().isEmpty() || shippingAddress.getShippingAddressCity().isEmpty()
|| shippingAddress.getShippingAddressState().isEmpty()
|| shippingAddress.getShippingAddressName().isEmpty()
|| shippingAddress.getShippingAddressZipcode().isEmpty() || payment.getCardNumber().isEmpty()
|| payment.getCvc() == 0 || billingAddress.getBillingAddressStreet1().isEmpty()
|| billingAddress.getBillingAddressCity().isEmpty() || billingAddress.getBillingAddressState().isEmpty()
|| billingAddress.getBillingAddressName().isEmpty()
|| billingAddress.getBillingAddressZipcode().isEmpty())
return "redirect:/checkout?id=" + shoppingCart.getId() + "&missingRequiredField=true";
User user = userService.findByUsername(principal.getName());
Order order = orderService.createOrder(shoppingCart, shippingAddress, billingAddress, payment, shippingMethod, user);
mailSender.send(mailConstructor.constructOrderConfirmationEmail(user, order, Locale.ENGLISH));
shoppingCartService.clearShoppingCart(shoppingCart);
LocalDate today = LocalDate.now();
LocalDate estimatedDeliveryDate;
if (shippingMethod.equals("groundShipping")) {
estimatedDeliveryDate = today.plusDays(5);
} else {
estimatedDeliveryDate = today.plusDays(3);
}
model.addAttribute("estimatedDeliveryDate", estimatedDeliveryDate);
return "orderSubmittedPage";
}
@RequestMapping("/setShippingAddress")
public String setShippingAddress(
@RequestParam("userShippingId") Long userShippingId,
Principal principal, Model model
) {
User user = userService.findByUsername(principal.getName());
UserShipping userShipping = userShippingService.findById(userShippingId);
if(userShipping.getUser().getId() != user.getId()) {
return "badRequestPage";
} else {
shippingAddressService.setByUserShipping(userShipping, shippingAddress);
List<CartItem> cartItemList = cartItemService.findByShoppingCart(user.getShoppingCart());
model.addAttribute("shippingAddress", shippingAddress);
model.addAttribute("payment", payment);
model.addAttribute("billingAddress", billingAddress);
model.addAttribute("cartItemList", cartItemList);
model.addAttribute("shoppingCart", user.getShoppingCart());
List<String> stateList = USConstants.listOfUSStatesCode;
Collections.sort(stateList);
model.addAttribute("stateList", stateList);
List<UserShipping> userShippingList = user.getUserShippingList();
List<UserPayment> userPaymentList = user.getUserPaymentList();
model.addAttribute("userShippingList", userShippingList);
model.addAttribute("userPaymentList", userPaymentList);
model.addAttribute("shippingAddress", shippingAddress);
model.addAttribute("classActiveShipping", true);
if (userPaymentList.size() == 0) {
model.addAttribute("emptyPaymentList", true);
} else {
model.addAttribute("emptyPaymentList", false);
}
model.addAttribute("emptyShippingList", false);
return "checkout";
}
}
@RequestMapping("/setPaymentMethod")
public String setPaymentMethod(
@RequestParam("userPaymentId") Long userPaymentId,
Principal principal, Model model
) {
User user = userService.findByUsername(principal.getName());
UserPayment userPayment = userPaymentService.findById(userPaymentId);
UserBilling userBilling = userPayment.getUserBilling();
if(userPayment.getUser().getId() != user.getId()){
return "badRequestPage";
} else {
paymentService.setByUserPayment(userPayment, payment);
List<CartItem> cartItemList = cartItemService.findByShoppingCart(user.getShoppingCart());
billingAddressService.setByUserBilling(userBilling, billingAddress);
model.addAttribute("shippingAddress", shippingAddress);
model.addAttribute("payment", payment);
model.addAttribute("billingAddress", billingAddress);
model.addAttribute("cartItemList", cartItemList);
model.addAttribute("shoppingCart", user.getShoppingCart());
List<String> stateList = USConstants.listOfUSStatesCode;
Collections.sort(stateList);
model.addAttribute("stateList", stateList);
List<UserShipping> userShippingList = user.getUserShippingList();
List<UserPayment> userPaymentList = user.getUserPaymentList();
model.addAttribute("userShippingList", userShippingList);
model.addAttribute("userPaymentList", userPaymentList);
model.addAttribute("shippingAddress", shippingAddress);
model.addAttribute("classActivePayment", true);
model.addAttribute("emptyPaymentList", false);
if (userShippingList.size() == 0) {
model.addAttribute("emptyShippingList", true);
} else {
model.addAttribute("emptyShippingList", false);
}
return "checkout";
}
}
}
================================================
FILE: src/main/java/com/eCommerce/controller/HomeController.java
================================================
package com.eCommerce.controller;
import com.eCommerce.domain.Book;
import com.eCommerce.domain.CartItem;
import com.eCommerce.domain.Order;
import com.eCommerce.domain.User;
import com.eCommerce.domain.UserBilling;
import com.eCommerce.domain.UserPayment;
import com.eCommerce.domain.UserShipping;
import com.eCommerce.domain.security.PasswordResetToken;
import com.eCommerce.domain.security.Role;
import com.eCommerce.domain.security.UserRole;
import com.eCommerce.service.BookService;
import com.eCommerce.service.CartItemService;
import com.eCommerce.service.OrderService;
import com.eCommerce.service.UserPaymentService;
import com.eCommerce.service.UserService;
import com.eCommerce.service.UserShippingService;
import com.eCommerce.service.impl.UserSecurityService;
import com.eCommerce.utility.MailConstructor;
import com.eCommerce.utility.SecurityUtility;
import com.eCommerce.utility.USConstants;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.websocket.server.PathParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.security.Principal;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.UUID;
@Controller
public class HomeController {
@Autowired
private JavaMailSender mailSender;
@Autowired
private MailConstructor mailConstructor;
@Autowired
private UserService userService;
@Autowired
private UserSecurityService userSecurityService;
@Autowired
private BookService bookService;
@Autowired
private UserPaymentService userPaymentService;
@Autowired
private UserShippingService userShippingService;
@Autowired
private CartItemService cartItemService;
@Autowired
private OrderService orderService;
@GetMapping("/")
public String index() {
return "index";
}
@GetMapping("/login")
public String login(Model model) {
model.addAttribute("classActiveLogin", true);
return "myAccount";
}
@GetMapping("/faq")
public String faq() {
return "faq";
}
@GetMapping("/bookshelf")
public String bookshelf(Model model, Principal principal) {
if(principal != null) {
String username = principal.getName();
User user = userService.findByUsername(username);
model.addAttribute("user", user);
}
List<Book> bookList = bookService.findAll();
model.addAttribute("bookList", bookList);
model.addAttribute("activeAll",true);
return "bookshelf";
}
@GetMapping("/bookDetail")
public String bookDetail(
@PathParam("id") Long id, Model model, Principal principal
) {
if(principal != null) {
String username = principal.getName();
User user = userService.findByUsername(username);
model.addAttribute("user", user);
}
Book book = bookService.findById(id);
model.addAttribute("book", book);
List<Integer> qtyList = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
model.addAttribute("qtyList", qtyList);
model.addAttribute("qty", 1);
return "bookDetail";
}
@GetMapping("/forgetPassword")
public String forgetPassword(
HttpServletRequest request,
@ModelAttribute("email") String email,
Model model
) {
model.addAttribute("classActiveForgetPassword", true);
User user = userService.findByEmail(email);
if (user == null) {
model.addAttribute("emailNotExist", true);
return "myAccount";
}
String password = SecurityUtility.randomPassword();
String encryptedPassword = SecurityUtility.passwordEncoder().encode(password);
user.setPassword(encryptedPassword);
userService.save(user);
String token = UUID.randomUUID().toString();
userService.createPasswordResetTokenForUser(user, token);
String appUrl = "http://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
SimpleMailMessage newEmail = mailConstructor.constructResetTokenEmail(appUrl, request.getLocale(), token, user, password);
mailSender.send(newEmail);
model.addAttribute("forgetPasswordEmailSent", "true");
return "myAccount";
}
@GetMapping("/myProfile")
public String myProfile(Model model, Principal principal) {
User user = userService.findByUsername(principal.getName());
model.addAttribute("user", user);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("orderList", user.getOrderList());
UserShipping userShipping = new UserShipping();
model.addAttribute("userShipping", userShipping);
model.addAttribute("listOfCreditCards", true);
model.addAttribute("listOfShippingAddresses", true);
List<String> stateList = USConstants.listOfUSStatesCode;
Collections.sort(stateList);
model.addAttribute("stateList", stateList);
model.addAttribute("classActiveEdit", true);
return "myProfile";
}
@GetMapping("/listOfCreditCards")
public String listOfCreditCards(
Model model, Principal principal, HttpServletRequest request
) {
User user = userService.findByUsername(principal.getName());
model.addAttribute("user", user);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("orderList", user.getOrderList());
model.addAttribute("listOfCreditCards", true);
model.addAttribute("classActiveBilling", true);
model.addAttribute("listOfShippingAddresses", true);
return "myProfile";
}
@GetMapping("/listOfShippingAddresses")
public String listOfShippingAddresses(
Model model, Principal principal, HttpServletRequest request
) {
User user = userService.findByUsername(principal.getName());
model.addAttribute("user", user);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("orderList", user.getOrderList());
model.addAttribute("listOfCreditCards", true);
model.addAttribute("classActiveShipping", true);
model.addAttribute("listOfShippingAddresses", true);
return "myProfile";
}
@GetMapping("/addNewCreditCard")
public String addNewCreditCard(
Model model, Principal principal
){
User user = userService.findByUsername(principal.getName());
model.addAttribute("user", user);
model.addAttribute("addNewCreditCard", true);
model.addAttribute("classActiveBilling", true);
model.addAttribute("listOfShippingAddresses", true);
UserBilling userBilling = new UserBilling();
UserPayment userPayment = new UserPayment();
model.addAttribute("userBilling", userBilling);
model.addAttribute("userPayment", userPayment);
List<String> stateList = USConstants.listOfUSStatesCode;
Collections.sort(stateList);
model.addAttribute("stateList", stateList);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("orderList", user.getOrderList());
return "myProfile";
}
@GetMapping("/addNewShippingAddress")
public String addNewShippingAddress(
Model model, Principal principal
){
User user = userService.findByUsername(principal.getName());
model.addAttribute("user", user);
model.addAttribute("addNewShippingAddress", true);
model.addAttribute("classActiveShipping", true);
model.addAttribute("listOfCreditCards", true);
UserShipping userShipping = new UserShipping();
model.addAttribute("userShipping", userShipping);
List<String> stateList = USConstants.listOfUSStatesCode;
Collections.sort(stateList);
model.addAttribute("stateList", stateList);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("orderList", user.getOrderList());
return "myProfile";
}
@PostMapping(value = "/addNewCreditCard")
public String addNewCreditCard(
@ModelAttribute("userPayment") UserPayment userPayment,
@ModelAttribute("userBilling") UserBilling userBilling,
Principal principal, Model model
){
User user = userService.findByUsername(principal.getName());
userService.updateUserBilling(userBilling, userPayment, user);
model.addAttribute("user", user);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("listOfCreditCards", true);
model.addAttribute("classActiveBilling", true);
model.addAttribute("listOfShippingAddresses", true);
model.addAttribute("orderList", user.getOrderList());
return "myProfile";
}
@PostMapping(value = "/addNewShippingAddress")
public String addNewShippingAddressPost(
@ModelAttribute("userShipping") UserShipping userShipping,
Principal principal, Model model
){
User user = userService.findByUsername(principal.getName());
userService.updateUserShipping(userShipping, user);
model.addAttribute("user", user);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("listOfShippingAddresses", true);
model.addAttribute("classActiveShipping", true);
model.addAttribute("listOfCreditCards", true);
model.addAttribute("orderList", user.getOrderList());
return "myProfile";
}
@GetMapping("/updateCreditCard")
public String updateCreditCard(
@ModelAttribute("id") Long creditCardId, Principal principal, Model model
) {
User user = userService.findByUsername(principal.getName());
UserPayment userPayment = userPaymentService.findById(creditCardId);
if(user.getId() != userPayment.getUser().getId()) {
return "badRequestPage";
} else {
model.addAttribute("user", user);
UserBilling userBilling = userPayment.getUserBilling();
model.addAttribute("userPayment", userPayment);
model.addAttribute("userBilling", userBilling);
List<String> stateList = USConstants.listOfUSStatesCode;
Collections.sort(stateList);
model.addAttribute("stateList", stateList);
model.addAttribute("addNewCreditCard", true);
model.addAttribute("classActiveBilling", true);
model.addAttribute("listOfShippingAddresses", true);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("orderList", user.getOrderList());
return "myProfile";
}
}
@GetMapping("/updateUserShipping")
public String updateUserShipping(
@ModelAttribute("id") Long shippingAddressId, Principal principal, Model model
) {
User user = userService.findByUsername(principal.getName());
UserShipping userShipping = userShippingService.findById(shippingAddressId);
if(user.getId() != userShipping.getUser().getId()) {
return "badRequestPage";
} else {
model.addAttribute("user", user);
model.addAttribute("userShipping", userShipping);
List<String> stateList = USConstants.listOfUSStatesCode;
Collections.sort(stateList);
model.addAttribute("stateList", stateList);
model.addAttribute("addNewShippingAddress", true);
model.addAttribute("classActiveShipping", true);
model.addAttribute("listOfCreditCards", true);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("orderList", user.getOrderList());
return "myProfile";
}
}
@PostMapping(value = "/setDefaultPayment")
public String setDefaultPayment(
@ModelAttribute("defaultUserPaymentId") Long defaultPaymentId, Principal principal, Model model
) {
User user = userService.findByUsername(principal.getName());
userService.setUserDefaultPayment(defaultPaymentId, user);
model.addAttribute("user", user);
model.addAttribute("listOfCreditCards", true);
model.addAttribute("classActiveBilling", true);
model.addAttribute("listOfShippingAddresses", true);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("orderList", user.getOrderList());
return "myProfile";
}
@PostMapping(value = "/setDefaultShippingAddress")
public String setDefaultShippingAddress(
@ModelAttribute("defaultShippingAddressId") Long defaultShippingId, Principal principal, Model model
) {
User user = userService.findByUsername(principal.getName());
userService.setUserDefaultShipping(defaultShippingId, user);
model.addAttribute("user", user);
model.addAttribute("listOfCreditCards", true);
model.addAttribute("classActiveShipping", true);
model.addAttribute("listOfShippingAddresses", true);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("orderList", user.getOrderList());
return "myProfile";
}
@GetMapping("/removeCreditCard")
public String removeCreditCard(
@ModelAttribute("id") Long creditCardId, Principal principal, Model model
){
User user = userService.findByUsername(principal.getName());
UserPayment userPayment = userPaymentService.findById(creditCardId);
if(user.getId() != userPayment.getUser().getId()) {
return "badRequestPage";
} else {
model.addAttribute("user", user);
userPaymentService.deleteById(creditCardId);
model.addAttribute("listOfCreditCards", true);
model.addAttribute("classActiveBilling", true);
model.addAttribute("listOfShippingAddresses", true);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("orderList", user.getOrderList());
return "myProfile";
}
}
@GetMapping("/removeUserShipping")
public String removeUserShipping(
@ModelAttribute("id") Long userShippingId, Principal principal, Model model
){
User user = userService.findByUsername(principal.getName());
UserShipping userShipping = userShippingService.findById(userShippingId);
if(user.getId() != userShipping.getUser().getId()) {
return "badRequestPage";
} else {
model.addAttribute("user", user);
userShippingService.deleteById(userShippingId);
model.addAttribute("listOfShippingAddresses", true);
model.addAttribute("classActiveShipping", true);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("orderList", user.getOrderList());
return "myProfile";
}
}
@PostMapping(value = "/newUser")
public String newUserPost(
HttpServletRequest request,
@ModelAttribute("email") String userEmail,
@ModelAttribute("username") String username,
Model model
) throws Exception{
model.addAttribute("classActiveNewAccount", true);
model.addAttribute("email", userEmail);
model.addAttribute("username", username);
if (userService.findByUsername(username) != null) {
model.addAttribute("usernameExists", true);
return "myAccount";
}
if (userService.findByEmail(userEmail) != null) {
model.addAttribute("emailExists", true);
return "myAccount";
}
User user = new User();
user.setUsername(username);
user.setEmail(userEmail);
String password = SecurityUtility.randomPassword();
String encryptedPassword = SecurityUtility.passwordEncoder().encode(password);
user.setPassword(encryptedPassword);
Role role = new Role();
role.setRoleId(1);
role.setName("ROLE_USER");
Set<UserRole> userRoles = new HashSet<>();
userRoles.add(new UserRole(user, role));
userService.createUser(user, userRoles);
String token = UUID.randomUUID().toString();
userService.createPasswordResetTokenForUser(user, token);
String appUrl = "http://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
SimpleMailMessage email = mailConstructor.constructResetTokenEmail(appUrl, request.getLocale(), token, user, password);
mailSender.send(email);
model.addAttribute("emailSent", "true");
model.addAttribute("orderList", user.getOrderList());
return "myAccount";
}
@GetMapping("/newUser")
public String newUser(Locale locale, @RequestParam("token") String token, Model model) {
PasswordResetToken passToken = userService.getPasswordResetToken(token);
if (passToken == null) {
String message = "Invalid Token.";
model.addAttribute("message", message);
return "redirect:/badRequest";
}
User user = passToken.getUser();
String username = user.getUsername();
UserDetails userDetails = userSecurityService.loadUserByUsername(username);
Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails, userDetails.getPassword(),
userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
model.addAttribute("user", user);
model.addAttribute("classActiveEdit", true);
model.addAttribute("orderList", user.getOrderList());
return "myProfile";
}
@PostMapping(value = "/updateUserInfo")
public String updateUserInfo(
@ModelAttribute("user") User user,
@ModelAttribute("newPassword") String newPassword,
Model model
) throws Exception {
User currentUser = userService.findById(user.getId());
if(currentUser == null) {
throw new Exception ("User not found");
}
/*check email already exists*/
if (userService.findByEmail(user.getEmail())!=null) {
if(userService.findByEmail(user.getEmail()).getId() != currentUser.getId()) {
model.addAttribute("emailExists", true);
return "myProfile";
}
}
/*check username already exists*/
if (userService.findByUsername(user.getUsername())!=null) {
if(userService.findByUsername(user.getUsername()).getId() != currentUser.getId()) {
model.addAttribute("usernameExists", true);
return "myProfile";
}
}
// update password
if (newPassword != null && !newPassword.isEmpty() && !newPassword.equals("")){
BCryptPasswordEncoder passwordEncoder = SecurityUtility.passwordEncoder();
String dbPassword = currentUser.getPassword();
if(passwordEncoder.matches(user.getPassword(), dbPassword)){
currentUser.setPassword(passwordEncoder.encode(newPassword));
} else {
model.addAttribute("incorrectPassword", true);
return "myProfile";
}
}
currentUser.setFirstName(user.getFirstName());
currentUser.setLastName(user.getLastName());
currentUser.setUsername(user.getUsername());
currentUser.setEmail(user.getEmail());
userService.save(currentUser);
model.addAttribute("updateSuccess", true);
model.addAttribute("user", currentUser);
model.addAttribute("classActiveEdit", true);
UserDetails userDetails = userSecurityService.loadUserByUsername(currentUser.getUsername());
Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails, userDetails.getPassword(),
userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
model.addAttribute("orderList", user.getOrderList());
return "myProfile";
}
@GetMapping("/orderDetail")
public String orderDetail(
@RequestParam("id") Long orderId,
Principal principal, Model model
){
User user = userService.findByUsername(principal.getName());
Order order = orderService.findById(orderId);
if(order.getUser().getId()!=user.getId()) {
return "badRequestPage";
} else {
List<CartItem> cartItemList = cartItemService.findByOrder(order);
model.addAttribute("cartItemList", cartItemList);
model.addAttribute("user", user);
model.addAttribute("order", order);
model.addAttribute("userPaymentList", user.getUserPaymentList());
model.addAttribute("userShippingList", user.getUserShippingList());
model.addAttribute("orderList", user.getOrderList());
UserShipping userShipping = new UserShipping();
model.addAttribute("userShipping", userShipping);
List<String> stateList = USConstants.listOfUSStatesCode;
Collections.sort(stateList);
model.addAttribute("stateList", stateList);
model.addAttribute("listOfShippingAddresses", true);
model.addAttribute("classActiveOrders", true);
model.addAttribute("listOfCreditCards", true);
model.addAttribute("displayOrderDetail", true);
return "myProfile";
}
}
}
================================================
FILE: src/main/java/com/eCommerce/controller/SearchController.java
================================================
package com.eCommerce.controller;
import java.security.Principal;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.eCommerce.domain.Book;
import com.eCommerce.domain.User;
import com.eCommerce.service.BookService;
import com.eCommerce.service.UserService;
@Controller
public class SearchController {
@Autowired
private UserService userService;
@Autowired
private BookService bookService;
@RequestMapping("/searchByCategory")
public String searchByCategory(
@RequestParam("category") String category,
Model model, Principal principal
){
if(principal!=null) {
String username = principal.getName();
User user = userService.findByUsername(username);
model.addAttribute("user", user);
}
String classActiveCategory = "active"+category;
classActiveCategory = classActiveCategory.replaceAll("\\s+", "");
classActiveCategory = classActiveCategory.replaceAll("&", "");
model.addAttribute(classActiveCategory, true);
List<Book> bookList = bookService.findByCategory(category);
if (bookList.isEmpty()) {
model.addAttribute("emptyList", true);
return "bookshelf";
}
model.addAttribute("bookList", bookList);
return "bookshelf";
}
@RequestMapping("/searchBook")
public String searchBook(
@ModelAttribute("keyword") String keyword,
Principal principal, Model model
) {
if(principal!=null) {
String username = principal.getName();
User user = userService.findByUsername(username);
model.addAttribute("user", user);
}
List<Book> bookList = bookService.blurrySearch(keyword);
if (bookList.isEmpty()) {
model.addAttribute("emptyList", true);
return "bookshelf";
}
model.addAttribute("bookList", bookList);
return "bookshelf";
}
}
================================================
FILE: src/main/java/com/eCommerce/controller/ShoppingCartController.java
================================================
package com.eCommerce.controller;
import java.security.Principal;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.eCommerce.domain.Book;
import com.eCommerce.domain.CartItem;
import com.eCommerce.domain.ShoppingCart;
import com.eCommerce.domain.User;
import com.eCommerce.service.BookService;
import com.eCommerce.service.CartItemService;
import com.eCommerce.service.ShoppingCartService;
import com.eCommerce.service.UserService;
@Controller
@RequestMapping("/shoppingCart")
public class ShoppingCartController {
@Autowired
private UserService userService;
@Autowired
private CartItemService cartItemService;
@Autowired
private BookService bookService;
@Autowired
private ShoppingCartService shoppingCartService;
@RequestMapping("/cart")
public String shoppingCart(Model model, Principal principal) {
User user = userService.findByUsername(principal.getName());
ShoppingCart shoppingCart = user.getShoppingCart();
List<CartItem> cartItemList = cartItemService.findByShoppingCart(shoppingCart);
shoppingCartService.updateShoppingCart(shoppingCart);
model.addAttribute("cartItemList", cartItemList);
model.addAttribute("shoppingCart", shoppingCart);
return "shoppingCart";
}
@RequestMapping("/addItem")
public String addItem(
@ModelAttribute("book") Book book,
@ModelAttribute("qty") String qty,
Model model, Principal principal
) {
User user = userService.findByUsername(principal.getName());
book = bookService.findById(book.getId());
if (Integer.parseInt(qty) > book.getInStockNumber()) {
model.addAttribute("notEnoughStock", true);
return "forward:/bookDetail?id="+book.getId();
}
CartItem cartItem = cartItemService.addBookToCartItem(book, user, Integer.parseInt(qty));
model.addAttribute("addBookSuccess", true);
return "forward:/bookDetail?id="+book.getId();
}
@RequestMapping("/updateCartItem")
public String updateShoppingCart(
@ModelAttribute("id") Long cartItemId,
@ModelAttribute("qty") int qty
) {
CartItem cartItem = cartItemService.findById(cartItemId);
cartItem.setQty(qty);
cartItemService.updateCartItem(cartItem);
return "forward:/shoppingCart/cart";
}
@RequestMapping("/removeItem")
public String removeItem(@RequestParam("id") Long id) {
cartItemService.removeCartItem(cartItemService.findById(id));
return "forward:/shoppingCart/cart";
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/BillingAddress.java
================================================
package com.eCommerce.domain;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToOne;
@Entity
public class BillingAddress {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String BillingAddressName;
private String BillingAddressStreet1;
private String BillingAddressStreet2;
private String BillingAddressCity;
private String BillingAddressState;
private String BillingAddressCountry;
private String BillingAddressZipcode;
@OneToOne
private Order order;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getBillingAddressName() {
return BillingAddressName;
}
public void setBillingAddressName(String billingAddressName) {
BillingAddressName = billingAddressName;
}
public String getBillingAddressStreet1() {
return BillingAddressStreet1;
}
public void setBillingAddressStreet1(String billingAddressStreet1) {
BillingAddressStreet1 = billingAddressStreet1;
}
public String getBillingAddressStreet2() {
return BillingAddressStreet2;
}
public void setBillingAddressStreet2(String billingAddressStreet2) {
BillingAddressStreet2 = billingAddressStreet2;
}
public String getBillingAddressCity() {
return BillingAddressCity;
}
public void setBillingAddressCity(String billingAddressCity) {
BillingAddressCity = billingAddressCity;
}
public String getBillingAddressState() {
return BillingAddressState;
}
public void setBillingAddressState(String billingAddressState) {
BillingAddressState = billingAddressState;
}
public String getBillingAddressCountry() {
return BillingAddressCountry;
}
public void setBillingAddressCountry(String billingAddressCountry) {
BillingAddressCountry = billingAddressCountry;
}
public String getBillingAddressZipcode() {
return BillingAddressZipcode;
}
public void setBillingAddressZipcode(String billingAddressZipcode) {
BillingAddressZipcode = billingAddressZipcode;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/Book.java
================================================
package com.eCommerce.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Transient;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String title;
private String author;
private String publisher;
private String publicationDate;
private String language;
private String category;
private int numberOfPages;
private String format;
private int isbn;
private double shippingWeight;
private double listPrice;
private double ourPrice;
private boolean active=true;
@Column(columnDefinition="text")
private String description;
private int inStockNumber;
@Transient
private MultipartFile bookImage;
@OneToMany(mappedBy = "book")
@JsonIgnore
private List<BookToCartItem> bookToCartItemList;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public String getPublicationDate() {
return publicationDate;
}
public void setPublicationDate(String publicationDate) {
this.publicationDate = publicationDate;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public int getNumberOfPages() {
return numberOfPages;
}
public void setNumberOfPages(int numberOfPages) {
this.numberOfPages = numberOfPages;
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
public int getIsbn() {
return isbn;
}
public void setIsbn(int isbn) {
this.isbn = isbn;
}
public double getShippingWeight() {
return shippingWeight;
}
public void setShippingWeight(double shippingWeight) {
this.shippingWeight = shippingWeight;
}
public double getListPrice() {
return listPrice;
}
public void setListPrice(double listPrice) {
this.listPrice = listPrice;
}
public double getOurPrice() {
return ourPrice;
}
public void setOurPrice(double ourPrice) {
this.ourPrice = ourPrice;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getInStockNumber() {
return inStockNumber;
}
public void setInStockNumber(int inStockNumber) {
this.inStockNumber = inStockNumber;
}
public MultipartFile getBookImage() {
return bookImage;
}
public void setBookImage(MultipartFile bookImage) {
this.bookImage = bookImage;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/BookToCartItem.java
================================================
package com.eCommerce.domain;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
@Entity
public class BookToCartItem {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne
@JoinColumn(name="book_id")
private Book book;
@ManyToOne
@JoinColumn(name="cart_item_id")
private CartItem cartItem;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public CartItem getCartItem() {
return cartItem;
}
public void setCartItem(CartItem cartItem) {
this.cartItem = cartItem;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/CartItem.java
================================================
package com.eCommerce.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
import java.math.BigDecimal;
import java.util.List;
@Entity
public class CartItem {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private int qty;
private BigDecimal subtotal;
@OneToOne
private Book book;
@OneToMany(mappedBy = "cartItem")
@JsonIgnore
private List<BookToCartItem> bookToCartItemList;
@ManyToOne
@JoinColumn(name="shopping_cart_id")
private ShoppingCart shoppingCart;
@ManyToOne
@JoinColumn(name="order_id")
private Order order;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public int getQty() {
return qty;
}
public void setQty(int qty) {
this.qty = qty;
}
public BigDecimal getSubtotal() {
return subtotal;
}
public void setSubtotal(BigDecimal subtotal) {
this.subtotal = subtotal;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public List<BookToCartItem> getBookToCartItemList() {
return bookToCartItemList;
}
public void setBookToCartItemList(List<BookToCartItem> bookToCartItemList) {
this.bookToCartItemList = bookToCartItemList;
}
public ShoppingCart getShoppingCart() {
return shoppingCart;
}
public void setShoppingCart(ShoppingCart shoppingCart) {
this.shoppingCart = shoppingCart;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/Order.java
================================================
package com.eCommerce.domain;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Entity
@Table(name="user_order")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Date orderDate;
private Date shippingDate;
private String shippingMethod;
private String orderStatus;
private BigDecimal orderTotal;
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<CartItem> cartItemList;
@OneToOne(cascade=CascadeType.ALL)
private ShippingAddress shippingAddress;
@OneToOne(cascade=CascadeType.ALL)
private BillingAddress billingAddress;
@OneToOne(cascade=CascadeType.ALL)
private Payment payment;
@ManyToOne
private User user;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Date getOrderDate() {
return orderDate;
}
public void setOrderDate(Date orderDate) {
this.orderDate = orderDate;
}
public Date getShippingDate() {
return shippingDate;
}
public void setShippingDate(Date shippingDate) {
this.shippingDate = shippingDate;
}
public String getShippingMethod() {
return shippingMethod;
}
public void setShippingMethod(String shippingMethod) {
this.shippingMethod = shippingMethod;
}
public String getOrderStatus() {
return orderStatus;
}
public void setOrderStatus(String orderStatus) {
this.orderStatus = orderStatus;
}
public BigDecimal getOrderTotal() {
return orderTotal;
}
public void setOrderTotal(BigDecimal orderTotal) {
this.orderTotal = orderTotal;
}
public List<CartItem> getCartItemList() {
return cartItemList;
}
public void setCartItemList(List<CartItem> cartItemList) {
this.cartItemList = cartItemList;
}
public ShippingAddress getShippingAddress() {
return shippingAddress;
}
public void setShippingAddress(ShippingAddress shippingAddress) {
this.shippingAddress = shippingAddress;
}
public Payment getPayment() {
return payment;
}
public void setPayment(Payment payment) {
this.payment = payment;
}
public BillingAddress getBillingAddress() {
return billingAddress;
}
public void setBillingAddress(BillingAddress billingAddress) {
this.billingAddress = billingAddress;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/Payment.java
================================================
package com.eCommerce.domain;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToOne;
@Entity
public class Payment {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String type;
private String cardName;
private String cardNumber;
private int expiryMonth;
private int expiryYear;
private int cvc;
private String holderName;
@OneToOne
private Order order;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "userPayment")
private UserBilling userBilling;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getCardName() {
return cardName;
}
public void setCardName(String cardName) {
this.cardName = cardName;
}
public String getCardNumber() {
return cardNumber;
}
public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
}
public int getExpiryMonth() {
return expiryMonth;
}
public void setExpiryMonth(int expiryMonth) {
this.expiryMonth = expiryMonth;
}
public int getExpiryYear() {
return expiryYear;
}
public void setExpiryYear(int expiryYear) {
this.expiryYear = expiryYear;
}
public int getCvc() {
return cvc;
}
public void setCvc(int cvc) {
this.cvc = cvc;
}
public String getHolderName() {
return holderName;
}
public void setHolderName(String holderName) {
this.holderName = holderName;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
public UserBilling getUserBilling() {
return userBilling;
}
public void setUserBilling(UserBilling userBilling) {
this.userBilling = userBilling;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/ShippingAddress.java
================================================
package com.eCommerce.domain;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToOne;
@Entity
public class ShippingAddress {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String ShippingAddressName;
private String ShippingAddressStreet1;
private String ShippingAddressStreet2;
private String ShippingAddressCity;
private String ShippingAddressState;
private String ShippingAddressCountry;
private String ShippingAddressZipcode;
@OneToOne
private Order order;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getShippingAddressName() {
return ShippingAddressName;
}
public void setShippingAddressName(String shippingAddressName) {
ShippingAddressName = shippingAddressName;
}
public String getShippingAddressStreet1() {
return ShippingAddressStreet1;
}
public void setShippingAddressStreet1(String shippingAddressStreet1) {
ShippingAddressStreet1 = shippingAddressStreet1;
}
public String getShippingAddressStreet2() {
return ShippingAddressStreet2;
}
public void setShippingAddressStreet2(String shippingAddressStreet2) {
ShippingAddressStreet2 = shippingAddressStreet2;
}
public String getShippingAddressCity() {
return ShippingAddressCity;
}
public void setShippingAddressCity(String shippingAddressCity) {
ShippingAddressCity = shippingAddressCity;
}
public String getShippingAddressState() {
return ShippingAddressState;
}
public void setShippingAddressState(String shippingAddressState) {
ShippingAddressState = shippingAddressState;
}
public String getShippingAddressCountry() {
return ShippingAddressCountry;
}
public void setShippingAddressCountry(String shippingAddressCountry) {
ShippingAddressCountry = shippingAddressCountry;
}
public String getShippingAddressZipcode() {
return ShippingAddressZipcode;
}
public void setShippingAddressZipcode(String shippingAddressZipcode) {
ShippingAddressZipcode = shippingAddressZipcode;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/ShoppingCart.java
================================================
package com.eCommerce.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
import java.math.BigDecimal;
import java.util.List;
@Entity
public class ShoppingCart {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private BigDecimal GrandTotal;
@OneToMany(mappedBy = "shoppingCart", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JsonIgnore
private List<CartItem> cartItemList;
@OneToOne(cascade = CascadeType.ALL)
private User user;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public BigDecimal getGrandTotal() {
return GrandTotal;
}
public void setGrandTotal(BigDecimal grandTotal) {
GrandTotal = grandTotal;
}
public List<CartItem> getCartItemList() {
return cartItemList;
}
public void setCartItemList(List<CartItem> cartItemList) {
this.cartItemList = cartItemList;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/User.java
================================================
package com.eCommerce.domain;
import com.eCommerce.domain.security.Authority;
import com.eCommerce.domain.security.UserRole;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Entity
public class User implements UserDetails{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id", nullable = false, updatable = false)
private Long id;
private String username;
private String password;
private String firstName;
private String lastName;
@Column(name="email", nullable = false, updatable = false)
private String email;
private String phone;
private boolean enabled=true;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
private ShoppingCart shoppingCart;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private List<UserShipping> userShippingList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private List<UserPayment> userPaymentList;
@OneToMany(mappedBy = "user")
private List<Order> orderList;
@OneToMany(mappedBy = "user", cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
@JsonIgnore
private Set<UserRole> userRoles = new HashSet<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public Set<UserRole> getUserRoles() {
return userRoles;
}
public void setUserRoles(Set<UserRole> userRoles) {
this.userRoles = userRoles;
}
public List<UserShipping> getUserShippingList() {
return userShippingList;
}
public void setUserShippingList(List<UserShipping> userShippingList) {
this.userShippingList = userShippingList;
}
public List<UserPayment> getUserPaymentList() {
return userPaymentList;
}
public void setUserPaymentList(List<UserPayment> userPaymentList) {
this.userPaymentList = userPaymentList;
}
public ShoppingCart getShoppingCart() {
return shoppingCart;
}
public void setShoppingCart(ShoppingCart shoppingCart) {
this.shoppingCart = shoppingCart;
}
public List<Order> getOrderList() {
return orderList;
}
public void setOrderList(List<Order> orderList) {
this.orderList = orderList;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Set<GrantedAuthority> authorites = new HashSet<>();
userRoles.forEach(ur -> authorites.add(new Authority(ur.getRole().getName())));
return authorites;
}
@Override
public boolean isAccountNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isAccountNonLocked() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isCredentialsNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isEnabled() {
return enabled;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/UserBilling.java
================================================
package com.eCommerce.domain;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToOne;
@Entity
public class UserBilling {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String userBillingName;
private String userBillingStreet1;
private String userBillingStreet2;
private String userBillingCity;
private String userBillingState;
private String userBillingCountry;
private String userBillingZipcode;
@OneToOne(cascade = CascadeType.ALL)
private UserPayment userPayment;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserBillingName() {
return userBillingName;
}
public void setUserBillingName(String userBillingName) {
this.userBillingName = userBillingName;
}
public String getUserBillingStreet1() {
return userBillingStreet1;
}
public void setUserBillingStreet1(String userBillingStreet1) {
this.userBillingStreet1 = userBillingStreet1;
}
public String getUserBillingStreet2() {
return userBillingStreet2;
}
public void setUserBillingStreet2(String userBillingStreet2) {
this.userBillingStreet2 = userBillingStreet2;
}
public String getUserBillingCity() {
return userBillingCity;
}
public void setUserBillingCity(String userBillingCity) {
this.userBillingCity = userBillingCity;
}
public String getUserBillingState() {
return userBillingState;
}
public void setUserBillingState(String userBillingState) {
this.userBillingState = userBillingState;
}
public String getUserBillingCountry() {
return userBillingCountry;
}
public void setUserBillingCountry(String userBillingCountry) {
this.userBillingCountry = userBillingCountry;
}
public String getUserBillingZipcode() {
return userBillingZipcode;
}
public void setUserBillingZipcode(String userBillingZipcode) {
this.userBillingZipcode = userBillingZipcode;
}
public UserPayment getUserPayment() {
return userPayment;
}
public void setUserPayment(UserPayment userPayment) {
this.userPayment = userPayment;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/UserPayment.java
================================================
package com.eCommerce.domain;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToOne;
@Entity
public class UserPayment {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String type;
private String cardName;
private String cardNumber;
private int expiryMonth;
private int expiryYear;
private int cvc;
private String holderName;
private boolean defaultPayment;
@ManyToOne
@JoinColumn(name="user_id")
private User user;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "userPayment",orphanRemoval = true)
private UserBilling userBilling;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getCardName() {
return cardName;
}
public void setCardName(String cardName) {
this.cardName = cardName;
}
public String getCardNumber() {
return cardNumber;
}
public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
}
public int getExpiryMonth() {
return expiryMonth;
}
public void setExpiryMonth(int expiryMonth) {
this.expiryMonth = expiryMonth;
}
public int getExpiryYear() {
return expiryYear;
}
public void setExpiryYear(int expiryYear) {
this.expiryYear = expiryYear;
}
public int getCvc() {
return cvc;
}
public void setCvc(int cvc) {
this.cvc = cvc;
}
public String getHolderName() {
return holderName;
}
public void setHolderName(String holderName) {
this.holderName = holderName;
}
public boolean isDefaultPayment() {
return defaultPayment;
}
public void setDefaultPayment(boolean defaultPayment) {
this.defaultPayment = defaultPayment;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public UserBilling getUserBilling() {
return userBilling;
}
public void setUserBilling(UserBilling userBilling) {
this.userBilling = userBilling;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/UserShipping.java
================================================
package com.eCommerce.domain;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
@Entity
public class UserShipping {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String userShippingName;
private String userShippingStreet1;
private String userShippingStreet2;
private String userShippingCity;
private String userShippingState;
private String userShippingCountry;
private String userShippingZipcode;
private boolean userShippingDefault;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserShippingName() {
return userShippingName;
}
public void setUserShippingName(String userShippingName) {
this.userShippingName = userShippingName;
}
public String getUserShippingStreet1() {
return userShippingStreet1;
}
public void setUserShippingStreet1(String userShippingStreet1) {
this.userShippingStreet1 = userShippingStreet1;
}
public String getUserShippingStreet2() {
return userShippingStreet2;
}
public void setUserShippingStreet2(String userShippingStreet2) {
this.userShippingStreet2 = userShippingStreet2;
}
public String getUserShippingCity() {
return userShippingCity;
}
public void setUserShippingCity(String userShippingCity) {
this.userShippingCity = userShippingCity;
}
public String getUserShippingState() {
return userShippingState;
}
public void setUserShippingState(String userShippingState) {
this.userShippingState = userShippingState;
}
public String getUserShippingCountry() {
return userShippingCountry;
}
public void setUserShippingCountry(String userShippingCountry) {
this.userShippingCountry = userShippingCountry;
}
public String getUserShippingZipcode() {
return userShippingZipcode;
}
public void setUserShippingZipcode(String userShippingZipcode) {
this.userShippingZipcode = userShippingZipcode;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public boolean isUserShippingDefault() {
return userShippingDefault;
}
public void setUserShippingDefault(boolean userShippingDefault) {
this.userShippingDefault = userShippingDefault;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/security/Authority.java
================================================
package com.eCommerce.domain.security;
import org.springframework.security.core.GrantedAuthority;
public class Authority implements GrantedAuthority{
private final String authority;
public Authority(String authority) {
this.authority = authority;
}
@Override
public String getAuthority() {
return authority;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/security/PasswordResetToken.java
================================================
package com.eCommerce.domain.security;
import com.eCommerce.domain.User;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import java.util.Calendar;
import java.util.Date;
@Entity
public class PasswordResetToken {
private static final int EXPIRATION = 60 * 24;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String token;
@OneToOne(targetEntity = User.class, fetch = FetchType.EAGER)
@JoinColumn(nullable=false, name="user_id")
private User user;
private Date expiryDate;
public PasswordResetToken(){}
public PasswordResetToken(final String token, final User user) {
super ();
this.token = token;
this.user = user;
this.expiryDate = calculateExpiryDate(EXPIRATION);
}
private Date calculateExpiryDate (final int expiryTimeInMinutes) {
final Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(new Date().getTime());
cal.add(Calendar.MINUTE, expiryTimeInMinutes);
return new Date(cal.getTime().getTime());
}
public void updateToken(final String token) {
this.token = token;
this.expiryDate = calculateExpiryDate(EXPIRATION);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Date getExpiryDate() {
return expiryDate;
}
public void setExpiryDate(Date expiryDate) {
this.expiryDate = expiryDate;
}
public static int getExpiration() {
return EXPIRATION;
}
@Override
public String toString() {
return "PasswordResetToken [id=" + id + ", token=" + token + ", user=" + user + ", expiryDate=" + expiryDate
+ "]";
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/security/Role.java
================================================
package com.eCommerce.domain.security;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import java.util.HashSet;
import java.util.Set;
@Entity
public class Role {
@Id
private int roleId;
private String name;
@OneToMany(mappedBy = "role", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<UserRole> userRoles = new HashSet<>();
public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<UserRole> getUserRoles() {
return userRoles;
}
public void setUserRoles(Set<UserRole> userRoles) {
this.userRoles = userRoles;
}
}
================================================
FILE: src/main/java/com/eCommerce/domain/security/UserRole.java
================================================
package com.eCommerce.domain.security;
import com.eCommerce.domain.User;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
@Entity
@Table(name="user_role")
public class UserRole {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long userRoleId;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="user_id")
private User user;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="role_id")
private Role role;
public UserRole(){}
public UserRole(User user, Role role) {
this.user = user;
this.role = role;
}
public Long getUserRoleId() {
return userRoleId;
}
public void setUserRoleId(Long userRoleId) {
this.userRoleId = userRoleId;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
}
================================================
FILE: src/main/java/com/eCommerce/repository/BookRepository.java
================================================
package com.eCommerce.repository;
import java.util.List;
import org.springframework.data.repository.CrudRepository;
import com.eCommerce.domain.Book;
public interface BookRepository extends CrudRepository<Book, Long>{
List<Book> findByCategory(String category);
List<Book> findByTitleContaining(String title);
}
================================================
FILE: src/main/java/com/eCommerce/repository/BookToCartItemRepository.java
================================================
package com.eCommerce.repository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.transaction.annotation.Transactional;
import com.eCommerce.domain.BookToCartItem;
import com.eCommerce.domain.CartItem;
@Transactional
public interface BookToCartItemRepository extends CrudRepository<BookToCartItem, Long> {
void deleteByCartItem(CartItem cartItem);
}
================================================
FILE: src/main/java/com/eCommerce/repository/CartItemRepository.java
================================================
package com.eCommerce.repository;
import java.util.List;
import org.springframework.data.repository.CrudRepository;
import com.eCommerce.domain.CartItem;
import com.eCommerce.domain.Order;
import com.eCommerce.domain.ShoppingCart;
public interface CartItemRepository extends CrudRepository<CartItem, Long>{
List<CartItem> findByShoppingCart(ShoppingCart shoppingCart);
List<CartItem> findByOrder(Order order);
}
================================================
FILE: src/main/java/com/eCommerce/repository/OrderRepository.java
================================================
package com.eCommerce.repository;
import org.springframework.data.repository.CrudRepository;
import com.eCommerce.domain.Order;
public interface OrderRepository extends CrudRepository<Order, Long>{
}
================================================
FILE: src/main/java/com/eCommerce/repository/PasswordResetTokenRepository.java
================================================
package com.eCommerce.repository;
import java.util.Date;
import java.util.stream.Stream;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import com.eCommerce.domain.User;
import com.eCommerce.domain.security.PasswordResetToken;
public interface PasswordResetTokenRepository extends JpaRepository<PasswordResetToken, Long> {
PasswordResetToken findByToken(String token);
PasswordResetToken findByUser(User user);
Stream<PasswordResetToken> findAllByExpiryDateLessThan(Date now);
@Modifying
@Query("delete from PasswordResetToken t where t.expiryDate <= ?1")
void deleteAllExpiredSince(Date now);
}
================================================
FILE: src/main/java/com/eCommerce/repository/RoleRepository.java
================================================
package com.eCommerce.repository;
import org.springframework.data.repository.CrudRepository;
import com.eCommerce.domain.security.Role;
public interface RoleRepository extends CrudRepository<Role, Long> {
Role findByname(String name);
}
================================================
FILE: src/main/java/com/eCommerce/repository/ShoppingCartRepository.java
================================================
package com.eCommerce.repository;
import org.springframework.data.repository.CrudRepository;
import com.eCommerce.domain.ShoppingCart;
public interface ShoppingCartRepository extends CrudRepository<ShoppingCart, Long> {
}
================================================
FILE: src/main/java/com/eCommerce/repository/UserPaymentRepository.java
================================================
package com.eCommerce.repository;
import org.springframework.data.repository.CrudRepository;
import com.eCommerce.domain.UserPayment;
public interface UserPaymentRepository extends CrudRepository<UserPayment, Long>{
}
================================================
FILE: src/main/java/com/eCommerce/repository/UserRepository.java
================================================
package com
gitextract_kryo0iqb/
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ └── maven.yml
├── .gitignore
├── .mvn/
│ └── wrapper/
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── .vscode/
│ └── launch.json
├── README.md
├── adminportal/
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── adminportal/
│ │ │ ├── AdminportalApplication.java
│ │ │ ├── config/
│ │ │ │ └── SecurityConfig.java
│ │ │ ├── controller/
│ │ │ │ ├── BookController.java
│ │ │ │ ├── HomeController.java
│ │ │ │ └── ResourceController.java
│ │ │ ├── domain/
│ │ │ │ ├── Book.java
│ │ │ │ ├── User.java
│ │ │ │ └── security/
│ │ │ │ ├── Authority.java
│ │ │ │ ├── PasswordResetToken.java
│ │ │ │ ├── Role.java
│ │ │ │ └── UserRole.java
│ │ │ ├── repository/
│ │ │ │ ├── BookRepository.java
│ │ │ │ ├── RoleRepository.java
│ │ │ │ └── UserRepository.java
│ │ │ ├── service/
│ │ │ │ ├── BookService.java
│ │ │ │ ├── UserService.java
│ │ │ │ └── impl/
│ │ │ │ ├── BookServiceImpl.java
│ │ │ │ ├── UserSecurityService.java
│ │ │ │ └── UserServiceImpl.java
│ │ │ └── utility/
│ │ │ └── SecurityUtility.java
│ │ └── resources/
│ │ ├── application.properties
│ │ ├── static/
│ │ │ ├── css/
│ │ │ │ ├── non-responsive.css
│ │ │ │ └── style.css
│ │ │ └── fonts/
│ │ │ └── FontAwesome.otf
│ │ └── templates/
│ │ ├── addBook.html
│ │ ├── bookInfo.html
│ │ ├── bookList.html
│ │ ├── common/
│ │ │ └── header.html
│ │ ├── home.html
│ │ ├── login.html
│ │ └── updateBook.html
│ └── test/
│ └── java/
│ └── com/
│ └── adminportal/
│ └── AdminportalApplicationTests.java
├── bin/
│ ├── .gitignore
│ ├── .mvn/
│ │ └── wrapper/
│ │ ├── maven-wrapper.jar
│ │ └── maven-wrapper.properties
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── resources/
│ └── application.properties
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── eCommerce/
│ │ ├── ECommerceApplication.java
│ │ ├── config/
│ │ │ └── SecurityConfig.java
│ │ ├── controller/
│ │ │ ├── CheckoutController.java
│ │ │ ├── HomeController.java
│ │ │ ├── SearchController.java
│ │ │ └── ShoppingCartController.java
│ │ ├── domain/
│ │ │ ├── BillingAddress.java
│ │ │ ├── Book.java
│ │ │ ├── BookToCartItem.java
│ │ │ ├── CartItem.java
│ │ │ ├── Order.java
│ │ │ ├── Payment.java
│ │ │ ├── ShippingAddress.java
│ │ │ ├── ShoppingCart.java
│ │ │ ├── User.java
│ │ │ ├── UserBilling.java
│ │ │ ├── UserPayment.java
│ │ │ ├── UserShipping.java
│ │ │ └── security/
│ │ │ ├── Authority.java
│ │ │ ├── PasswordResetToken.java
│ │ │ ├── Role.java
│ │ │ └── UserRole.java
│ │ ├── repository/
│ │ │ ├── BookRepository.java
│ │ │ ├── BookToCartItemRepository.java
│ │ │ ├── CartItemRepository.java
│ │ │ ├── OrderRepository.java
│ │ │ ├── PasswordResetTokenRepository.java
│ │ │ ├── RoleRepository.java
│ │ │ ├── ShoppingCartRepository.java
│ │ │ ├── UserPaymentRepository.java
│ │ │ ├── UserRepository.java
│ │ │ └── UserShippingRepository.java
│ │ ├── service/
│ │ │ ├── BillingAddressService.java
│ │ │ ├── BookService.java
│ │ │ ├── CartItemService.java
│ │ │ ├── OrderService.java
│ │ │ ├── PaymentService.java
│ │ │ ├── ShippingAddressService.java
│ │ │ ├── ShoppingCartService.java
│ │ │ ├── UserPaymentService.java
│ │ │ ├── UserService.java
│ │ │ ├── UserShippingService.java
│ │ │ └── impl/
│ │ │ ├── BillingAddressServiceImpl.java
│ │ │ ├── BookServiceImpl.java
│ │ │ ├── CartItemServiceImpl.java
│ │ │ ├── OrderServiceImpl.java
│ │ │ ├── PaymentServiceImpl.java
│ │ │ ├── ShippingAddressServiceImpl.java
│ │ │ ├── ShoppingCartServiceImpl.java
│ │ │ ├── UserPaymentServiceImpl.java
│ │ │ ├── UserSecurityService.java
│ │ │ ├── UserServiceImpl.java
│ │ │ └── UserShippingServiceImpl.java
│ │ └── utility/
│ │ ├── MailConstructor.java
│ │ ├── SecurityUtility.java
│ │ └── USConstants.java
│ └── resources/
│ ├── application.properties
│ ├── messages.properties
│ ├── static/
│ │ ├── css/
│ │ │ ├── jquery.dataTables_themeroller.css
│ │ │ ├── non-responsive.css
│ │ │ └── style.css
│ │ ├── fonts/
│ │ │ └── FontAwesome.otf
│ │ └── js/
│ │ └── scripts.js
│ └── templates/
│ ├── badRequestPage.html
│ ├── bookDetail.html
│ ├── bookshelf.html
│ ├── checkout.html
│ ├── common/
│ │ └── header.html
│ ├── faq.html
│ ├── index.html
│ ├── myAccount.html
│ ├── myProfile.html
│ ├── orderConfirmationEmailTemplate.html
│ ├── orderSubmittedPage.html
│ └── shoppingCart.html
└── test/
└── java/
└── com/
└── eCommerce/
└── ECommerceApplicationTests.java
SYMBOL INDEX (579 symbols across 79 files)
FILE: adminportal/src/main/java/com/adminportal/AdminportalApplication.java
class AdminportalApplication (line 17) | @SpringBootApplication
method main (line 23) | public static void main(String[] args) {
method run (line 27) | @Override
FILE: adminportal/src/main/java/com/adminportal/config/SecurityConfig.java
class SecurityConfig (line 18) | @Configuration
method passwordEncoder (line 28) | private BCryptPasswordEncoder passwordEncoder() {
method configure (line 42) | @Override
method configureGlobal (line 62) | @Autowired
FILE: adminportal/src/main/java/com/adminportal/controller/BookController.java
class BookController (line 24) | @Controller
method addBook (line 31) | @RequestMapping(value = "/add", method = RequestMethod.GET)
method addBookPost (line 38) | @RequestMapping(value = "/add", method = RequestMethod.POST)
method bookInfo (line 58) | @RequestMapping("/bookInfo")
method updateBook (line 67) | @RequestMapping("/updateBook")
method updateBookPost (line 76) | @RequestMapping(value="/updateBook", method=RequestMethod.POST)
method bookList (line 101) | @RequestMapping("/bookList")
method remove (line 109) | @RequestMapping(value="/remove", method=RequestMethod.POST)
FILE: adminportal/src/main/java/com/adminportal/controller/HomeController.java
class HomeController (line 6) | @Controller
method index (line 9) | @RequestMapping("/")
method home (line 14) | @RequestMapping("/home")
method login (line 19) | @RequestMapping("/login")
FILE: adminportal/src/main/java/com/adminportal/controller/ResourceController.java
class ResourceController (line 14) | @RestController
method removeList (line 20) | @RequestMapping(value="/book/removeList", method=RequestMethod.POST)
FILE: adminportal/src/main/java/com/adminportal/domain/Book.java
class Book (line 17) | @Entity
method getId (line 49) | public Long getId() {
method setId (line 53) | public void setId(Long id) {
method getTitle (line 57) | public String getTitle() {
method setTitle (line 61) | public void setTitle(String title) {
method getAuthor (line 65) | public String getAuthor() {
method setAuthor (line 69) | public void setAuthor(String author) {
method getPublisher (line 73) | public String getPublisher() {
method setPublisher (line 77) | public void setPublisher(String publisher) {
method getPublicationDate (line 81) | public String getPublicationDate() {
method setPublicationDate (line 85) | public void setPublicationDate(String publicationDate) {
method getLanguage (line 89) | public String getLanguage() {
method setLanguage (line 93) | public void setLanguage(String language) {
method getCategory (line 97) | public String getCategory() {
method setCategory (line 101) | public void setCategory(String category) {
method getNumberOfPages (line 105) | public int getNumberOfPages() {
method setNumberOfPages (line 109) | public void setNumberOfPages(int numberOfPages) {
method getFormat (line 113) | public String getFormat() {
method setFormat (line 117) | public void setFormat(String format) {
method getIsbn (line 121) | public int getIsbn() {
method setIsbn (line 125) | public void setIsbn(int isbn) {
method getShippingWeight (line 129) | public double getShippingWeight() {
method setShippingWeight (line 133) | public void setShippingWeight(double shippingWeight) {
method getListPrice (line 137) | public double getListPrice() {
method setListPrice (line 141) | public void setListPrice(double listPrice) {
method getOurPrice (line 145) | public double getOurPrice() {
method setOurPrice (line 149) | public void setOurPrice(double ourPrice) {
method isActive (line 153) | public boolean isActive() {
method setActive (line 157) | public void setActive(boolean active) {
method getDescription (line 161) | public String getDescription() {
method setDescription (line 165) | public void setDescription(String description) {
method getInStockNumber (line 169) | public int getInStockNumber() {
method setInStockNumber (line 173) | public void setInStockNumber(int inStockNumber) {
method getBookImage (line 177) | public MultipartFile getBookImage() {
method setBookImage (line 181) | public void setBookImage(MultipartFile bookImage) {
FILE: adminportal/src/main/java/com/adminportal/domain/User.java
class User (line 23) | @Entity
method getId (line 44) | public Long getId() {
method setId (line 47) | public void setId(Long id) {
method getUsername (line 50) | public String getUsername() {
method setUsername (line 53) | public void setUsername(String username) {
method getPassword (line 56) | public String getPassword() {
method setPassword (line 59) | public void setPassword(String password) {
method getFirstName (line 62) | public String getFirstName() {
method setFirstName (line 65) | public void setFirstName(String firstName) {
method getLastName (line 68) | public String getLastName() {
method setLastName (line 71) | public void setLastName(String lastName) {
method getEmail (line 74) | public String getEmail() {
method setEmail (line 77) | public void setEmail(String email) {
method getPhone (line 80) | public String getPhone() {
method setPhone (line 83) | public void setPhone(String phone) {
method setEnabled (line 87) | public void setEnabled(boolean enabled) {
method getUserRoles (line 90) | public Set<UserRole> getUserRoles() {
method setUserRoles (line 93) | public void setUserRoles(Set<UserRole> userRoles) {
method getAuthorities (line 96) | @Override
method isAccountNonExpired (line 103) | @Override
method isAccountNonLocked (line 108) | @Override
method isCredentialsNonExpired (line 113) | @Override
method isEnabled (line 119) | @Override
FILE: adminportal/src/main/java/com/adminportal/domain/security/Authority.java
class Authority (line 5) | public class Authority implements GrantedAuthority{
method Authority (line 8) | public Authority(String authority) {
method getAuthority (line 12) | @Override
FILE: adminportal/src/main/java/com/adminportal/domain/security/PasswordResetToken.java
class PasswordResetToken (line 16) | @Entity
method PasswordResetToken (line 33) | public PasswordResetToken(){}
method PasswordResetToken (line 35) | public PasswordResetToken(final String token, final User user) {
method calculateExpiryDate (line 43) | private Date calculateExpiryDate (final int expiryTimeInMinutes) {
method updateToken (line 50) | public void updateToken(final String token) {
method getId (line 55) | public Long getId() {
method setId (line 59) | public void setId(Long id) {
method getToken (line 63) | public String getToken() {
method setToken (line 67) | public void setToken(String token) {
method getUser (line 71) | public User getUser() {
method setUser (line 75) | public void setUser(User user) {
method getExpiryDate (line 79) | public Date getExpiryDate() {
method setExpiryDate (line 83) | public void setExpiryDate(Date expiryDate) {
method getExpiration (line 87) | public static int getExpiration() {
method toString (line 91) | @Override
FILE: adminportal/src/main/java/com/adminportal/domain/security/Role.java
class Role (line 12) | @Entity
method getRoleId (line 22) | public int getRoleId() {
method setRoleId (line 26) | public void setRoleId(int roleId) {
method getName (line 30) | public String getName() {
method setName (line 34) | public void setName(String name) {
method getUserRoles (line 38) | public Set<UserRole> getUserRoles() {
method setUserRoles (line 42) | public void setUserRoles(Set<UserRole> userRoles) {
FILE: adminportal/src/main/java/com/adminportal/domain/security/UserRole.java
class UserRole (line 14) | @Entity
method UserRole (line 30) | public UserRole(){}
method UserRole (line 32) | public UserRole(User user, Role role) {
method getUserRoleId (line 38) | public Long getUserRoleId() {
method setUserRoleId (line 43) | public void setUserRoleId(Long userRoleId) {
method getUser (line 48) | public User getUser() {
method setUser (line 53) | public void setUser(User user) {
method getRole (line 58) | public Role getRole() {
method setRole (line 63) | public void setRole(Role role) {
FILE: adminportal/src/main/java/com/adminportal/repository/BookRepository.java
type BookRepository (line 7) | public interface BookRepository extends CrudRepository<Book, Long>{
FILE: adminportal/src/main/java/com/adminportal/repository/RoleRepository.java
type RoleRepository (line 8) | public interface RoleRepository extends CrudRepository<Role, Long> {
method findByname (line 9) | Role findByname(String name);
FILE: adminportal/src/main/java/com/adminportal/repository/UserRepository.java
type UserRepository (line 7) | public interface UserRepository extends CrudRepository<User, Long> {
method findByUsername (line 8) | User findByUsername(String username);
FILE: adminportal/src/main/java/com/adminportal/service/BookService.java
type BookService (line 7) | public interface BookService {
method save (line 9) | Book save(Book book);
method findAll (line 11) | List<Book> findAll();
method findById (line 13) | Book findById(Long id);
FILE: adminportal/src/main/java/com/adminportal/service/UserService.java
type UserService (line 8) | public interface UserService {
method createUser (line 9) | User createUser(User user, Set<UserRole> userRoles) throws Exception;
method save (line 11) | User save(User user);
FILE: adminportal/src/main/java/com/adminportal/service/impl/BookServiceImpl.java
class BookServiceImpl (line 12) | @Service
method save (line 18) | public Book save(Book book) {
method findAll (line 22) | public List<Book> findAll() {
method findById (line 26) | public Book findById(Long id) {
FILE: adminportal/src/main/java/com/adminportal/service/impl/UserSecurityService.java
class UserSecurityService (line 12) | @Service
method loadUserByUsername (line 18) | @Override
FILE: adminportal/src/main/java/com/adminportal/service/impl/UserServiceImpl.java
class UserServiceImpl (line 16) | @Service
method createUser (line 27) | @Override
method save (line 46) | @Override
FILE: adminportal/src/main/java/com/adminportal/utility/SecurityUtility.java
class SecurityUtility (line 10) | @Component
method passwordEncoder (line 14) | @Bean
method randomPassword (line 19) | @Bean
FILE: adminportal/src/test/java/com/adminportal/AdminportalApplicationTests.java
class AdminportalApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: src/main/java/com/eCommerce/ECommerceApplication.java
class ECommerceApplication (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: src/main/java/com/eCommerce/config/SecurityConfig.java
class SecurityConfig (line 19) | @Configuration
method passwordEncoder (line 29) | private BCryptPasswordEncoder passwordEncoder() {
method configure (line 49) | @Bean
method configureGlobal (line 69) | @Autowired
FILE: src/main/java/com/eCommerce/controller/CheckoutController.java
class CheckoutController (line 41) | @Controller
method checkout (line 81) | @RequestMapping("/checkout")
method checkoutPost (line 160) | @RequestMapping(value = "/checkout", method = RequestMethod.POST)
method setShippingAddress (line 212) | @RequestMapping("/setShippingAddress")
method setPaymentMethod (line 262) | @RequestMapping("/setPaymentMethod")
FILE: src/main/java/com/eCommerce/controller/HomeController.java
class HomeController (line 50) | @Controller
method index (line 80) | @GetMapping("/")
method login (line 85) | @GetMapping("/login")
method faq (line 91) | @GetMapping("/faq")
method bookshelf (line 96) | @GetMapping("/bookshelf")
method bookDetail (line 112) | @GetMapping("/bookDetail")
method forgetPassword (line 134) | @GetMapping("/forgetPassword")
method myProfile (line 172) | @GetMapping("/myProfile")
method listOfCreditCards (line 194) | @GetMapping("/listOfCreditCards")
method listOfShippingAddresses (line 211) | @GetMapping("/listOfShippingAddresses")
method addNewCreditCard (line 228) | @GetMapping("/addNewCreditCard")
method addNewShippingAddress (line 256) | @GetMapping("/addNewShippingAddress")
method addNewCreditCard (line 281) | @PostMapping(value = "/addNewCreditCard")
method addNewShippingAddressPost (line 301) | @PostMapping(value = "/addNewShippingAddress")
method updateCreditCard (line 321) | @GetMapping("/updateCreditCard")
method updateUserShipping (line 352) | @GetMapping("/updateUserShipping")
method setDefaultPayment (line 382) | @PostMapping(value = "/setDefaultPayment")
method setDefaultShippingAddress (line 401) | @PostMapping(value = "/setDefaultShippingAddress")
method removeCreditCard (line 420) | @GetMapping("/removeCreditCard")
method removeUserShipping (line 445) | @GetMapping("/removeUserShipping")
method newUserPost (line 470) | @PostMapping(value = "/newUser")
method newUser (line 525) | @GetMapping("/newUser")
method updateUserInfo (line 552) | @PostMapping(value = "/updateUserInfo")
method orderDetail (line 615) | @GetMapping("/orderDetail")
FILE: src/main/java/com/eCommerce/controller/SearchController.java
class SearchController (line 19) | @Controller
method searchByCategory (line 27) | @RequestMapping("/searchByCategory")
method searchBook (line 55) | @RequestMapping("/searchBook")
FILE: src/main/java/com/eCommerce/controller/ShoppingCartController.java
class ShoppingCartController (line 23) | @Controller
method shoppingCart (line 39) | @RequestMapping("/cart")
method addItem (line 54) | @RequestMapping("/addItem")
method updateShoppingCart (line 74) | @RequestMapping("/updateCartItem")
method removeItem (line 86) | @RequestMapping("/removeItem")
FILE: src/main/java/com/eCommerce/domain/BillingAddress.java
class BillingAddress (line 9) | @Entity
method getId (line 26) | public Long getId() {
method setId (line 30) | public void setId(Long id) {
method getBillingAddressName (line 34) | public String getBillingAddressName() {
method setBillingAddressName (line 38) | public void setBillingAddressName(String billingAddressName) {
method getBillingAddressStreet1 (line 42) | public String getBillingAddressStreet1() {
method setBillingAddressStreet1 (line 46) | public void setBillingAddressStreet1(String billingAddressStreet1) {
method getBillingAddressStreet2 (line 50) | public String getBillingAddressStreet2() {
method setBillingAddressStreet2 (line 54) | public void setBillingAddressStreet2(String billingAddressStreet2) {
method getBillingAddressCity (line 58) | public String getBillingAddressCity() {
method setBillingAddressCity (line 62) | public void setBillingAddressCity(String billingAddressCity) {
method getBillingAddressState (line 66) | public String getBillingAddressState() {
method setBillingAddressState (line 70) | public void setBillingAddressState(String billingAddressState) {
method getBillingAddressCountry (line 74) | public String getBillingAddressCountry() {
method setBillingAddressCountry (line 78) | public void setBillingAddressCountry(String billingAddressCountry) {
method getBillingAddressZipcode (line 82) | public String getBillingAddressZipcode() {
method setBillingAddressZipcode (line 86) | public void setBillingAddressZipcode(String billingAddressZipcode) {
method getOrder (line 90) | public Order getOrder() {
method setOrder (line 94) | public void setOrder(Order order) {
FILE: src/main/java/com/eCommerce/domain/Book.java
class Book (line 15) | @Entity
method getId (line 47) | public Long getId() {
method setId (line 51) | public void setId(Long id) {
method getTitle (line 55) | public String getTitle() {
method setTitle (line 59) | public void setTitle(String title) {
method getAuthor (line 63) | public String getAuthor() {
method setAuthor (line 67) | public void setAuthor(String author) {
method getPublisher (line 71) | public String getPublisher() {
method setPublisher (line 75) | public void setPublisher(String publisher) {
method getPublicationDate (line 79) | public String getPublicationDate() {
method setPublicationDate (line 83) | public void setPublicationDate(String publicationDate) {
method getLanguage (line 87) | public String getLanguage() {
method setLanguage (line 91) | public void setLanguage(String language) {
method getCategory (line 95) | public String getCategory() {
method setCategory (line 99) | public void setCategory(String category) {
method getNumberOfPages (line 103) | public int getNumberOfPages() {
method setNumberOfPages (line 107) | public void setNumberOfPages(int numberOfPages) {
method getFormat (line 111) | public String getFormat() {
method setFormat (line 115) | public void setFormat(String format) {
method getIsbn (line 119) | public int getIsbn() {
method setIsbn (line 123) | public void setIsbn(int isbn) {
method getShippingWeight (line 127) | public double getShippingWeight() {
method setShippingWeight (line 131) | public void setShippingWeight(double shippingWeight) {
method getListPrice (line 135) | public double getListPrice() {
method setListPrice (line 139) | public void setListPrice(double listPrice) {
method getOurPrice (line 143) | public double getOurPrice() {
method setOurPrice (line 147) | public void setOurPrice(double ourPrice) {
method isActive (line 151) | public boolean isActive() {
method setActive (line 155) | public void setActive(boolean active) {
method getDescription (line 159) | public String getDescription() {
method setDescription (line 163) | public void setDescription(String description) {
method getInStockNumber (line 167) | public int getInStockNumber() {
method setInStockNumber (line 171) | public void setInStockNumber(int inStockNumber) {
method getBookImage (line 175) | public MultipartFile getBookImage() {
method setBookImage (line 179) | public void setBookImage(MultipartFile bookImage) {
FILE: src/main/java/com/eCommerce/domain/BookToCartItem.java
class BookToCartItem (line 10) | @Entity
method getId (line 25) | public Long getId() {
method setId (line 29) | public void setId(Long id) {
method getBook (line 33) | public Book getBook() {
method setBook (line 37) | public void setBook(Book book) {
method getCartItem (line 41) | public CartItem getCartItem() {
method setCartItem (line 45) | public void setCartItem(CartItem cartItem) {
FILE: src/main/java/com/eCommerce/domain/CartItem.java
class CartItem (line 16) | @Entity
method getId (line 40) | public Long getId() {
method setId (line 44) | public void setId(Long id) {
method getQty (line 48) | public int getQty() {
method setQty (line 52) | public void setQty(int qty) {
method getSubtotal (line 56) | public BigDecimal getSubtotal() {
method setSubtotal (line 60) | public void setSubtotal(BigDecimal subtotal) {
method getBook (line 64) | public Book getBook() {
method setBook (line 68) | public void setBook(Book book) {
method getBookToCartItemList (line 72) | public List<BookToCartItem> getBookToCartItemList() {
method setBookToCartItemList (line 76) | public void setBookToCartItemList(List<BookToCartItem> bookToCartItemL...
method getShoppingCart (line 80) | public ShoppingCart getShoppingCart() {
method setShoppingCart (line 84) | public void setShoppingCart(ShoppingCart shoppingCart) {
method getOrder (line 88) | public Order getOrder() {
method setOrder (line 92) | public void setOrder(Order order) {
FILE: src/main/java/com/eCommerce/domain/Order.java
class Order (line 18) | @Entity
method getId (line 46) | public Long getId() {
method setId (line 50) | public void setId(Long id) {
method getOrderDate (line 54) | public Date getOrderDate() {
method setOrderDate (line 58) | public void setOrderDate(Date orderDate) {
method getShippingDate (line 62) | public Date getShippingDate() {
method setShippingDate (line 66) | public void setShippingDate(Date shippingDate) {
method getShippingMethod (line 70) | public String getShippingMethod() {
method setShippingMethod (line 74) | public void setShippingMethod(String shippingMethod) {
method getOrderStatus (line 78) | public String getOrderStatus() {
method setOrderStatus (line 82) | public void setOrderStatus(String orderStatus) {
method getOrderTotal (line 86) | public BigDecimal getOrderTotal() {
method setOrderTotal (line 90) | public void setOrderTotal(BigDecimal orderTotal) {
method getCartItemList (line 94) | public List<CartItem> getCartItemList() {
method setCartItemList (line 98) | public void setCartItemList(List<CartItem> cartItemList) {
method getShippingAddress (line 102) | public ShippingAddress getShippingAddress() {
method setShippingAddress (line 106) | public void setShippingAddress(ShippingAddress shippingAddress) {
method getPayment (line 110) | public Payment getPayment() {
method setPayment (line 114) | public void setPayment(Payment payment) {
method getBillingAddress (line 118) | public BillingAddress getBillingAddress() {
method setBillingAddress (line 122) | public void setBillingAddress(BillingAddress billingAddress) {
method getUser (line 126) | public User getUser() {
method setUser (line 130) | public void setUser(User user) {
FILE: src/main/java/com/eCommerce/domain/Payment.java
class Payment (line 10) | @Entity
method getId (line 30) | public Long getId() {
method setId (line 34) | public void setId(Long id) {
method getType (line 38) | public String getType() {
method setType (line 42) | public void setType(String type) {
method getCardName (line 46) | public String getCardName() {
method setCardName (line 50) | public void setCardName(String cardName) {
method getCardNumber (line 54) | public String getCardNumber() {
method setCardNumber (line 58) | public void setCardNumber(String cardNumber) {
method getExpiryMonth (line 62) | public int getExpiryMonth() {
method setExpiryMonth (line 66) | public void setExpiryMonth(int expiryMonth) {
method getExpiryYear (line 70) | public int getExpiryYear() {
method setExpiryYear (line 74) | public void setExpiryYear(int expiryYear) {
method getCvc (line 78) | public int getCvc() {
method setCvc (line 82) | public void setCvc(int cvc) {
method getHolderName (line 86) | public String getHolderName() {
method setHolderName (line 90) | public void setHolderName(String holderName) {
method getOrder (line 94) | public Order getOrder() {
method setOrder (line 98) | public void setOrder(Order order) {
method getUserBilling (line 102) | public UserBilling getUserBilling() {
method setUserBilling (line 106) | public void setUserBilling(UserBilling userBilling) {
FILE: src/main/java/com/eCommerce/domain/ShippingAddress.java
class ShippingAddress (line 9) | @Entity
method getId (line 25) | public Long getId() {
method setId (line 30) | public void setId(Long id) {
method getShippingAddressName (line 35) | public String getShippingAddressName() {
method setShippingAddressName (line 40) | public void setShippingAddressName(String shippingAddressName) {
method getShippingAddressStreet1 (line 45) | public String getShippingAddressStreet1() {
method setShippingAddressStreet1 (line 50) | public void setShippingAddressStreet1(String shippingAddressStreet1) {
method getShippingAddressStreet2 (line 55) | public String getShippingAddressStreet2() {
method setShippingAddressStreet2 (line 60) | public void setShippingAddressStreet2(String shippingAddressStreet2) {
method getShippingAddressCity (line 65) | public String getShippingAddressCity() {
method setShippingAddressCity (line 70) | public void setShippingAddressCity(String shippingAddressCity) {
method getShippingAddressState (line 75) | public String getShippingAddressState() {
method setShippingAddressState (line 80) | public void setShippingAddressState(String shippingAddressState) {
method getShippingAddressCountry (line 85) | public String getShippingAddressCountry() {
method setShippingAddressCountry (line 90) | public void setShippingAddressCountry(String shippingAddressCountry) {
method getShippingAddressZipcode (line 95) | public String getShippingAddressZipcode() {
method setShippingAddressZipcode (line 100) | public void setShippingAddressZipcode(String shippingAddressZipcode) {
method getOrder (line 105) | public Order getOrder() {
method setOrder (line 110) | public void setOrder(Order order) {
FILE: src/main/java/com/eCommerce/domain/ShoppingCart.java
class ShoppingCart (line 16) | @Entity
method getId (line 31) | public Long getId() {
method setId (line 35) | public void setId(Long id) {
method getGrandTotal (line 39) | public BigDecimal getGrandTotal() {
method setGrandTotal (line 43) | public void setGrandTotal(BigDecimal grandTotal) {
method getCartItemList (line 47) | public List<CartItem> getCartItemList() {
method setCartItemList (line 51) | public void setCartItemList(List<CartItem> cartItemList) {
method getUser (line 55) | public User getUser() {
method setUser (line 59) | public void setUser(User user) {
FILE: src/main/java/com/eCommerce/domain/User.java
class User (line 23) | @Entity
method getId (line 56) | public Long getId() {
method setId (line 59) | public void setId(Long id) {
method getUsername (line 62) | public String getUsername() {
method setUsername (line 65) | public void setUsername(String username) {
method getPassword (line 68) | public String getPassword() {
method setPassword (line 71) | public void setPassword(String password) {
method getFirstName (line 74) | public String getFirstName() {
method setFirstName (line 77) | public void setFirstName(String firstName) {
method getLastName (line 80) | public String getLastName() {
method setLastName (line 83) | public void setLastName(String lastName) {
method getEmail (line 86) | public String getEmail() {
method setEmail (line 89) | public void setEmail(String email) {
method getPhone (line 92) | public String getPhone() {
method setPhone (line 95) | public void setPhone(String phone) {
method setEnabled (line 99) | public void setEnabled(boolean enabled) {
method getUserRoles (line 102) | public Set<UserRole> getUserRoles() {
method setUserRoles (line 105) | public void setUserRoles(Set<UserRole> userRoles) {
method getUserShippingList (line 110) | public List<UserShipping> getUserShippingList() {
method setUserShippingList (line 113) | public void setUserShippingList(List<UserShipping> userShippingList) {
method getUserPaymentList (line 116) | public List<UserPayment> getUserPaymentList() {
method setUserPaymentList (line 119) | public void setUserPaymentList(List<UserPayment> userPaymentList) {
method getShoppingCart (line 123) | public ShoppingCart getShoppingCart() {
method setShoppingCart (line 126) | public void setShoppingCart(ShoppingCart shoppingCart) {
method getOrderList (line 130) | public List<Order> getOrderList() {
method setOrderList (line 133) | public void setOrderList(List<Order> orderList) {
method getAuthorities (line 136) | @Override
method isAccountNonExpired (line 143) | @Override
method isAccountNonLocked (line 148) | @Override
method isCredentialsNonExpired (line 153) | @Override
method isEnabled (line 159) | @Override
FILE: src/main/java/com/eCommerce/domain/UserBilling.java
class UserBilling (line 10) | @Entity
method getId (line 27) | public Long getId() {
method setId (line 31) | public void setId(Long id) {
method getUserBillingName (line 35) | public String getUserBillingName() {
method setUserBillingName (line 39) | public void setUserBillingName(String userBillingName) {
method getUserBillingStreet1 (line 43) | public String getUserBillingStreet1() {
method setUserBillingStreet1 (line 47) | public void setUserBillingStreet1(String userBillingStreet1) {
method getUserBillingStreet2 (line 51) | public String getUserBillingStreet2() {
method setUserBillingStreet2 (line 55) | public void setUserBillingStreet2(String userBillingStreet2) {
method getUserBillingCity (line 59) | public String getUserBillingCity() {
method setUserBillingCity (line 63) | public void setUserBillingCity(String userBillingCity) {
method getUserBillingState (line 67) | public String getUserBillingState() {
method setUserBillingState (line 71) | public void setUserBillingState(String userBillingState) {
method getUserBillingCountry (line 75) | public String getUserBillingCountry() {
method setUserBillingCountry (line 79) | public void setUserBillingCountry(String userBillingCountry) {
method getUserBillingZipcode (line 83) | public String getUserBillingZipcode() {
method setUserBillingZipcode (line 87) | public void setUserBillingZipcode(String userBillingZipcode) {
method getUserPayment (line 91) | public UserPayment getUserPayment() {
method setUserPayment (line 95) | public void setUserPayment(UserPayment userPayment) {
FILE: src/main/java/com/eCommerce/domain/UserPayment.java
class UserPayment (line 12) | @Entity
method getId (line 34) | public Long getId() {
method setId (line 38) | public void setId(Long id) {
method getType (line 42) | public String getType() {
method setType (line 46) | public void setType(String type) {
method getCardName (line 50) | public String getCardName() {
method setCardName (line 54) | public void setCardName(String cardName) {
method getCardNumber (line 58) | public String getCardNumber() {
method setCardNumber (line 62) | public void setCardNumber(String cardNumber) {
method getExpiryMonth (line 66) | public int getExpiryMonth() {
method setExpiryMonth (line 70) | public void setExpiryMonth(int expiryMonth) {
method getExpiryYear (line 74) | public int getExpiryYear() {
method setExpiryYear (line 78) | public void setExpiryYear(int expiryYear) {
method getCvc (line 82) | public int getCvc() {
method setCvc (line 86) | public void setCvc(int cvc) {
method getHolderName (line 90) | public String getHolderName() {
method setHolderName (line 94) | public void setHolderName(String holderName) {
method isDefaultPayment (line 98) | public boolean isDefaultPayment() {
method setDefaultPayment (line 102) | public void setDefaultPayment(boolean defaultPayment) {
method getUser (line 106) | public User getUser() {
method setUser (line 110) | public void setUser(User user) {
method getUserBilling (line 114) | public UserBilling getUserBilling() {
method setUserBilling (line 118) | public void setUserBilling(UserBilling userBilling) {
FILE: src/main/java/com/eCommerce/domain/UserShipping.java
class UserShipping (line 10) | @Entity
method getId (line 30) | public Long getId() {
method setId (line 35) | public void setId(Long id) {
method getUserShippingName (line 40) | public String getUserShippingName() {
method setUserShippingName (line 45) | public void setUserShippingName(String userShippingName) {
method getUserShippingStreet1 (line 50) | public String getUserShippingStreet1() {
method setUserShippingStreet1 (line 55) | public void setUserShippingStreet1(String userShippingStreet1) {
method getUserShippingStreet2 (line 60) | public String getUserShippingStreet2() {
method setUserShippingStreet2 (line 65) | public void setUserShippingStreet2(String userShippingStreet2) {
method getUserShippingCity (line 70) | public String getUserShippingCity() {
method setUserShippingCity (line 75) | public void setUserShippingCity(String userShippingCity) {
method getUserShippingState (line 80) | public String getUserShippingState() {
method setUserShippingState (line 85) | public void setUserShippingState(String userShippingState) {
method getUserShippingCountry (line 90) | public String getUserShippingCountry() {
method setUserShippingCountry (line 95) | public void setUserShippingCountry(String userShippingCountry) {
method getUserShippingZipcode (line 100) | public String getUserShippingZipcode() {
method setUserShippingZipcode (line 105) | public void setUserShippingZipcode(String userShippingZipcode) {
method getUser (line 110) | public User getUser() {
method setUser (line 115) | public void setUser(User user) {
method isUserShippingDefault (line 120) | public boolean isUserShippingDefault() {
method setUserShippingDefault (line 125) | public void setUserShippingDefault(boolean userShippingDefault) {
FILE: src/main/java/com/eCommerce/domain/security/Authority.java
class Authority (line 5) | public class Authority implements GrantedAuthority{
method Authority (line 8) | public Authority(String authority) {
method getAuthority (line 12) | @Override
FILE: src/main/java/com/eCommerce/domain/security/PasswordResetToken.java
class PasswordResetToken (line 15) | @Entity
method PasswordResetToken (line 32) | public PasswordResetToken(){}
method PasswordResetToken (line 34) | public PasswordResetToken(final String token, final User user) {
method calculateExpiryDate (line 42) | private Date calculateExpiryDate (final int expiryTimeInMinutes) {
method updateToken (line 49) | public void updateToken(final String token) {
method getId (line 54) | public Long getId() {
method setId (line 58) | public void setId(Long id) {
method getToken (line 62) | public String getToken() {
method setToken (line 66) | public void setToken(String token) {
method getUser (line 70) | public User getUser() {
method setUser (line 74) | public void setUser(User user) {
method getExpiryDate (line 78) | public Date getExpiryDate() {
method setExpiryDate (line 82) | public void setExpiryDate(Date expiryDate) {
method getExpiration (line 86) | public static int getExpiration() {
method toString (line 90) | @Override
FILE: src/main/java/com/eCommerce/domain/security/Role.java
class Role (line 12) | @Entity
method getRoleId (line 22) | public int getRoleId() {
method setRoleId (line 26) | public void setRoleId(int roleId) {
method getName (line 30) | public String getName() {
method setName (line 34) | public void setName(String name) {
method getUserRoles (line 38) | public Set<UserRole> getUserRoles() {
method setUserRoles (line 42) | public void setUserRoles(Set<UserRole> userRoles) {
FILE: src/main/java/com/eCommerce/domain/security/UserRole.java
class UserRole (line 13) | @Entity
method UserRole (line 29) | public UserRole(){}
method UserRole (line 31) | public UserRole(User user, Role role) {
method getUserRoleId (line 37) | public Long getUserRoleId() {
method setUserRoleId (line 42) | public void setUserRoleId(Long userRoleId) {
method getUser (line 47) | public User getUser() {
method setUser (line 52) | public void setUser(User user) {
method getRole (line 57) | public Role getRole() {
method setRole (line 62) | public void setRole(Role role) {
FILE: src/main/java/com/eCommerce/repository/BookRepository.java
type BookRepository (line 10) | public interface BookRepository extends CrudRepository<Book, Long>{
method findByCategory (line 12) | List<Book> findByCategory(String category);
method findByTitleContaining (line 14) | List<Book> findByTitleContaining(String title);
FILE: src/main/java/com/eCommerce/repository/BookToCartItemRepository.java
type BookToCartItemRepository (line 9) | @Transactional
method deleteByCartItem (line 12) | void deleteByCartItem(CartItem cartItem);
FILE: src/main/java/com/eCommerce/repository/CartItemRepository.java
type CartItemRepository (line 12) | public interface CartItemRepository extends CrudRepository<CartItem, Long>{
method findByShoppingCart (line 14) | List<CartItem> findByShoppingCart(ShoppingCart shoppingCart);
method findByOrder (line 16) | List<CartItem> findByOrder(Order order);
FILE: src/main/java/com/eCommerce/repository/OrderRepository.java
type OrderRepository (line 7) | public interface OrderRepository extends CrudRepository<Order, Long>{
FILE: src/main/java/com/eCommerce/repository/PasswordResetTokenRepository.java
type PasswordResetTokenRepository (line 13) | public interface PasswordResetTokenRepository extends JpaRepository<Pass...
method findByToken (line 15) | PasswordResetToken findByToken(String token);
method findByUser (line 17) | PasswordResetToken findByUser(User user);
method findAllByExpiryDateLessThan (line 19) | Stream<PasswordResetToken> findAllByExpiryDateLessThan(Date now);
method deleteAllExpiredSince (line 21) | @Modifying
FILE: src/main/java/com/eCommerce/repository/RoleRepository.java
type RoleRepository (line 7) | public interface RoleRepository extends CrudRepository<Role, Long> {
method findByname (line 8) | Role findByname(String name);
FILE: src/main/java/com/eCommerce/repository/ShoppingCartRepository.java
type ShoppingCartRepository (line 7) | public interface ShoppingCartRepository extends CrudRepository<ShoppingC...
FILE: src/main/java/com/eCommerce/repository/UserPaymentRepository.java
type UserPaymentRepository (line 7) | public interface UserPaymentRepository extends CrudRepository<UserPaymen...
FILE: src/main/java/com/eCommerce/repository/UserRepository.java
type UserRepository (line 7) | public interface UserRepository extends CrudRepository<User, Long> {
method findByUsername (line 8) | User findByUsername(String username);
method findByEmail (line 10) | User findByEmail(String email);
FILE: src/main/java/com/eCommerce/repository/UserShippingRepository.java
type UserShippingRepository (line 7) | public interface UserShippingRepository extends CrudRepository<UserShipp...
FILE: src/main/java/com/eCommerce/service/BillingAddressService.java
type BillingAddressService (line 6) | public interface BillingAddressService {
method setByUserBilling (line 7) | BillingAddress setByUserBilling(UserBilling userBilling, BillingAddres...
FILE: src/main/java/com/eCommerce/service/BookService.java
type BookService (line 8) | public interface BookService {
method findAll (line 9) | List<Book> findAll ();
method findById (line 11) | Book findById(Long id);
method findByCategory (line 13) | List<Book> findByCategory(String category);
method blurrySearch (line 15) | List<Book> blurrySearch(String title);
FILE: src/main/java/com/eCommerce/service/CartItemService.java
type CartItemService (line 11) | public interface CartItemService {
method findByShoppingCart (line 12) | List<CartItem> findByShoppingCart(ShoppingCart shoppingCart);
method updateCartItem (line 14) | CartItem updateCartItem(CartItem cartItem);
method addBookToCartItem (line 16) | CartItem addBookToCartItem(Book book, User user, int qty);
method findById (line 18) | CartItem findById(Long id);
method removeCartItem (line 20) | void removeCartItem(CartItem cartItem);
method save (line 22) | CartItem save(CartItem cartItem);
method findByOrder (line 24) | List<CartItem> findByOrder(Order order);
FILE: src/main/java/com/eCommerce/service/OrderService.java
type OrderService (line 10) | public interface OrderService {
method createOrder (line 11) | Order createOrder(ShoppingCart shoppingCart,
method findById (line 18) | Order findById(Long id);
FILE: src/main/java/com/eCommerce/service/PaymentService.java
type PaymentService (line 6) | public interface PaymentService {
method setByUserPayment (line 7) | Payment setByUserPayment(UserPayment userPayment, Payment payment);
FILE: src/main/java/com/eCommerce/service/ShippingAddressService.java
type ShippingAddressService (line 6) | public interface ShippingAddressService {
method setByUserShipping (line 7) | ShippingAddress setByUserShipping(UserShipping userShipping, ShippingA...
FILE: src/main/java/com/eCommerce/service/ShoppingCartService.java
type ShoppingCartService (line 5) | public interface ShoppingCartService {
method updateShoppingCart (line 6) | ShoppingCart updateShoppingCart(ShoppingCart shoppingCart);
method clearShoppingCart (line 8) | void clearShoppingCart(ShoppingCart shoppingCart);
FILE: src/main/java/com/eCommerce/service/UserPaymentService.java
type UserPaymentService (line 5) | public interface UserPaymentService {
method findById (line 6) | UserPayment findById(Long id);
method deleteById (line 8) | void deleteById(Long id);
FILE: src/main/java/com/eCommerce/service/UserService.java
type UserService (line 14) | public interface UserService {
method getPasswordResetToken (line 15) | PasswordResetToken getPasswordResetToken(final String token);
method createPasswordResetTokenForUser (line 17) | void createPasswordResetTokenForUser(final User user, final String tok...
method findByUsername (line 19) | User findByUsername(String username);
method findByEmail (line 21) | User findByEmail (String email);
method findById (line 23) | User findById(Long id);
method createUser (line 25) | User createUser(User user, Set<UserRole> userRoles) throws Exception;
method save (line 27) | User save(User user);
method updateUserBilling (line 29) | void updateUserBilling(UserBilling userBilling, UserPayment userPaymen...
method updateUserShipping (line 31) | void updateUserShipping(UserShipping userShipping, User user);
method setUserDefaultPayment (line 33) | void setUserDefaultPayment(Long userPaymentId, User user);
method setUserDefaultShipping (line 35) | void setUserDefaultShipping(Long userShippingId, User user);
FILE: src/main/java/com/eCommerce/service/UserShippingService.java
type UserShippingService (line 5) | public interface UserShippingService {
method findById (line 6) | UserShipping findById(Long id);
method deleteById (line 8) | void deleteById(Long id);
FILE: src/main/java/com/eCommerce/service/impl/BillingAddressServiceImpl.java
class BillingAddressServiceImpl (line 9) | @Service
method setByUserBilling (line 12) | public BillingAddress setByUserBilling(UserBilling userBilling, Billin...
FILE: src/main/java/com/eCommerce/service/impl/BookServiceImpl.java
class BookServiceImpl (line 13) | @Service
method findAll (line 18) | public List<Book> findAll() {
method findById (line 31) | public Book findById(Long id) {
method findByCategory (line 35) | public List<Book> findByCategory(String category){
method blurrySearch (line 49) | public List<Book> blurrySearch(String title) {
FILE: src/main/java/com/eCommerce/service/impl/CartItemServiceImpl.java
class CartItemServiceImpl (line 19) | @Service
method findByShoppingCart (line 28) | public List<CartItem> findByShoppingCart(ShoppingCart shoppingCart) {
method updateCartItem (line 32) | public CartItem updateCartItem(CartItem cartItem) {
method addBookToCartItem (line 43) | public CartItem addBookToCartItem(Book book, User user, int qty) {
method findById (line 71) | public CartItem findById(Long id) {
method removeCartItem (line 75) | public void removeCartItem(CartItem cartItem) {
method save (line 80) | public CartItem save(CartItem cartItem) {
method findByOrder (line 84) | public List<CartItem> findByOrder(Order order) {
FILE: src/main/java/com/eCommerce/service/impl/OrderServiceImpl.java
class OrderServiceImpl (line 22) | @Service
method createOrder (line 31) | public synchronized Order createOrder(ShoppingCart shoppingCart,
method findById (line 64) | public Order findById(Long id) {
FILE: src/main/java/com/eCommerce/service/impl/PaymentServiceImpl.java
class PaymentServiceImpl (line 9) | @Service
method setByUserPayment (line 12) | public Payment setByUserPayment(UserPayment userPayment, Payment payme...
FILE: src/main/java/com/eCommerce/service/impl/ShippingAddressServiceImpl.java
class ShippingAddressServiceImpl (line 9) | @Service
method setByUserShipping (line 12) | public ShippingAddress setByUserShipping(UserShipping userShipping, Sh...
FILE: src/main/java/com/eCommerce/service/impl/ShoppingCartServiceImpl.java
class ShoppingCartServiceImpl (line 15) | @Service
method updateShoppingCart (line 24) | public ShoppingCart updateShoppingCart(ShoppingCart shoppingCart) {
method clearShoppingCart (line 43) | public void clearShoppingCart(ShoppingCart shoppingCart) {
FILE: src/main/java/com/eCommerce/service/impl/UserPaymentServiceImpl.java
class UserPaymentServiceImpl (line 11) | @Service
method findById (line 17) | public UserPayment findById(Long id) {
method deleteById (line 21) | public void deleteById(Long id) {
FILE: src/main/java/com/eCommerce/service/impl/UserSecurityService.java
class UserSecurityService (line 12) | @Service
method loadUserByUsername (line 18) | @Override
FILE: src/main/java/com/eCommerce/service/impl/UserServiceImpl.java
class UserServiceImpl (line 28) | @Service
method getPasswordResetToken (line 48) | @Override
method createPasswordResetTokenForUser (line 53) | @Override
method findByUsername (line 59) | @Override
method findById (line 64) | @Override
method findByEmail (line 69) | @Override
method createUser (line 74) | @Override
method save (line 101) | @Override
method updateUserBilling (line 106) | @Override
method updateUserShipping (line 116) | @Override
method setUserDefaultPayment (line 124) | @Override
method setUserDefaultShipping (line 139) | @Override
FILE: src/main/java/com/eCommerce/service/impl/UserShippingServiceImpl.java
class UserShippingServiceImpl (line 10) | @Service
method findById (line 17) | public UserShipping findById(Long id) {
method deleteById (line 21) | public void deleteById(Long id) {
FILE: src/main/java/com/eCommerce/utility/MailConstructor.java
class MailConstructor (line 19) | @Component
method constructResetTokenEmail (line 28) | public SimpleMailMessage constructResetTokenEmail(
method constructOrderConfirmationEmail (line 43) | public MimeMessagePreparator constructOrderConfirmationEmail (User use...
FILE: src/main/java/com/eCommerce/utility/SecurityUtility.java
class SecurityUtility (line 10) | @Component
method passwordEncoder (line 14) | @Bean
method randomPassword (line 19) | @Bean
FILE: src/main/java/com/eCommerce/utility/USConstants.java
class USConstants (line 8) | public class USConstants {
FILE: src/main/resources/static/js/scripts.js
function checkBillingAddress (line 5) | function checkBillingAddress() {
function checkPasswordMatch (line 13) | function checkPasswordMatch() {
FILE: src/test/java/com/eCommerce/ECommerceApplicationTests.java
class ECommerceApplicationTests (line 11) | @Testcontainers
method deleteAll (line 24) | @BeforeEach
Condensed preview — 128 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (388K chars).
[
{
"path": ".github/dependabot.yml",
"chars": 186,
"preview": "version: 2\nupdates:\n - package-ecosystem: maven\n directory: \"/\"\n schedule:\n interval: daily\n time: '21:"
},
{
"path": ".github/workflows/maven.yml",
"chars": 1147,
"preview": "# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow executi"
},
{
"path": ".gitignore",
"chars": 255,
"preview": "target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBe"
},
{
"path": ".mvn/wrapper/maven-wrapper.properties",
"chars": 110,
"preview": "distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip\n"
},
{
"path": ".vscode/launch.json",
"chars": 516,
"preview": "// Use IntelliSense to learn about possible attributes.\n// Hover to view descriptions of existing attributes.\n// For mor"
},
{
"path": "README.md",
"chars": 4830,
"preview": "# E-Commerce\nComplete E-Commerce Project using Spring, Hibernate, Bootstrap & MySQL\n\n> [!WARNING] \n> **Note Regardi"
},
{
"path": "adminportal/mvnw",
"chars": 7058,
"preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
},
{
"path": "adminportal/mvnw.cmd",
"chars": 5006,
"preview": "@REM ----------------------------------------------------------------------------\n@REM Licensed to the Apache Software F"
},
{
"path": "adminportal/pom.xml",
"chars": 2600,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
},
{
"path": "adminportal/src/main/java/com/adminportal/AdminportalApplication.java",
"chars": 1229,
"preview": "package com.adminportal;\n\nimport java.util.HashSet;\nimport java.util.Set;\n\nimport org.springframework.beans.factory.anno"
},
{
"path": "adminportal/src/main/java/com/adminportal/config/SecurityConfig.java",
"chars": 2267,
"preview": "package com.adminportal.config;\r\n\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.springfram"
},
{
"path": "adminportal/src/main/java/com/adminportal/controller/BookController.java",
"chars": 3510,
"preview": "package com.adminportal.controller;\r\n\r\nimport java.io.BufferedOutputStream;\r\nimport java.io.File;\r\nimport java.io.FileOu"
},
{
"path": "adminportal/src/main/java/com/adminportal/controller/HomeController.java",
"chars": 440,
"preview": "package com.adminportal.controller;\r\n\r\nimport org.springframework.stereotype.Controller;\r\nimport org.springframework.web"
},
{
"path": "adminportal/src/main/java/com/adminportal/controller/ResourceController.java",
"chars": 913,
"preview": "package com.adminportal.controller;\r\n\r\nimport java.util.ArrayList;\r\n\r\nimport org.springframework.beans.factory.annotatio"
},
{
"path": "adminportal/src/main/java/com/adminportal/domain/Book.java",
"chars": 3555,
"preview": "package com.adminportal.domain;\r\n\r\nimport java.util.List;\r\n\r\nimport javax.persistence.Column;\r\nimport javax.persistence."
},
{
"path": "adminportal/src/main/java/com/adminportal/domain/User.java",
"chars": 3056,
"preview": "package com.adminportal.domain;\r\n\r\nimport java.util.Collection;\r\nimport java.util.HashSet;\r\nimport java.util.Set;\r\n\r\nimp"
},
{
"path": "adminportal/src/main/java/com/adminportal/domain/security/Authority.java",
"chars": 346,
"preview": "package com.adminportal.domain.security;\r\n\r\nimport org.springframework.security.core.GrantedAuthority;\r\n\r\npublic class A"
},
{
"path": "adminportal/src/main/java/com/adminportal/domain/security/PasswordResetToken.java",
"chars": 2103,
"preview": "package com.adminportal.domain.security;\r\n\r\nimport java.util.Calendar;\r\nimport java.util.Date;\r\n\r\nimport javax.persisten"
},
{
"path": "adminportal/src/main/java/com/adminportal/domain/security/Role.java",
"chars": 896,
"preview": "package com.adminportal.domain.security;\r\n\r\nimport java.util.HashSet;\r\nimport java.util.Set;\r\n\r\nimport javax.persistence"
},
{
"path": "adminportal/src/main/java/com/adminportal/domain/security/UserRole.java",
"chars": 1208,
"preview": "package com.adminportal.domain.security;\r\n\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.FetchType;\r\nimpor"
},
{
"path": "adminportal/src/main/java/com/adminportal/repository/BookRepository.java",
"chars": 214,
"preview": "package com.adminportal.repository;\r\n\r\nimport org.springframework.data.repository.CrudRepository;\r\n\r\nimport com.adminpor"
},
{
"path": "adminportal/src/main/java/com/adminportal/repository/RoleRepository.java",
"chars": 256,
"preview": "package com.adminportal.repository;\r\n\r\nimport org.springframework.data.repository.CrudRepository;\r\n\r\nimport com.adminpor"
},
{
"path": "adminportal/src/main/java/com/adminportal/repository/UserRepository.java",
"chars": 253,
"preview": "package com.adminportal.repository;\r\n\r\nimport org.springframework.data.repository.CrudRepository;\r\n\r\nimport com.adminpor"
},
{
"path": "adminportal/src/main/java/com/adminportal/service/BookService.java",
"chars": 218,
"preview": "package com.adminportal.service;\r\n\r\nimport java.util.List;\r\n\r\nimport com.adminportal.domain.Book;\r\n\r\npublic interface Bo"
},
{
"path": "adminportal/src/main/java/com/adminportal/service/UserService.java",
"chars": 284,
"preview": "package com.adminportal.service;\r\n\r\nimport java.util.Set;\r\n\r\nimport com.adminportal.domain.User;\r\nimport com.adminportal"
},
{
"path": "adminportal/src/main/java/com/adminportal/service/impl/BookServiceImpl.java",
"chars": 697,
"preview": "package com.adminportal.service.impl;\r\n\r\nimport java.util.List;\r\n\r\nimport org.springframework.beans.factory.annotation.A"
},
{
"path": "adminportal/src/main/java/com/adminportal/service/impl/UserSecurityService.java",
"chars": 885,
"preview": "package com.adminportal.service.impl;\r\n\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.spri"
},
{
"path": "adminportal/src/main/java/com/adminportal/service/impl/UserServiceImpl.java",
"chars": 1305,
"preview": "package com.adminportal.service.impl;\r\n\r\nimport java.util.Set;\r\n\r\nimport org.slf4j.Logger;\r\nimport org.slf4j.LoggerFacto"
},
{
"path": "adminportal/src/main/java/com/adminportal/utility/SecurityUtility.java",
"chars": 947,
"preview": "package com.adminportal.utility;\r\n\r\nimport java.security.SecureRandom;\r\nimport java.util.Random;\r\n\r\nimport org.springfra"
},
{
"path": "adminportal/src/main/resources/application.properties",
"chars": 1178,
"preview": "server.port=8081\nserver.context-path=/adminportal\nspring.thymeleaf.cache=false\n\n# ===============================\n# = DA"
},
{
"path": "adminportal/src/main/resources/static/css/non-responsive.css",
"chars": 5223,
"preview": "/* Template-specific stuff\n *\n * Customizations just for the template; these are not necessary for anything\n * with disa"
},
{
"path": "adminportal/src/main/resources/static/css/style.css",
"chars": 690,
"preview": "body {\n \n}\n\nhr {\n\tborder: none;\n\theight: 1px;\n\tcolor: #333;\n\tbackground-color: #333;\n}\n\n.container {\n\twidth: 90%;\n}\n\n.pa"
},
{
"path": "adminportal/src/main/resources/templates/addBook.html",
"chars": 8580,
"preview": "\r\n<!DOCTYPE html>\r\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\r\n<head th:replace=\"common/header :: common-h"
},
{
"path": "adminportal/src/main/resources/templates/bookInfo.html",
"chars": 2248,
"preview": "\r\n<!DOCTYPE html>\r\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\r\n<head th:replace=\"common/header :: common-h"
},
{
"path": "adminportal/src/main/resources/templates/bookList.html",
"chars": 1885,
"preview": "\r\n<!DOCTYPE html>\r\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\r\n<head th:replace=\"common/header :: common-h"
},
{
"path": "adminportal/src/main/resources/templates/common/header.html",
"chars": 4723,
"preview": "<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1999/xhtml\"\n\txmlns:sec=\"http://www.w3.org/1999/xhtml\">\n<head"
},
{
"path": "adminportal/src/main/resources/templates/home.html",
"chars": 998,
"preview": "<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\n<head th:replace=\"common/header :: common-heade"
},
{
"path": "adminportal/src/main/resources/templates/login.html",
"chars": 1458,
"preview": "\n<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\n<head th:replace=\"common/header :: common-head"
},
{
"path": "adminportal/src/main/resources/templates/updateBook.html",
"chars": 8765,
"preview": "\r\n<!DOCTYPE html>\r\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\r\n<head th:replace=\"common/header :: common-h"
},
{
"path": "adminportal/src/test/java/com/adminportal/AdminportalApplicationTests.java",
"chars": 337,
"preview": "package com.adminportal;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.c"
},
{
"path": "bin/.gitignore",
"chars": 249,
"preview": "target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBe"
},
{
"path": "bin/.mvn/wrapper/maven-wrapper.properties",
"chars": 110,
"preview": "distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip\n"
},
{
"path": "bin/mvnw",
"chars": 7058,
"preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
},
{
"path": "bin/mvnw.cmd",
"chars": 5006,
"preview": "@REM ----------------------------------------------------------------------------\n@REM Licensed to the Apache Software F"
},
{
"path": "bin/pom.xml",
"chars": 1437,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "bin/src/main/resources/application.properties",
"chars": 0,
"preview": ""
},
{
"path": "mvnw",
"chars": 7058,
"preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
},
{
"path": "mvnw.cmd",
"chars": 5006,
"preview": "@REM ----------------------------------------------------------------------------\n@REM Licensed to the Apache Software F"
},
{
"path": "pom.xml",
"chars": 2580,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "src/main/java/com/eCommerce/ECommerceApplication.java",
"chars": 313,
"preview": "package com.eCommerce;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure"
},
{
"path": "src/main/java/com/eCommerce/config/SecurityConfig.java",
"chars": 2497,
"preview": "package com.eCommerce.config;\r\n\r\nimport com.eCommerce.service.impl.UserSecurityService;\r\nimport com.eCommerce.utility.Se"
},
{
"path": "src/main/java/com/eCommerce/controller/CheckoutController.java",
"chars": 11335,
"preview": "package com.eCommerce.controller;\r\n\r\nimport java.security.Principal;\r\nimport java.time.LocalDate;\r\nimport java.util.Coll"
},
{
"path": "src/main/java/com/eCommerce/controller/HomeController.java",
"chars": 21352,
"preview": "package com.eCommerce.controller;\n\nimport com.eCommerce.domain.Book;\nimport com.eCommerce.domain.CartItem;\nimport com.eC"
},
{
"path": "src/main/java/com/eCommerce/controller/SearchController.java",
"chars": 2142,
"preview": "package com.eCommerce.controller;\r\n\r\nimport java.security.Principal;\r\nimport java.util.List;\r\n\r\nimport org.springframewo"
},
{
"path": "src/main/java/com/eCommerce/controller/ShoppingCartController.java",
"chars": 2813,
"preview": "package com.eCommerce.controller;\r\n\r\nimport java.security.Principal;\r\nimport java.util.List;\r\n\r\nimport org.springframewo"
},
{
"path": "src/main/java/com/eCommerce/domain/BillingAddress.java",
"chars": 2306,
"preview": "package com.eCommerce.domain;\r\n\r\nimport jakarta.persistence.Entity;\r\nimport jakarta.persistence.GeneratedValue;\r\nimport "
},
{
"path": "src/main/java/com/eCommerce/domain/Book.java",
"chars": 3565,
"preview": "package com.eCommerce.domain;\r\n\r\nimport com.fasterxml.jackson.annotation.JsonIgnore;\r\nimport jakarta.persistence.Column;"
},
{
"path": "src/main/java/com/eCommerce/domain/BookToCartItem.java",
"chars": 893,
"preview": "package com.eCommerce.domain;\r\n\r\nimport jakarta.persistence.Entity;\r\nimport jakarta.persistence.GeneratedValue;\r\nimport "
},
{
"path": "src/main/java/com/eCommerce/domain/CartItem.java",
"chars": 1902,
"preview": "package com.eCommerce.domain;\r\n\r\nimport com.fasterxml.jackson.annotation.JsonIgnore;\r\nimport jakarta.persistence.Entity;"
},
{
"path": "src/main/java/com/eCommerce/domain/Order.java",
"chars": 2824,
"preview": "package com.eCommerce.domain;\r\n\r\nimport jakarta.persistence.CascadeType;\r\nimport jakarta.persistence.Entity;\r\nimport jak"
},
{
"path": "src/main/java/com/eCommerce/domain/Payment.java",
"chars": 2040,
"preview": "package com.eCommerce.domain;\r\n\r\nimport jakarta.persistence.CascadeType;\r\nimport jakarta.persistence.Entity;\r\nimport jak"
},
{
"path": "src/main/java/com/eCommerce/domain/ShippingAddress.java",
"chars": 2391,
"preview": "package com.eCommerce.domain;\r\n\r\nimport jakarta.persistence.Entity;\r\nimport jakarta.persistence.GeneratedValue;\r\nimport "
},
{
"path": "src/main/java/com/eCommerce/domain/ShoppingCart.java",
"chars": 1363,
"preview": "package com.eCommerce.domain;\r\n\r\nimport com.fasterxml.jackson.annotation.JsonIgnore;\r\nimport jakarta.persistence.Cascade"
},
{
"path": "src/main/java/com/eCommerce/domain/User.java",
"chars": 4080,
"preview": "package com.eCommerce.domain;\n\nimport com.eCommerce.domain.security.Authority;\nimport com.eCommerce.domain.security.User"
},
{
"path": "src/main/java/com/eCommerce/domain/UserBilling.java",
"chars": 2322,
"preview": "package com.eCommerce.domain;\r\n\r\nimport jakarta.persistence.CascadeType;\r\nimport jakarta.persistence.Entity;\r\nimport jak"
},
{
"path": "src/main/java/com/eCommerce/domain/UserPayment.java",
"chars": 2374,
"preview": "package com.eCommerce.domain;\r\n\r\nimport jakarta.persistence.CascadeType;\r\nimport jakarta.persistence.Entity;\r\nimport jak"
},
{
"path": "src/main/java/com/eCommerce/domain/UserShipping.java",
"chars": 2600,
"preview": "package com.eCommerce.domain;\r\n\r\nimport jakarta.persistence.Entity;\r\nimport jakarta.persistence.GeneratedValue;\r\nimport "
},
{
"path": "src/main/java/com/eCommerce/domain/security/Authority.java",
"chars": 328,
"preview": "package com.eCommerce.domain.security;\n\nimport org.springframework.security.core.GrantedAuthority;\n\npublic class Authori"
},
{
"path": "src/main/java/com/eCommerce/domain/security/PasswordResetToken.java",
"chars": 2111,
"preview": "package com.eCommerce.domain.security;\r\n\r\nimport com.eCommerce.domain.User;\r\nimport jakarta.persistence.Entity;\r\nimport "
},
{
"path": "src/main/java/com/eCommerce/domain/security/Role.java",
"chars": 858,
"preview": "package com.eCommerce.domain.security;\n\nimport jakarta.persistence.CascadeType;\nimport jakarta.persistence.Entity;\nimpor"
},
{
"path": "src/main/java/com/eCommerce/domain/security/UserRole.java",
"chars": 1153,
"preview": "package com.eCommerce.domain.security;\n\nimport com.eCommerce.domain.User;\nimport jakarta.persistence.Entity;\nimport jaka"
},
{
"path": "src/main/java/com/eCommerce/repository/BookRepository.java",
"chars": 339,
"preview": "package com.eCommerce.repository;\r\n\r\n\r\nimport java.util.List;\r\n\r\nimport org.springframework.data.repository.CrudReposito"
},
{
"path": "src/main/java/com/eCommerce/repository/BookToCartItemRepository.java",
"chars": 409,
"preview": "package com.eCommerce.repository;\r\n\r\nimport org.springframework.data.repository.CrudRepository;\r\nimport org.springframew"
},
{
"path": "src/main/java/com/eCommerce/repository/CartItemRepository.java",
"chars": 440,
"preview": "package com.eCommerce.repository;\r\n\r\nimport java.util.List;\r\n\r\nimport org.springframework.data.repository.CrudRepository"
},
{
"path": "src/main/java/com/eCommerce/repository/OrderRepository.java",
"chars": 213,
"preview": "package com.eCommerce.repository;\r\n\r\nimport org.springframework.data.repository.CrudRepository;\r\n\r\nimport com.eCommerce."
},
{
"path": "src/main/java/com/eCommerce/repository/PasswordResetTokenRepository.java",
"chars": 767,
"preview": "package com.eCommerce.repository;\r\n\r\nimport java.util.Date;\r\nimport java.util.stream.Stream;\r\n\r\nimport org.springframewo"
},
{
"path": "src/main/java/com/eCommerce/repository/RoleRepository.java",
"chars": 250,
"preview": "package com.eCommerce.repository;\r\n\r\nimport org.springframework.data.repository.CrudRepository;\r\n\r\nimport com.eCommerce."
},
{
"path": "src/main/java/com/eCommerce/repository/ShoppingCartRepository.java",
"chars": 235,
"preview": "package com.eCommerce.repository;\r\n\r\nimport org.springframework.data.repository.CrudRepository;\r\n\r\nimport com.eCommerce."
},
{
"path": "src/main/java/com/eCommerce/repository/UserPaymentRepository.java",
"chars": 231,
"preview": "package com.eCommerce.repository;\r\n\r\nimport org.springframework.data.repository.CrudRepository;\r\n\r\nimport com.eCommerce."
},
{
"path": "src/main/java/com/eCommerce/repository/UserRepository.java",
"chars": 286,
"preview": "package com.eCommerce.repository;\r\n\r\nimport org.springframework.data.repository.CrudRepository;\r\n\r\nimport com.eCommerce."
},
{
"path": "src/main/java/com/eCommerce/repository/UserShippingRepository.java",
"chars": 241,
"preview": "package com.eCommerce.repository;\r\n\r\nimport org.springframework.data.repository.CrudRepository;\r\n\r\nimport com.eCommerce."
},
{
"path": "src/main/java/com/eCommerce/service/BillingAddressService.java",
"chars": 259,
"preview": "package com.eCommerce.service;\r\n\r\nimport com.eCommerce.domain.BillingAddress;\r\nimport com.eCommerce.domain.UserBilling;\r"
},
{
"path": "src/main/java/com/eCommerce/service/BookService.java",
"chars": 283,
"preview": "package com.eCommerce.service;\r\n\r\nimport java.util.List;\r\n\r\nimport com.eCommerce.domain.Book;\r\n\r\n\r\npublic interface Book"
},
{
"path": "src/main/java/com/eCommerce/service/CartItemService.java",
"chars": 629,
"preview": "package com.eCommerce.service;\r\n\r\nimport java.util.List;\r\n\r\nimport com.eCommerce.domain.Book;\r\nimport com.eCommerce.doma"
},
{
"path": "src/main/java/com/eCommerce/service/OrderService.java",
"chars": 528,
"preview": "package com.eCommerce.service;\r\n\r\nimport com.eCommerce.domain.BillingAddress;\r\nimport com.eCommerce.domain.Order;\r\nimpor"
},
{
"path": "src/main/java/com/eCommerce/service/PaymentService.java",
"chars": 224,
"preview": "package com.eCommerce.service;\r\n\r\nimport com.eCommerce.domain.Payment;\r\nimport com.eCommerce.domain.UserPayment;\r\n\r\npubl"
},
{
"path": "src/main/java/com/eCommerce/service/ShippingAddressService.java",
"chars": 268,
"preview": "package com.eCommerce.service;\r\n\r\nimport com.eCommerce.domain.ShippingAddress;\r\nimport com.eCommerce.domain.UserShipping"
},
{
"path": "src/main/java/com/eCommerce/service/ShoppingCartService.java",
"chars": 240,
"preview": "package com.eCommerce.service;\r\n\r\nimport com.eCommerce.domain.ShoppingCart;\r\n\r\npublic interface ShoppingCartService {\r\n\t"
},
{
"path": "src/main/java/com/eCommerce/service/UserPaymentService.java",
"chars": 183,
"preview": "package com.eCommerce.service;\r\n\r\nimport com.eCommerce.domain.UserPayment;\r\n\r\npublic interface UserPaymentService {\r\n\tUs"
},
{
"path": "src/main/java/com/eCommerce/service/UserService.java",
"chars": 1012,
"preview": "package com.eCommerce.service;\r\n\r\nimport java.util.Set;\r\n\r\nimport com.eCommerce.domain.User;\r\nimport com.eCommerce.domai"
},
{
"path": "src/main/java/com/eCommerce/service/UserShippingService.java",
"chars": 187,
"preview": "package com.eCommerce.service;\r\n\r\nimport com.eCommerce.domain.UserShipping;\r\n\r\npublic interface UserShippingService {\r\n\t"
},
{
"path": "src/main/java/com/eCommerce/service/impl/BillingAddressServiceImpl.java",
"chars": 1011,
"preview": "package com.eCommerce.service.impl;\r\n\r\nimport org.springframework.stereotype.Service;\r\n\r\nimport com.eCommerce.domain.Bil"
},
{
"path": "src/main/java/com/eCommerce/service/impl/BookServiceImpl.java",
"chars": 1467,
"preview": "package com.eCommerce.service.impl;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\nimport org.springframework"
},
{
"path": "src/main/java/com/eCommerce/service/impl/CartItemServiceImpl.java",
"chars": 2742,
"preview": "package com.eCommerce.service.impl;\r\n\r\nimport java.math.BigDecimal;\r\nimport java.util.List;\r\n\r\nimport org.springframewor"
},
{
"path": "src/main/java/com/eCommerce/service/impl/OrderServiceImpl.java",
"chars": 2010,
"preview": "package com.eCommerce.service.impl;\r\n\r\nimport java.util.Calendar;\r\nimport java.util.List;\r\n\r\nimport org.springframework."
},
{
"path": "src/main/java/com/eCommerce/service/impl/PaymentServiceImpl.java",
"chars": 710,
"preview": "package com.eCommerce.service.impl;\r\n\r\nimport org.springframework.stereotype.Service;\r\n\r\nimport com.eCommerce.domain.Pay"
},
{
"path": "src/main/java/com/eCommerce/service/impl/ShippingAddressServiceImpl.java",
"chars": 1050,
"preview": "package com.eCommerce.service.impl;\r\n\r\nimport org.springframework.stereotype.Service;\r\n\r\nimport com.eCommerce.domain.Shi"
},
{
"path": "src/main/java/com/eCommerce/service/impl/ShoppingCartServiceImpl.java",
"chars": 1594,
"preview": "package com.eCommerce.service.impl;\r\n\r\nimport java.math.BigDecimal;\r\nimport java.util.List;\r\n\r\nimport org.springframewor"
},
{
"path": "src/main/java/com/eCommerce/service/impl/UserPaymentServiceImpl.java",
"chars": 649,
"preview": "package com.eCommerce.service.impl;\r\n\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.spring"
},
{
"path": "src/main/java/com/eCommerce/service/impl/UserSecurityService.java",
"chars": 879,
"preview": "package com.eCommerce.service.impl;\r\n\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.spring"
},
{
"path": "src/main/java/com/eCommerce/service/impl/UserServiceImpl.java",
"chars": 4596,
"preview": "package com.eCommerce.service.impl;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\nimport java.util.Set;\r\n\r\nimp"
},
{
"path": "src/main/java/com/eCommerce/service/impl/UserShippingServiceImpl.java",
"chars": 661,
"preview": "package com.eCommerce.service.impl;\r\n\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.spring"
},
{
"path": "src/main/java/com/eCommerce/utility/MailConstructor.java",
"chars": 2229,
"preview": "package com.eCommerce.utility;\r\n\r\nimport com.eCommerce.domain.Order;\r\nimport com.eCommerce.domain.User;\r\nimport jakarta."
},
{
"path": "src/main/java/com/eCommerce/utility/SecurityUtility.java",
"chars": 945,
"preview": "package com.eCommerce.utility;\r\n\r\nimport java.security.SecureRandom;\r\nimport java.util.Random;\r\n\r\nimport org.springframe"
},
{
"path": "src/main/java/com/eCommerce/utility/USConstants.java",
"chars": 803,
"preview": "package com.eCommerce.utility;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java"
},
{
"path": "src/main/resources/application.properties",
"chars": 1684,
"preview": "spring.thymeleaf.cache=false\n\n# ===============================\n# = DATA SOURCE\n# ===============================\n\n# Set"
},
{
"path": "src/main/resources/messages.properties",
"chars": 43,
"preview": "adminPath=http://localhost:8081/adminportal"
},
{
"path": "src/main/resources/static/css/jquery.dataTables_themeroller.css",
"chars": 14645,
"preview": "/*\r\n * Table styles\r\n */\r\ntable.dataTable {\r\n width: 100%;\r\n margin: 0 auto;\r\n clear: both;\r\n border-collapse: separ"
},
{
"path": "src/main/resources/static/css/non-responsive.css",
"chars": 5223,
"preview": "/* Template-specific stuff\n *\n * Customizations just for the template; these are not necessary for anything\n * with disa"
},
{
"path": "src/main/resources/static/css/style.css",
"chars": 677,
"preview": "\nhr {\n\tborder: none;\n\theight: 1px;\n\tcolor: #333;\n\tbackground-color: #333;\n}\n\n.container {\n\twidth: 90%;\n}\n\n.page-top {\n\tm"
},
{
"path": "src/main/resources/static/js/scripts.js",
"chars": 1143,
"preview": "/**\r\n * \r\n */\r\n\r\nfunction checkBillingAddress() {\r\n\tif($(\"#theSameAsShippingAddress\").is(\":checked\")) {\r\n\t\t$(\".billingAd"
},
{
"path": "src/main/resources/templates/badRequestPage.html",
"chars": 1055,
"preview": "\n<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\n<head th:replace=\"common/header :: common-head"
},
{
"path": "src/main/resources/templates/bookDetail.html",
"chars": 4349,
"preview": "<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\n<head th:replace=\"common/header :: common-heade"
},
{
"path": "src/main/resources/templates/bookshelf.html",
"chars": 4409,
"preview": "<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\n<head th:replace=\"common/header :: common-heade"
},
{
"path": "src/main/resources/templates/checkout.html",
"chars": 17709,
"preview": "\n<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\n<head th:replace=\"common/header :: common-head"
},
{
"path": "src/main/resources/templates/common/header.html",
"chars": 5752,
"preview": "<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1999/xhtml\"\n\txmlns:sec=\"http://www.w3.org/1999/xhtml\">\n<head"
},
{
"path": "src/main/resources/templates/faq.html",
"chars": 5462,
"preview": "<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1999/xhtml\">\n<head th:replace=\"common/header :: common-heade"
},
{
"path": "src/main/resources/templates/index.html",
"chars": 8122,
"preview": "<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\n\n<head th:replace=\"common/header :: common-head"
},
{
"path": "src/main/resources/templates/myAccount.html",
"chars": 6051,
"preview": "\n<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\n<head th:replace=\"common/header :: common-head"
},
{
"path": "src/main/resources/templates/myProfile.html",
"chars": 27489,
"preview": "<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\n<head th:replace=\"common/header :: common-heade"
},
{
"path": "src/main/resources/templates/orderConfirmationEmailTemplate.html",
"chars": 4132,
"preview": "<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1999/xhtml\">\n<head>\n\n<!-- Bootstrap core CSS -->\n<link href="
},
{
"path": "src/main/resources/templates/orderSubmittedPage.html",
"chars": 2109,
"preview": "\n<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\n<head th:replace=\"common/header :: common-head"
},
{
"path": "src/main/resources/templates/shoppingCart.html",
"chars": 4335,
"preview": "<!DOCTYPE html>\n<html lang=\"en\" xmlns:th=\"http://www.w3.org/1000/xhtml\">\n<head th:replace=\"common/header :: common-heade"
},
{
"path": "src/test/java/com/eCommerce/ECommerceApplicationTests.java",
"chars": 758,
"preview": "package com.eCommerce;\n\nimport com.eCommerce.repository.BookRepository;\nimport org.junit.jupiter.api.BeforeEach;\nimport "
}
]
// ... and 4 more files (download for full content)
About this extraction
This page contains the full source code of the foysal-mahmud/E-BookShop----Spring-boot GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 128 files (320.5 KB), approximately 85.5k tokens, and a symbol index with 579 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.