From c1e675fc7fac68711c4e033a41bd808bbc31fcbe Mon Sep 17 00:00:00 2001 From: Kiyan Date: Sat, 13 Dec 2025 19:16:28 +0200 Subject: [PATCH] TaskManager Application 1.0 --- .gitattributes | 2 + .gitignore | 33 ++ .mvn/wrapper/maven-wrapper.properties | 3 + mvnw | 295 ++++++++++ mvnw.cmd | 189 +++++++ pom.xml | 107 ++++ .../TaskManager/Controllers/CreateTask.java | 69 +++ .../TaskManager/Controllers/Dashboard.java | 122 +++++ .../TaskManager/Controllers/LandingPage.java | 16 + .../TaskManager/Controllers/Login.java | 32 ++ .../TaskManager/Controllers/Profile.java | 49 ++ .../TaskManager/Controllers/Register.java | 33 ++ .../TaskManager/Controllers/Tasks.java | 128 +++++ .../TaskManager/DTO/TasksWithCategory.java | 29 + .../example/TaskManager/Models/Category.java | 58 ++ .../com/example/TaskManager/Models/Task.java | 76 +++ .../com/example/TaskManager/Models/User.java | 62 +++ .../TaskManager/Repo/CategoryRepo.java | 23 + .../example/TaskManager/Repo/TaskRepo.java | 252 +++++++++ .../example/TaskManager/Repo/UserRepo.java | 22 + .../Security/CustomUserDetailService.java | 25 + .../Security/CustomUserDetails.java | 72 +++ .../TaskManager/Security/SecurityConfig.java | 59 ++ .../TaskManager/Services/CategoryService.java | 26 + .../Services/ScheduledService.java | 32 ++ .../TaskManager/Services/TaskService.java | 139 +++++ .../TaskManager/Services/UserService.java | 51 ++ .../TaskManager/TaskManagerApplication.java | 15 + src/main/resources/application.properties | 19 + .../static/images/landingPageTable.png | Bin 0 -> 217431 bytes .../resources/templates/component/header.html | 23 + .../templates/component/nav-sidebar.html | 74 +++ src/main/resources/templates/createTask.html | 102 ++++ src/main/resources/templates/dashboard.html | 504 ++++++++++++++++++ .../resources/templates/landing-page.html | 257 +++++++++ src/main/resources/templates/login.html | 77 +++ src/main/resources/templates/profile.html | 89 ++++ src/main/resources/templates/register.html | 60 +++ src/main/resources/templates/viewTasks.html | 246 +++++++++ .../TaskManagerApplicationTests.java | 13 + 40 files changed, 3483 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100755 mvnw create mode 100644 mvnw.cmd create mode 100644 pom.xml create mode 100644 src/main/java/com/example/TaskManager/Controllers/CreateTask.java create mode 100644 src/main/java/com/example/TaskManager/Controllers/Dashboard.java create mode 100644 src/main/java/com/example/TaskManager/Controllers/LandingPage.java create mode 100644 src/main/java/com/example/TaskManager/Controllers/Login.java create mode 100644 src/main/java/com/example/TaskManager/Controllers/Profile.java create mode 100644 src/main/java/com/example/TaskManager/Controllers/Register.java create mode 100644 src/main/java/com/example/TaskManager/Controllers/Tasks.java create mode 100644 src/main/java/com/example/TaskManager/DTO/TasksWithCategory.java create mode 100644 src/main/java/com/example/TaskManager/Models/Category.java create mode 100644 src/main/java/com/example/TaskManager/Models/Task.java create mode 100644 src/main/java/com/example/TaskManager/Models/User.java create mode 100644 src/main/java/com/example/TaskManager/Repo/CategoryRepo.java create mode 100644 src/main/java/com/example/TaskManager/Repo/TaskRepo.java create mode 100644 src/main/java/com/example/TaskManager/Repo/UserRepo.java create mode 100644 src/main/java/com/example/TaskManager/Security/CustomUserDetailService.java create mode 100644 src/main/java/com/example/TaskManager/Security/CustomUserDetails.java create mode 100644 src/main/java/com/example/TaskManager/Security/SecurityConfig.java create mode 100644 src/main/java/com/example/TaskManager/Services/CategoryService.java create mode 100644 src/main/java/com/example/TaskManager/Services/ScheduledService.java create mode 100644 src/main/java/com/example/TaskManager/Services/TaskService.java create mode 100644 src/main/java/com/example/TaskManager/Services/UserService.java create mode 100644 src/main/java/com/example/TaskManager/TaskManagerApplication.java create mode 100644 src/main/resources/application.properties create mode 100644 src/main/resources/static/images/landingPageTable.png create mode 100644 src/main/resources/templates/component/header.html create mode 100644 src/main/resources/templates/component/nav-sidebar.html create mode 100644 src/main/resources/templates/createTask.html create mode 100644 src/main/resources/templates/dashboard.html create mode 100644 src/main/resources/templates/landing-page.html create mode 100644 src/main/resources/templates/login.html create mode 100644 src/main/resources/templates/profile.html create mode 100644 src/main/resources/templates/register.html create mode 100644 src/main/resources/templates/viewTasks.html create mode 100644 src/test/java/com/example/TaskManager/TaskManagerApplicationTests.java diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..3b41682 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..667aaef --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..c0bcafe --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,3 @@ +wrapperVersion=3.3.4 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip diff --git a/mvnw b/mvnw new file mode 100755 index 0000000..bd8896b --- /dev/null +++ b/mvnw @@ -0,0 +1,295 @@ +#!/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. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.4 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + 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" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +scriptDir="$(dirname "$0")" +scriptName="$(basename "$0")" + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +actualDistributionDir="" + +# First try the expected directory name (for regular distributions) +if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then + if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then + actualDistributionDir="$distributionUrlNameMain" + fi +fi + +# If not found, search for any directory with the Maven executable (for snapshots) +if [ -z "$actualDistributionDir" ]; then + # enable globbing to iterate over items + set +f + for dir in "$TMP_DOWNLOAD_DIR"/*; do + if [ -d "$dir" ]; then + if [ -f "$dir/bin/$MVN_CMD" ]; then + actualDistributionDir="$(basename "$dir")" + break + fi + fi + done + set -f +fi + +if [ -z "$actualDistributionDir" ]; then + verbose "Contents of $TMP_DOWNLOAD_DIR:" + verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" + die "Could not find Maven distribution directory in extracted archive" +fi + +verbose "Found extracted Maven distribution directory: $actualDistributionDir" +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..92450f9 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,189 @@ +<# : batch portion +@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 Apache Maven Wrapper startup batch script, version 3.3.4 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' + +$MAVEN_M2_PATH = "$HOME/.m2" +if ($env:MAVEN_USER_HOME) { + $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" +} + +if (-not (Test-Path -Path $MAVEN_M2_PATH)) { + New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null +} + +$MAVEN_WRAPPER_DISTS = $null +if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { + $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" +} else { + $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" +} + +$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" +$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +$actualDistributionDir = "" + +# First try the expected directory name (for regular distributions) +$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" +$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" +if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { + $actualDistributionDir = $distributionUrlNameMain +} + +# If not found, search for any directory with the Maven executable (for snapshots) +if (!$actualDistributionDir) { + Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { + $testPath = Join-Path $_.FullName "bin/$MVN_CMD" + if (Test-Path -Path $testPath -PathType Leaf) { + $actualDistributionDir = $_.Name + } + } +} + +if (!$actualDistributionDir) { + Write-Error "Could not find Maven distribution directory in extracted archive" +} + +Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..012e97d --- /dev/null +++ b/pom.xml @@ -0,0 +1,107 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.5.8 + + + com.example + TaskManager + 0.0.1-SNAPSHOT + TaskManager + Demo project for Spring Boot + + + + + + + + + + + + + + + 25 + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + io.github.wimdeblauwe + htmx-spring-boot-thymeleaf + 4.0.1 + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + com.mysql + mysql-connector-j + runtime + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.projectlombok + lombok + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/src/main/java/com/example/TaskManager/Controllers/CreateTask.java b/src/main/java/com/example/TaskManager/Controllers/CreateTask.java new file mode 100644 index 0000000..c1be68e --- /dev/null +++ b/src/main/java/com/example/TaskManager/Controllers/CreateTask.java @@ -0,0 +1,69 @@ +package com.example.TaskManager.Controllers; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +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 com.example.TaskManager.Models.Task; +import com.example.TaskManager.Security.CustomUserDetails; +import com.example.TaskManager.Services.CategoryService; +import com.example.TaskManager.Services.TaskService; + +@Controller +public class CreateTask { + + @Autowired + private CategoryService categoryService; + + @Autowired + private TaskService taskService; + + private Long taskId; + + @GetMapping("/createTask") + public String createTask(Model model, Authentication authentication, + @RequestParam(required = false) Long id) { + + // user details + CustomUserDetails userDetails = (CustomUserDetails) authentication.getPrincipal(); + model.addAttribute("userName", userDetails.getUsername()); + model.addAttribute("userEmail", userDetails.getEmail()); + + if (id == null) { + model.addAttribute("task", new Task()); + model.addAttribute("comCategories", categoryService.findAllCategories()); + model.addAttribute("resetBtnText", "Clear"); + model.addAttribute("saveBtnText", "Create Task"); + } else { + taskId = id; + model.addAttribute("task", taskService.findTaskById(id)); + model.addAttribute("comCategories", categoryService.findAllCategories()); + model.addAttribute("resetBtnText", "Reset"); + model.addAttribute("saveBtnText", "Update Task"); + } + return "createTask"; + + } + + @PostMapping("/createTask/save") + public String saveTask(@ModelAttribute Task task, Authentication authentication) { + + CustomUserDetails userDetails = (CustomUserDetails) authentication.getPrincipal(); + + if (taskId == null) { + task.setCreatedBy(userDetails.getUsername()); + task.setAssignedTo(userDetails.getId()); + taskService.saveTask(task); + } else { + task.setUpdatedBy(userDetails.getUsername()); + taskService.updateTask(taskId, task); + } + return "redirect:/dashboard"; + } + +} diff --git a/src/main/java/com/example/TaskManager/Controllers/Dashboard.java b/src/main/java/com/example/TaskManager/Controllers/Dashboard.java new file mode 100644 index 0000000..ad9400e --- /dev/null +++ b/src/main/java/com/example/TaskManager/Controllers/Dashboard.java @@ -0,0 +1,122 @@ +package com.example.TaskManager.Controllers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; + +import com.example.TaskManager.Models.Task; +import com.example.TaskManager.Security.CustomUserDetails; +import com.example.TaskManager.Services.TaskService; + +@Controller +public class Dashboard { + + @Autowired + private TaskService taskService; + + @GetMapping("/dashboard") + String dashboard(Model model, Authentication authentication) { + + // user details + CustomUserDetails userDetails = (CustomUserDetails) authentication.getPrincipal(); + model.addAttribute("userName", userDetails.getUsername()); + model.addAttribute("userEmail", userDetails.getEmail()); + + Long userId = userDetails.getId(); + + // each status percentage + model.addAttribute("overduePercentage", taskService.getPercentOfTasksByStatus("Overdue", userId)); + model.addAttribute("pendingPercentage", taskService.getPercentOfTasksByStatus("Pending", userId)); + model.addAttribute("inProgressPercentage", taskService.getPercentOfTasksByStatus("In Progress", userId)); + model.addAttribute("onHoldPercentage", taskService.getPercentOfTasksByStatus("On Hold", userId)); + model.addAttribute("completedPercentage", taskService.getPercentOfTasksByStatus("Completed", userId)); + + // Daily + Weekly Tasks List + model.addAttribute("weeklyTasks", taskService.getWeeklyTasks(userDetails.getId())); + model.addAttribute("todaysTasks", taskService.getDailyTasks(userDetails.getId())); + + // charts + model.addAttribute("totalCompletedTasks", taskService.totalCompletedTasks(userId)); + + model.addAttribute("totalNumTasks", taskService.totalNumTasks(userId)); + model.addAttribute("categoryNames", taskService.getCategoryNames()); + model.addAttribute("categoryCounts", taskService.getCategoryCounts(userId)); + + List allYears = taskService.allTaskYears(userId); + Map>> finalMap = new HashMap<>(); + + for (Integer year : allYears) { + + List rows = taskService.findTasksByYearWithQuarter(year, userId); + + // Convert raw rows into quarter tasks mapping + Map> quarters = new HashMap<>(); + quarters.put(1, new ArrayList<>()); + quarters.put(2, new ArrayList<>()); + quarters.put(3, new ArrayList<>()); + quarters.put(4, new ArrayList<>()); + + for (Object[] row : rows) { + int quarter = ((Number) row[row.length - 1]).intValue(); + quarters.get(quarter).add(row); + } + + finalMap.put(year, quarters); + } + + model.addAttribute("yearQuarterTasks", finalMap); + model.addAttribute("overdueTasks", taskService.allOverDueTasks(userId)); + model.addAttribute("years", allYears); + return "dashboard"; + } + + @PatchMapping("/completeDailyTask/{id}") + String completeDailyTask(Model model, @PathVariable("id") Long id, Authentication authentication) { + + CustomUserDetails userDetails = (CustomUserDetails) authentication.getPrincipal(); + + Task task = taskService.findTaskById(id); + if (task.getStatus().contains("Completed")) { + task.setStatus("Pending"); + } else { + task.setStatus("Completed"); + } + task.setUpdatedBy(userDetails.getUsername()); + taskService.updateTask(id, task); + + model.addAttribute("todaysTasks", taskService.getDailyTasks(userDetails.getId())); + + return "dashboard :: daily-tasks"; + } + + @PatchMapping("/completeWeeklyTask/{id}") + String completeWeeklyTask(Model model, + @PathVariable("id") Long id, + Authentication authentication) { + + CustomUserDetails userDetails = (CustomUserDetails) authentication.getPrincipal(); + + Task task = taskService.findTaskById(id); + if (task.getStatus().contains("Completed")) { + task.setStatus("Pending"); + } else { + task.setStatus("Completed"); + } + task.setUpdatedBy(userDetails.getUsername()); + taskService.updateTask(id, task); + + model.addAttribute("weeklyTasks", taskService.getWeeklyTasks(userDetails.getId())); + + return "dashboard :: weekly-tasks"; + } + +} \ No newline at end of file diff --git a/src/main/java/com/example/TaskManager/Controllers/LandingPage.java b/src/main/java/com/example/TaskManager/Controllers/LandingPage.java new file mode 100644 index 0000000..a072386 --- /dev/null +++ b/src/main/java/com/example/TaskManager/Controllers/LandingPage.java @@ -0,0 +1,16 @@ +package com.example.TaskManager.Controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class LandingPage { + + @GetMapping("/") + private String landingPage(){ + + return "landing-page"; + + } + +} diff --git a/src/main/java/com/example/TaskManager/Controllers/Login.java b/src/main/java/com/example/TaskManager/Controllers/Login.java new file mode 100644 index 0000000..75782fe --- /dev/null +++ b/src/main/java/com/example/TaskManager/Controllers/Login.java @@ -0,0 +1,32 @@ +package com.example.TaskManager.Controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +public class Login { + + @GetMapping("/login") + public String login( + @RequestParam(value = "error", required = false) String error, + @RequestParam(value = "register", required = false) String register, + @RequestParam(value = "logout", required = false) String logout, + Model model) { + + if (error != null) { + model.addAttribute("errorMessage", "Invalid username or password."); + } + + if (register != null) { + model.addAttribute("successMessage", "Account created successfully. Please log in."); + } + + if (logout != null) { + model.addAttribute("logoutMessage", "You have been logged out successfully."); + } + + return "login"; + } +} diff --git a/src/main/java/com/example/TaskManager/Controllers/Profile.java b/src/main/java/com/example/TaskManager/Controllers/Profile.java new file mode 100644 index 0000000..a65df04 --- /dev/null +++ b/src/main/java/com/example/TaskManager/Controllers/Profile.java @@ -0,0 +1,49 @@ +package com.example.TaskManager.Controllers; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +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.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; + +import com.example.TaskManager.Models.User; +import com.example.TaskManager.Security.CustomUserDetails; +import com.example.TaskManager.Services.UserService; + +@Controller +public class Profile { + + @Autowired + private UserService userService; + + @GetMapping("/profile") + private String profile(Model model, Authentication authentication) { + + // user details + CustomUserDetails userDetails = (CustomUserDetails) authentication.getPrincipal(); + model.addAttribute("userName", userDetails.getUsername()); + model.addAttribute("userEmail", userDetails.getEmail()); + + model.addAttribute("user", userDetails.convertToUser()); + + return "profile"; + + } + + @PostMapping("/updateProfile/update/{id}") + private String updateProfile(@PathVariable("id") Long id, + @ModelAttribute User userDetails, Authentication authentication) { + + + CustomUserDetails authDetails = (CustomUserDetails) authentication.getPrincipal(); + + userDetails.setUpdatedBy(authDetails.getUsername()); + userService.updateUser(id, userDetails); + return "redirect:/dashboard"; + + } + +} diff --git a/src/main/java/com/example/TaskManager/Controllers/Register.java b/src/main/java/com/example/TaskManager/Controllers/Register.java new file mode 100644 index 0000000..e5dbfd3 --- /dev/null +++ b/src/main/java/com/example/TaskManager/Controllers/Register.java @@ -0,0 +1,33 @@ +package com.example.TaskManager.Controllers; + +import com.example.TaskManager.Models.User; +import com.example.TaskManager.Services.UserService; +import lombok.RequiredArgsConstructor; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; + +@Controller +@RequiredArgsConstructor +public class Register { + + private final UserService userService; + private final PasswordEncoder passwordEncoder; + + @GetMapping("/register") + public String register(org.springframework.ui.Model model){ + model.addAttribute("user", new User()); + return "register"; + } + + @PostMapping("/register") + public String createAccount(@ModelAttribute("user") User user){ + user.setPassword(passwordEncoder.encode(user.getPassword())); + user.setCreatedBy("Admin"); + userService.save(user); + + return "redirect:/login?register=true"; + } +} diff --git a/src/main/java/com/example/TaskManager/Controllers/Tasks.java b/src/main/java/com/example/TaskManager/Controllers/Tasks.java new file mode 100644 index 0000000..c00c538 --- /dev/null +++ b/src/main/java/com/example/TaskManager/Controllers/Tasks.java @@ -0,0 +1,128 @@ +package com.example.TaskManager.Controllers; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestParam; +import com.example.TaskManager.Models.Task; +import com.example.TaskManager.Security.CustomUserDetails; +import com.example.TaskManager.Services.TaskService; + + +@Controller +public class Tasks { + + @Autowired + private TaskService taskService; + + @GetMapping("/tasks") + public String tasks( + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "25") int size, + @RequestParam(defaultValue = "Active") String tab, // NEW: Default to "Active" + Model model, + Authentication authentication) { + + loadTaskData(model, "", page, size, null, null, tab, "due_date", authentication); + return "viewTasks"; + } + + @GetMapping("/tasks/data") + public String loadTable( + @RequestParam(defaultValue = "") String search, + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "25") int size, + @RequestParam(required = false) String status, + @RequestParam(required = false) String priority, + @RequestParam(defaultValue = "Active") String tab, // NEW + Model model, + Authentication authentication) { + + loadTaskData(model, search, page, size, status, priority, tab, "due_date", authentication); + + return "viewTasks :: results-block"; + } + + @DeleteMapping("/deleteTask/{id}") + public String deleteTask(@PathVariable Long id, + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "25") int size, + @RequestParam(defaultValue = "") String search, + @RequestParam(required = false) String status, + @RequestParam(required = false) String priority, + @RequestParam(defaultValue = "Active") String tab, // NEW + Model model, + Authentication authentication) { + + taskService.deleteTask(id); + + loadTaskData(model, search, page, size, status, priority, tab, "due_date", authentication); + return "viewTasks :: results-block"; + } + + @PatchMapping("/complateTask/{id}") + public String completeTask(@PathVariable Long id, + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "25") int size, + @RequestParam(defaultValue = "") String search, + @RequestParam(required = false) String status, + @RequestParam(required = false) String priority, + @RequestParam(defaultValue = "Active") String tab, // NEW + Model model, + Authentication authentication) { + + CustomUserDetails userDetails = (CustomUserDetails) authentication.getPrincipal(); + + Task task = taskService.findTaskById(id); + + if (task.getStatus().contains("Completed")){ + task.setStatus("Pending"); + }else{ + task.setStatus("Completed"); + } + task.setUpdatedBy(userDetails.getUsername()); + taskService.updateTask(id, task); + + loadTaskData(model, search, page, size, status, priority, tab, "due_date", authentication); + return "viewTasks :: results-block"; + } + + private void loadTaskData( + Model model, + String search, + int page, + int size, + String status, + String priority, + String tab, + String sortByColumn, + Authentication authentication) { + + CustomUserDetails userDetails = (CustomUserDetails) authentication.getPrincipal(); + Long userId = (userDetails.getId() == null) ? (long) 0 : userDetails.getId(); + + Page taskPage = taskService.searchTasksDynamic( + search, + status, + priority, + tab, + page, + size, + sortByColumn, + userId); + + model.addAttribute("taskPage", taskPage); + model.addAttribute("currentTab", tab); // NEW: Add the current tab to the model + + // user details in sidebar + model.addAttribute("userName", userDetails.getUsername()); + model.addAttribute("userEmail", userDetails.getEmail()); + } + +} \ No newline at end of file diff --git a/src/main/java/com/example/TaskManager/DTO/TasksWithCategory.java b/src/main/java/com/example/TaskManager/DTO/TasksWithCategory.java new file mode 100644 index 0000000..b62995d --- /dev/null +++ b/src/main/java/com/example/TaskManager/DTO/TasksWithCategory.java @@ -0,0 +1,29 @@ +package com.example.TaskManager.DTO; + +import org.springframework.format.annotation.DateTimeFormat; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TasksWithCategory { + + private Long Id; + + private String title; + + private String description; + + private String status; + + @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm") + private java.sql.Timestamp dueDate; + + private String category; + + private String priority; + +} diff --git a/src/main/java/com/example/TaskManager/Models/Category.java b/src/main/java/com/example/TaskManager/Models/Category.java new file mode 100644 index 0000000..315ba85 --- /dev/null +++ b/src/main/java/com/example/TaskManager/Models/Category.java @@ -0,0 +1,58 @@ +package com.example.TaskManager.Models; + +import java.time.LocalDateTime; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.PrePersist; +import jakarta.persistence.PreUpdate; +import jakarta.persistence.Table; +import lombok.*; + + +@Entity +@Table(name = "categories") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class Category { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column + private String categoryName; + + @Column + private String description; + + @Column(nullable = false) + private LocalDateTime createdAt; + + @Column(nullable = false) + private String createdBy; + + @Column + private LocalDateTime updatedAt; + + @Column + private String updatedBy; + + @PrePersist + protected void onCreate() { + LocalDateTime now = LocalDateTime.now(); + this.createdAt = now; + this.updatedAt = now; + } + + @PreUpdate + protected void onUpdate() { + this.updatedAt = LocalDateTime.now(); + } + +} diff --git a/src/main/java/com/example/TaskManager/Models/Task.java b/src/main/java/com/example/TaskManager/Models/Task.java new file mode 100644 index 0000000..5d98cd2 --- /dev/null +++ b/src/main/java/com/example/TaskManager/Models/Task.java @@ -0,0 +1,76 @@ +package com.example.TaskManager.Models; + +import java.time.LocalDateTime; + +import org.springframework.format.annotation.DateTimeFormat; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.PrePersist; +import jakarta.persistence.PreUpdate; +import jakarta.persistence.Table; +import lombok.*; + + +@Entity +@Table(name = "tasks") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class Task { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long Id; + + @Column + private String title; + + @Column + private String description; + + @Column + private String status; + + @Column + @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm") + LocalDateTime dueDate; + + @Column + private Long categoryId; + + @Column + private String priority; + + @Column + private Long assignedTo; + + @Column(nullable = false) + private LocalDateTime createdAt; + + @Column(nullable = false) + private String createdBy; + + @Column + private LocalDateTime updatedAt; + + @Column + private String updatedBy; + + @PrePersist + protected void onCreate() { + LocalDateTime now = LocalDateTime.now(); + this.createdAt = now; + this.updatedAt = now; + } + + @PreUpdate + protected void onUpdate() { + this.updatedAt = LocalDateTime.now(); + } + +} diff --git a/src/main/java/com/example/TaskManager/Models/User.java b/src/main/java/com/example/TaskManager/Models/User.java new file mode 100644 index 0000000..c90258f --- /dev/null +++ b/src/main/java/com/example/TaskManager/Models/User.java @@ -0,0 +1,62 @@ +package com.example.TaskManager.Models; + +import java.time.LocalDateTime; +import jakarta.persistence.*; +import lombok.*; + + +@Entity +@Table(name = "users") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class User { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, unique = true) + private String username; + + @Column(nullable = false) + private String password; + + @Column(nullable = false, unique = true) + private String email; + + @Column + private String firstName; + + @Column + private String lastName; + + @Column(unique = true) + private String phoneNumber; + + @Column(nullable = false) + private LocalDateTime createdAt; + + @Column(nullable = false) + private String createdBy; + + @Column + private LocalDateTime updatedAt; + + @Column + private String updatedBy; + + @PrePersist + protected void onCreate() { + LocalDateTime now = LocalDateTime.now(); + this.createdAt = now; + this.updatedAt = now; + } + + @PreUpdate + protected void onUpdate() { + this.updatedAt = LocalDateTime.now(); + } + +} diff --git a/src/main/java/com/example/TaskManager/Repo/CategoryRepo.java b/src/main/java/com/example/TaskManager/Repo/CategoryRepo.java new file mode 100644 index 0000000..6697663 --- /dev/null +++ b/src/main/java/com/example/TaskManager/Repo/CategoryRepo.java @@ -0,0 +1,23 @@ +package com.example.TaskManager.Repo; + +import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import com.example.TaskManager.Models.Category; + +@Repository +public interface CategoryRepo extends JpaRepository { + + @Query(value = "SELECT * FROM categories", nativeQuery = true) + List findAllCategories(); + + @Query(value = "SELECT * FROM categories WHERE categoryName =:categoryName", nativeQuery = true) + List allCategoriesByName(@Param("categoryName") String category); + + @Query(value = "SELECT category_name FROM categories WHERE id =:categoryId", nativeQuery = true) + Category allCategoriesByName(@Param("categoryId") Long categoryId); + +} diff --git a/src/main/java/com/example/TaskManager/Repo/TaskRepo.java b/src/main/java/com/example/TaskManager/Repo/TaskRepo.java new file mode 100644 index 0000000..8c28291 --- /dev/null +++ b/src/main/java/com/example/TaskManager/Repo/TaskRepo.java @@ -0,0 +1,252 @@ +package com.example.TaskManager.Repo; + +import java.util.List; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import com.example.TaskManager.DTO.TasksWithCategory; +import com.example.TaskManager.Models.Task; + +@Repository +public interface TaskRepo extends JpaRepository { + + @Query(value = """ + SELECT * FROM tasks + WHERE assigned_to = :userId + ORDER BY due_date DESC + """, nativeQuery = true) + Page findAllTasks(Pageable pageable, + @Param("userId") Long userId); + + @Query(value = """ + SELECT t.id, t.title, t.description, t.status, t.due_date, + c.category_name, t.priority + FROM tasks t + JOIN categories c + ON t.category_id = c.id + WHERE t.status <> 'Completed' + AND assigned_to = :userId + ORDER BY t.due_date DESC""", nativeQuery = true) + Page findAllTasksWithCategories(Pageable pageable, + @Param("userId") Long userId); + + @Query(value = """ + SELECT + t.id, t.title, t.description, t.status, t.due_date, + c.category_name, t.priority + FROM tasks t + JOIN categories c ON t.category_id = c.id + WHERE t.category_id = :categoryId + AND assigned_to = :userId + """, nativeQuery = true) + Page allTaskByCategory(Pageable pageable, + @Param("categoryId") int categoryId, + @Param("userId") Long userId); + + @Query(value = "SELECT * FROM tasks WHERE priority = ?", nativeQuery = true) + Page allTasksByPriority(Pageable pageable, String priority); + + @Query(value = """ + SELECT t.id, t.title, t.description, t.status, t.due_date, + c.category_name, t.priority + FROM tasks t + JOIN categories c ON t.category_id = c.id + WHERE t.status = :status + AND assigned_to = :userId + ORDER BY DATE(t.due_date) DESC, TIME(t.due_date) + """, nativeQuery = true) + List allTasksByStatus(@Param("status") String Status, + @Param("userId") Long userId); + + @Query(value = """ + SELECT * + FROM tasks + WHERE due_date >= :date + AND due_date < DATE_ADD(:date, INTERVAL 1 DAY) + AND assigned_to = :userId + """, nativeQuery = true) + List allTasksByDate(@Param("date") java.time.LocalDate date, + @Param("userId") Long userId); + + @Query(value = """ + SELECT + t.id, t.title, t.description, t.status, t.due_date, + c.category_name, t.priority + FROM tasks t + JOIN categories c ON t.category_id = c.id + WHERE due_date >= CURRENT_DATE() + AND due_date < DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY) + AND assigned_to = :userId + ORDER BY FIELD(t.status, 'Completed'), due_date + """, nativeQuery = true) + List getDailyTasks(@Param("userId") Long userid); + + @Query(value = """ + SELECT DISTINCT YEAR(due_date) + FROM tasks + WHERE assigned_to = :userId + ORDER BY YEAR(due_date) + """, nativeQuery = true) + List allTaskYears(@Param("userId") Long userId); + + @Query(value = """ + SELECT t.id, t.title, t.description, t.status, t.due_date, + c.category_name, t.priority, QUARTER(t.due_date) AS quarter + FROM tasks t + JOIN categories c ON t.category_id = c.id + WHERE YEAR(t.due_date) = :year + AND assigned_to = :userId + ORDER BY QUARTER(t.due_date), t.due_date + """, nativeQuery = true) + List findTasksByYearWithQuarter(@Param("year") int year, + @Param("userId") Long userId); + + @Modifying + @Query(value = """ + UPDATE tasks + SET status = 'Overdue' + WHERE due_date <= NOW() + AND (status = 'Pending' OR status = 'On Hold' OR Status = 'In Progress') + """, nativeQuery = true) + int updateStatusForOverdueTasks(); + + @Query(value = """ + SELECT + t.id, + t.title, + t.description, + t.status, + t.due_date, + c.category_name, + t.priority + FROM tasks t + JOIN categories c ON t.category_id = c.id + WHERE assigned_to = :userId + + AND ( + :tabStatus IS NULL OR :tabStatus = '' OR + (:tabStatus = 'All' AND 1=1) OR -- 'All' tab shows all records + (:tabStatus = 'Completed' AND t.status = 'Completed') OR + (:tabStatus = 'Overdue' AND t.status = 'Overdue') OR + (:tabStatus = 'Active' AND t.status NOT IN ('Completed', 'Overdue')) + ) + + AND ( + :tabStatus = 'All' OR :tabStatus = 'Completed' OR t.status <> 'Completed' + ) + + -- SEARCH filter (ignored when NULL) + AND ( + :search IS NULL OR :search = '' OR + CONCAT_WS(' ', + t.id, + t.title, + t.description, + t.status, + DATE_FORMAT(t.due_date, '%Y-%m-%d'), + DATE_FORMAT(t.due_date, '%Y/%m/%d'), + DATE_FORMAT(t.due_date, '%m/%d/%Y'), + DATE_FORMAT(t.due_date, '%d/%m/%Y'), + c.category_name, + t.priority + ) LIKE CONCAT('%', :search, '%') + ) + + -- STATUS filter (ignored when NULL) + AND ( + :status IS NULL OR :status = '' OR t.status = :status + ) + + -- PRIORITY filter (ignored when NULL) + AND ( + :priority IS NULL OR :priority = '' OR t.priority = :priority + ) + """, nativeQuery = true) + Page searchTasksDynamic( + Pageable pageable, + @Param("search") String search, + @Param("status") String status, + @Param("priority") String priority, + @Param("tabStatus") String tabStatus, + @Param("userId") Long userId); + + @Query(value = """ + SELECT IFNULL(FLOOR(COUNT(status) / (SELECT COUNT(status) FROM tasks where assigned_to = :userId) * 100), 0) AS 'average' + FROM tasks + WHERE status = :status + AND assigned_to = :userId + """, nativeQuery = true) + int getPercentOfTasksByStatus(@Param("status") String Status, + @Param("userId") Long userID); + + @Query(value = """ + SELECT + t.id, + t.title, + t.description, + t.status, + t.due_date, + c.category_name, + t.priority + FROM tasks t + JOIN categories c ON t.category_id = c.id + + WHERE due_date > DATE_ADD(CURDATE(), INTERVAL 1 DAY) + AND due_date <= DATE_ADD(CURDATE(), INTERVAL 8 DAY) + AND assigned_to = :userId + ORDER BY FIELD(t.status, 'Completed'), due_date + + """, nativeQuery = true) + List getWeeklyTasks(@Param("userId") Long userId); + + @Query(value = """ + + SELECT FLOOR(COUNT(*) * 100.0 / (SELECT COUNT(*) FROM tasks WHERE assigned_to = :userId)) + AS completedPercentaged + FROM tasks + WHERE status = 'Completed' + AND assigned_to = :userId + """, nativeQuery = true) + double getCompletedPercentage(@Param("userId") Long userId); + + @Query(value = """ + select COUNT(*) + FROM tasks + where status = 'Completed' + AND assigned_to = :userId + """, nativeQuery = true) + int totalCompletedTasks(@Param("userId") Long userId); + + @Query(value = """ + SELECT COUNT(*) as total_records + FROM tasks + WHERE assigned_to = :userId + """, nativeQuery = true) + int totalNumTasks(@Param("userId") Long userId); + + @Query(value = """ + SELECT category_name + FROM categories + ORDER BY id + """, nativeQuery = true) + String[] getCategoryNames(); + + @Query(value = """ + SELECT + COUNT(t.id) AS category_count + FROM categories c + LEFT JOIN tasks t + ON t.category_id = c.id + AND t.assigned_to = :userId + GROUP BY c.id, c.category_name + ORDER BY c.id + """, nativeQuery = true) + int[] getCategoryCounts(@Param("userId") Long userId); + +} diff --git a/src/main/java/com/example/TaskManager/Repo/UserRepo.java b/src/main/java/com/example/TaskManager/Repo/UserRepo.java new file mode 100644 index 0000000..820056e --- /dev/null +++ b/src/main/java/com/example/TaskManager/Repo/UserRepo.java @@ -0,0 +1,22 @@ +package com.example.TaskManager.Repo; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; +import com.example.TaskManager.Models.User; + + +@Repository +public interface UserRepo extends JpaRepository{ + + + @Query(value = "SELECT * FROM users u", nativeQuery = true) + Page findAllUsers(Pageable pageable); + + Optional findByUsername(String username); + Optional findByEmail(String email); + +} diff --git a/src/main/java/com/example/TaskManager/Security/CustomUserDetailService.java b/src/main/java/com/example/TaskManager/Security/CustomUserDetailService.java new file mode 100644 index 0000000..2a356de --- /dev/null +++ b/src/main/java/com/example/TaskManager/Security/CustomUserDetailService.java @@ -0,0 +1,25 @@ +package com.example.TaskManager.Security; + +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.example.TaskManager.Repo.UserRepo; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class CustomUserDetailService implements UserDetailsService{ + + private final UserRepo userRepo; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + return userRepo.findByUsername(username) + .map(CustomUserDetails::new) + .orElseThrow(() -> new UsernameNotFoundException("User not found")); + } + +} \ No newline at end of file diff --git a/src/main/java/com/example/TaskManager/Security/CustomUserDetails.java b/src/main/java/com/example/TaskManager/Security/CustomUserDetails.java new file mode 100644 index 0000000..accca8d --- /dev/null +++ b/src/main/java/com/example/TaskManager/Security/CustomUserDetails.java @@ -0,0 +1,72 @@ +package com.example.TaskManager.Security; + +import java.util.Collection; +import java.util.List; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import com.example.TaskManager.Models.User; + +public class CustomUserDetails implements UserDetails { + + private final User user; + + public CustomUserDetails(User user) { + this.user = user; + } + + @Override + public Collection getAuthorities() { + return List.of(new SimpleGrantedAuthority("ROLE_USER")); + } + + @Override + public String getPassword() { + return user.getPassword(); + } + + @Override + public String getUsername() { + return user.getUsername(); + } + + public String getEmail() { + return user.getEmail(); + } + + public String getFirstName() { + return user.getFirstName(); + } + + public String getLastName() { + return user.getLastName(); + } + + public String getPhoneNumber() { + return user.getPhoneNumber(); + } + + public Long getId() { + return user.getId(); + } + + + public User convertToUser(){ + + User user = new User(); + + user.setId(getId()); + user.setPassword(getPassword()); + user.setUsername(getUsername()); + user.setFirstName(getFirstName()); + user.setLastName(getLastName()); + user.setEmail(getEmail()); + user.setPhoneNumber(getPhoneNumber()); + + return user; + + } + +} diff --git a/src/main/java/com/example/TaskManager/Security/SecurityConfig.java b/src/main/java/com/example/TaskManager/Security/SecurityConfig.java new file mode 100644 index 0000000..99f60cf --- /dev/null +++ b/src/main/java/com/example/TaskManager/Security/SecurityConfig.java @@ -0,0 +1,59 @@ +package com.example.TaskManager.Security; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.crypto.factory.PasswordEncoderFactories; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; + +import org.springframework.beans.factory.annotation.Value; + +@Configuration +@EnableWebSecurity +public class SecurityConfig { + + private final CustomUserDetailService customUserDetailsService; + private final String rememberMeKey; + + public SecurityConfig(CustomUserDetailService customUserDetailsService, + @Value("${security.rememberme.key}") String rememberMeKey) { + this.customUserDetailsService = customUserDetailsService; + this.rememberMeKey = rememberMeKey; + } + + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + + http + .authorizeHttpRequests(auth -> auth + .requestMatchers("/", "/login", "/register").permitAll() + .anyRequest().authenticated()) + .formLogin(form -> form + .loginPage("/login") + .loginProcessingUrl("/login") + .defaultSuccessUrl("/dashboard", true) + .failureUrl("/login?error=true") + .permitAll()) + .logout(logout -> logout + .logoutUrl("/logout") + .logoutSuccessUrl("/login?logout=true") + .deleteCookies("JSESSIONID") + .invalidateHttpSession(true) + .permitAll()) + .rememberMe(r -> r + .rememberMeParameter("remember-me") + .tokenValiditySeconds(7 * 24 * 60 * 60) + .key(rememberMeKey) + .userDetailsService(customUserDetailsService)); + + return http.build(); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return PasswordEncoderFactories.createDelegatingPasswordEncoder(); + } + +} diff --git a/src/main/java/com/example/TaskManager/Services/CategoryService.java b/src/main/java/com/example/TaskManager/Services/CategoryService.java new file mode 100644 index 0000000..b4b0992 --- /dev/null +++ b/src/main/java/com/example/TaskManager/Services/CategoryService.java @@ -0,0 +1,26 @@ +package com.example.TaskManager.Services; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.example.TaskManager.Models.Category; +import com.example.TaskManager.Repo.CategoryRepo; + +@Service +public class CategoryService { + + @Autowired + private CategoryRepo categoryRepo; + + public List findAll(){ + return categoryRepo.findAll(); + } + + public List findAllCategories(){ + return categoryRepo.findAllCategories(); + } + + +} diff --git a/src/main/java/com/example/TaskManager/Services/ScheduledService.java b/src/main/java/com/example/TaskManager/Services/ScheduledService.java new file mode 100644 index 0000000..0664eca --- /dev/null +++ b/src/main/java/com/example/TaskManager/Services/ScheduledService.java @@ -0,0 +1,32 @@ +package com.example.TaskManager.Services; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.example.TaskManager.Repo.TaskRepo; + +@Service +public class ScheduledService { + + + @Autowired + private TaskRepo taskRepo; + + /* + update all tasks that have a status of Pending and have passed there + due date to have a status of Overdue. + There check happends every 8 hours + 8 hours = 8 * 60 minutes * 60 seconds * 1000 milliseconds = 28800000 + */ + @Scheduled(fixedRate = 900000, initialDelay = 5000) + @Transactional + void updateStatusForOverdueTasks(){ + + int updatedCount = taskRepo.updateStatusForOverdueTasks(); + System.out.println(updatedCount + " Records updated"); + + } + +} diff --git a/src/main/java/com/example/TaskManager/Services/TaskService.java b/src/main/java/com/example/TaskManager/Services/TaskService.java new file mode 100644 index 0000000..9b91838 --- /dev/null +++ b/src/main/java/com/example/TaskManager/Services/TaskService.java @@ -0,0 +1,139 @@ +package com.example.TaskManager.Services; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; + +import com.example.TaskManager.DTO.TasksWithCategory; +import com.example.TaskManager.Models.Task; +import com.example.TaskManager.Repo.TaskRepo; + +@Service +public class TaskService { + + @Autowired + private TaskRepo taskRepo; + + public void saveTask(Task task) { + taskRepo.save(task); + } + + public List findAll() { + return taskRepo.findAll(); + } + + public List allOverDueTasks(Long assignedTo) { + return taskRepo.allTasksByStatus("Overdue", assignedTo); + } + + public List allTaskYears(Long assignedTo) { + return taskRepo.allTaskYears(assignedTo); + } + + public Page findAllTasks(int pageNo, int pageSize, Long assignedTo) { + Pageable pageable = PageRequest.of(pageNo, pageSize); + return taskRepo.findAllTasks(pageable, assignedTo); + } + + public Page findAllTasksWithCategories(int pageNo, int pageSize, Long assignedTo) { + Pageable pageable = PageRequest.of(pageNo, pageSize ); + return taskRepo.findAllTasksWithCategories(pageable, assignedTo); + } + + public Page searchTasksDynamic( + String search, + String status, + String priority, + String tab, + int page, + int size, + String sortByColumn, + Long assignedTo) { + + Pageable pageable = PageRequest.of(page, size, Sort.by(sortByColumn)); + + // convert blank to null. better for sql handling + search = (search == null || search.isBlank()) ? null : search.trim(); + status = (status == null || status.isBlank()) ? null : status.trim(); + priority = (priority == null || priority.isBlank()) ? null : priority.trim(); + + return taskRepo.searchTasksDynamic(pageable, search, status, priority, tab, assignedTo); + } + + public List getDailyTasks(Long assignedTo) { + return taskRepo.getDailyTasks(assignedTo); + } + + public List allTasksByDate(LocalDate date, Long assignedTo) { + return taskRepo.allTasksByDate(date, assignedTo); + } + + public List findTasksByYearWithQuarter(Integer year,Long assignedTo) { + return taskRepo.findTasksByYearWithQuarter(year, assignedTo); + } + + public Task findTaskById(Long id) { + return taskRepo.findById(id).get(); + } + + public void updateTask(Long taskId, Task newTask) { + taskRepo.findById(taskId) + .orElseThrow(() -> new RuntimeException("No Task with id:" + taskId + "found")); + + Task task = taskRepo.findById(taskId).get(); + + task.setTitle(newTask.getTitle()); + task.setDescription(newTask.getDescription()); + task.setPriority(newTask.getPriority()); + task.setStatus(newTask.getStatus()); + task.setCategoryId(newTask.getCategoryId()); + task.setDueDate(newTask.getDueDate()); + task.setUpdatedAt(LocalDateTime.now()); + task.setUpdatedBy(newTask.getUpdatedBy()); + + taskRepo.save(task); + + } + + public void deleteTask(Long taskId) { + taskRepo.findById(taskId) + .orElseThrow(() -> new RuntimeException("No Task with id:" + taskId + "found")); + taskRepo.deleteById(taskId); + } + + public int getPercentOfTasksByStatus(String status, Long assignedTo) { + return taskRepo.getPercentOfTasksByStatus(status,assignedTo); + } + + public List getWeeklyTasks(Long assignedTo) { + return taskRepo.getWeeklyTasks(assignedTo); + } + + public double getCompletedPercentage(Long assignedTo) { + return taskRepo.getCompletedPercentage(assignedTo); + } + + public int totalNumTasks(Long assignedTo) { + return taskRepo.totalNumTasks(assignedTo); + } + + public int totalCompletedTasks(Long assignedTo){ + return taskRepo.totalCompletedTasks(assignedTo); + } + + public String[] getCategoryNames() { + return taskRepo.getCategoryNames(); + } + + public int[] getCategoryCounts(Long assignedTo) { + return taskRepo.getCategoryCounts(assignedTo); + } + +} diff --git a/src/main/java/com/example/TaskManager/Services/UserService.java b/src/main/java/com/example/TaskManager/Services/UserService.java new file mode 100644 index 0000000..b7c5f55 --- /dev/null +++ b/src/main/java/com/example/TaskManager/Services/UserService.java @@ -0,0 +1,51 @@ +package com.example.TaskManager.Services; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import com.example.TaskManager.Models.User; +import com.example.TaskManager.Repo.UserRepo; + +@Service +public class UserService { + + @Autowired + private UserRepo userRepo; + + public List findAll(){ + return userRepo.findAll(); + } + + public Page findAllUsers(int pageNo, int pageSize){ + Pageable pageable = PageRequest.of(pageNo, pageSize); + return userRepo.findAllUsers(pageable); + } + + + public void save(User user){ + + userRepo.save(user); + + } + + + public void updateUser(Long id, User newUserDetails){ + + User user = userRepo.findById(id).get(); + + user.setFirstName(newUserDetails.getFirstName()); + user.setLastName(newUserDetails.getLastName()); + user.setUsername(newUserDetails.getUsername()); + user.setEmail(newUserDetails.getEmail()); + user.setPhoneNumber(newUserDetails.getPhoneNumber()); + + userRepo.save(user); + + } + +} diff --git a/src/main/java/com/example/TaskManager/TaskManagerApplication.java b/src/main/java/com/example/TaskManager/TaskManagerApplication.java new file mode 100644 index 0000000..76caa85 --- /dev/null +++ b/src/main/java/com/example/TaskManager/TaskManagerApplication.java @@ -0,0 +1,15 @@ +package com.example.TaskManager; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication +@EnableScheduling +public class TaskManagerApplication { + + public static void main(String[] args) { + SpringApplication.run(TaskManagerApplication.class, args); + } + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..adc90ff --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,19 @@ +spring.application.name=TaskManager + + +spring.application.name=task_manager +spring.datasource.url=jdbc:mysql://192.168.0.150:3306/task_manager?useSSL=false&serverTimezone=UTC +spring.datasource.username=TasksUser +spring.datasource.password=MckopServerTasks +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + +spring.jpa.hibernate.ddl-auto=update +spring.jpa.properties.hibernate.format_sql=true +spring.jpa.properties.hibernate.use_sql_comments=true +spring.jpa.show-sql=true +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect + +security.rememberme.key=DevSecretKey + +server.address=0.0.0.0 +server.port=8085 diff --git a/src/main/resources/static/images/landingPageTable.png b/src/main/resources/static/images/landingPageTable.png new file mode 100644 index 0000000000000000000000000000000000000000..33ff899de4a9098f0f396406caac2a7b7c49f79d GIT binary patch literal 217431 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

aIEW2PLhbvd*iWQYS6i}C*Xlx+~=po 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≦6t(_=aQ5*GU#|J_Ijj?!(<0P|1AVS?#8zzLl$gs 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

Fg(4lI~pak|HM4;S+FQTtw9g$FvvuV4K*G$ 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/templates/component/header.html b/src/main/resources/templates/component/header.html new file mode 100644 index 0000000..ff315b2 --- /dev/null +++ b/src/main/resources/templates/component/header.html @@ -0,0 +1,23 @@ +

\ No newline at end of file diff --git a/src/main/resources/templates/component/nav-sidebar.html b/src/main/resources/templates/component/nav-sidebar.html new file mode 100644 index 0000000..4489c87 --- /dev/null +++ b/src/main/resources/templates/component/nav-sidebar.html @@ -0,0 +1,74 @@ +
+
+ +
+
+ Menu +
+ +
+ +
+ + + +
+
+
+ +
+
+
User Account
+ user@example.com +
+ + + +
+ +
+
+
+
+ \ No newline at end of file diff --git a/src/main/resources/templates/createTask.html b/src/main/resources/templates/createTask.html new file mode 100644 index 0000000..103cf65 --- /dev/null +++ b/src/main/resources/templates/createTask.html @@ -0,0 +1,102 @@ + + + + + + + Create Task + + + + + + + + +
+ +
+
+ +

Create Task

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/dashboard.html b/src/main/resources/templates/dashboard.html new file mode 100644 index 0000000..63d9f17 --- /dev/null +++ b/src/main/resources/templates/dashboard.html @@ -0,0 +1,504 @@ + + + + + + + + + + Dashboard + + + + + + + + + + + + +
+ +
+
+ +
+ +
+ +
+ + +
+
+
+

Daily Tasks

+
+
    +
  • + +
    + +
    + + Task Title
    + 00:00 +
    + Cat +
    +
  • +
  • + All caught up. +
  • +
+
+
+
+ +
+
+

Weekly Tasks

+
+
    +
  • +
    +
    + + Title
    + Date +
    + Cat +
    +
  • +
  • + Clear week ahead. +
  • +
+
+
+
+
+ +
+
+

Quarterly Overview

+ + + +
+
+ +
+
+
+
Q1
+
+
    + +
  • + Title +
    + Category + Date +
    +
  • + +
  • + No tasks +
  • +
+
+
+
+
+
+
+
+
+ +
+ +
+
+

Volume

+
+ +
+
+
+ +
+
+

Completion

+
+ +
+
+
+ +
+
+

Status Breakdown

+ +
+
+
+ Overdue + 0% +
+
+
+
+
+
+ +
+
+ Pending + 0% +
+
+
+
+
+ +
+
+ In Progress + 0% +
+
+
+
+
+ +
+
+ On Hold + 0% +
+
+
+
+
+ +
+
+ Completed + 0% +
+
+
+
+
+
+
+
+
+ +
+ + + +
+
+ +
+ + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/landing-page.html b/src/main/resources/templates/landing-page.html new file mode 100644 index 0000000..40f38ba --- /dev/null +++ b/src/main/resources/templates/landing-page.html @@ -0,0 +1,257 @@ + + + + + + + + TaskManager - Get Things Done, Retro Style. + + + + + + + + + + + +
+
+
+
+

+ STOP OVERTHINKING.
START DOING. +

+

+ A minimalist task manager with a retro soul. + Cut through the noise with a tool designed for focus, + not distraction. +

+ +
+ +
+
+
+
+
+
+
+
+
+ Image of Task Table +
+
+
+
+
+
+
+
+ + +
+
+
+
+

Retro Simple. Modern Power.

+

We stripped away the bloat. What's left is pure productivity engine.

+
+
+
+
+
+ +
+

HTMX Powered Speed

+

Experience single-page-application speed without the complex JavaScript frameworks. It just feels snappy.

+
+
+
+ +
+

Dynamic Filtering

+

Instantly slice and dice your tasks by status, priority, or search terms. Find what matters, fast.

+
+
+
+ +
+

Secure & Simple

+

Standard Spring Security keeps your data safe. No complex settings, just secure by default.

+
+
+
+
+ +
+
+

Ready to get organized the old-school way?

+ + Start Now - It's Free + +
+
+ + +
+
+

+ © 2025 TaskManager.
+ Built with Spring Boot & HTMX. +

+
+
+ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html new file mode 100644 index 0000000..49c02d1 --- /dev/null +++ b/src/main/resources/templates/login.html @@ -0,0 +1,77 @@ + + + + + + + Login + + + + + + + +
+
+

Task Manager

+
+
+ +
+
+

Login

+ + + + + + + + + + +
+ + + + + + + + +
+ + +
+ + + + + +
+
+
+ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/profile.html b/src/main/resources/templates/profile.html new file mode 100644 index 0000000..9776462 --- /dev/null +++ b/src/main/resources/templates/profile.html @@ -0,0 +1,89 @@ + + + + + + + Profile + + + + + + + + + + +
+ +
+
+ +

Update Profile

+ +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+
+
+ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/register.html b/src/main/resources/templates/register.html new file mode 100644 index 0000000..3898e6e --- /dev/null +++ b/src/main/resources/templates/register.html @@ -0,0 +1,60 @@ + + + + + + + CreateAccount + + + + + + + + + +
+
+

Task Manager

+
+
+ +
+
+

Create Account

+ +
+ + + + + + + + + + + + +
+ Login +
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/viewTasks.html b/src/main/resources/templates/viewTasks.html new file mode 100644 index 0000000..ede024f --- /dev/null +++ b/src/main/resources/templates/viewTasks.html @@ -0,0 +1,246 @@ + + + + + + + + + ViewTasks + + + + + + + + + +
+ +
+ +
+ +
+
+ + +
+
+ +
+
+ Loading... +
+
+ +
+
+ + + +
+
+
+
+ +
+
+ + + + + Page 1 + of 1 + + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CompletedTitleDescriptionStatusDue DateCategoryPriorityActions
Task TitleDesc + StatusDateCatHigh +
+ Edit + + +
+
+ + No tasks found. +
+
+
+
+ +
+ + + + + + + \ No newline at end of file diff --git a/src/test/java/com/example/TaskManager/TaskManagerApplicationTests.java b/src/test/java/com/example/TaskManager/TaskManagerApplicationTests.java new file mode 100644 index 0000000..b61ef4d --- /dev/null +++ b/src/test/java/com/example/TaskManager/TaskManagerApplicationTests.java @@ -0,0 +1,13 @@ +package com.example.TaskManager; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class TaskManagerApplicationTests { + + @Test + void contextLoads() { + } + +}