From 6a839b7d287c458aeaea984aa30b2abf40cfb6c7 Mon Sep 17 00:00:00 2001 From: mirrerror Date: Thu, 26 Oct 2023 21:05:04 +0300 Subject: [PATCH 01/12] update package-lock.json --- package-lock.json | 6 ++++ .../expensetrackerfaf/web/package-lock.json | 28 ++++++------------- 2 files changed, 14 insertions(+), 20 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..4cd0ed2 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "ExpenseTrackerFAF", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/package-lock.json b/src/main/java/com/faf223/expensetrackerfaf/web/package-lock.json index d332004..4c8d4c8 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/package-lock.json +++ b/src/main/java/com/faf223/expensetrackerfaf/web/package-lock.json @@ -656,9 +656,9 @@ } }, "node_modules/@sveltejs/kit": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.25.1.tgz", - "integrity": "sha512-pD8XsvNJNgTNkFngNlM60my/X8dXWPKVzN5RghEQr0NjGZmuCjy49AfFu2cGbZjNf5pBcqd2RCNMW912P5fkhA==", + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.27.0.tgz", + "integrity": "sha512-a1wPIq2uO3RsTmV+KbA4venOgCJDbfHTXFe+g7eJR3N8l46DSuulUONJ1qnk2EnZWYC1Uj3Wbp3US0WFocIzXg==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -669,12 +669,12 @@ "esm-env": "^1.0.0", "kleur": "^4.1.5", "magic-string": "^0.30.0", - "mime": "^3.0.0", + "mrmime": "^1.0.1", "sade": "^1.8.1", "set-cookie-parser": "^2.6.0", "sirv": "^2.0.2", "tiny-glob": "^0.2.9", - "undici": "~5.25.0" + "undici": "~5.26.2" }, "bin": { "svelte-kit": "svelte-kit.js" @@ -1759,18 +1759,6 @@ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -2470,9 +2458,9 @@ } }, "node_modules/undici": { - "version": "5.25.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.25.4.tgz", - "integrity": "sha512-450yJxT29qKMf3aoudzFpIciqpx6Pji3hEWaXqXmanbXF58LTAGCKxcJjxMXWu3iG+Mudgo3ZUfDB6YDFd/dAw==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", + "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", "dev": true, "dependencies": { "@fastify/busboy": "^2.0.0" -- 2.49.1 From 8f934bdf322dcd271f8bd83e82741a430b39007f Mon Sep 17 00:00:00 2001 From: mirrerror Date: Thu, 26 Oct 2023 21:55:11 +0300 Subject: [PATCH 02/12] fix cors --- .../expensetrackerfaf/config/CorsFilter.java | 39 +------------------ 1 file changed, 1 insertion(+), 38 deletions(-) diff --git a/src/main/java/com/faf223/expensetrackerfaf/config/CorsFilter.java b/src/main/java/com/faf223/expensetrackerfaf/config/CorsFilter.java index ed23357..59acdc8 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/config/CorsFilter.java +++ b/src/main/java/com/faf223/expensetrackerfaf/config/CorsFilter.java @@ -1,39 +1,2 @@ -package com.faf223.expensetrackerfaf.config; - -import jakarta.servlet.*; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; - -import java.io.IOException; - -@Component -@Order(Ordered.HIGHEST_PRECEDENCE) -public class CorsFilter implements Filter { - - @Override - public void destroy() { - } - - - @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - HttpServletResponse response = (HttpServletResponse) servletResponse; - response.setHeader("Access-Control-Allow-Origin", "*"); - response.setHeader("Access-Control-Allow-Credentials", "true"); - response.setHeader("Access-Control-Allow-Methods", "POST, GET, HEAD, OPTIONS"); - response.setHeader("Access-Control-Allow-Headers", "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers"); - if ("OPTIONS".equalsIgnoreCase(((HttpServletRequest) servletRequest).getMethod())) { - response.setStatus(HttpServletResponse.SC_OK); - } else { - filterChain.doFilter(servletRequest, response); - } - - } - - @Override - public void init(FilterConfig config) { - } +package com.faf223.expensetrackerfaf.config;public class CorsFilter { } -- 2.49.1 From eca57b111a6e23eb53e991bdd821b071d9c1786f Mon Sep 17 00:00:00 2001 From: mirrerror Date: Thu, 26 Oct 2023 21:55:27 +0300 Subject: [PATCH 03/12] fix cors --- pom.xml | 12 ++++++ .../expensetrackerfaf/config/CorsConfig.java | 2 +- .../expensetrackerfaf/config/CorsFilter.java | 41 ++++++++++++++++++- .../config/SecurityConfiguration.java | 17 +++----- 4 files changed, 58 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index 5744dc1..862aa65 100644 --- a/pom.xml +++ b/pom.xml @@ -73,6 +73,18 @@ jakarta.validation-api 2.0.2 + + + org.springframework.security + spring-security-web + 6.1.5 + + + + org.springframework.security + spring-security-web + 6.1.5 + diff --git a/src/main/java/com/faf223/expensetrackerfaf/config/CorsConfig.java b/src/main/java/com/faf223/expensetrackerfaf/config/CorsConfig.java index 458f2ff..c98ccdf 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/config/CorsConfig.java +++ b/src/main/java/com/faf223/expensetrackerfaf/config/CorsConfig.java @@ -9,6 +9,6 @@ public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**").allowedMethods("*"); + registry.addMapping("/**").allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH").allowedOrigins("http://localhost:5173/"); } } diff --git a/src/main/java/com/faf223/expensetrackerfaf/config/CorsFilter.java b/src/main/java/com/faf223/expensetrackerfaf/config/CorsFilter.java index 59acdc8..bb34047 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/config/CorsFilter.java +++ b/src/main/java/com/faf223/expensetrackerfaf/config/CorsFilter.java @@ -1,2 +1,39 @@ -package com.faf223.expensetrackerfaf.config;public class CorsFilter { -} +package com.faf223.expensetrackerfaf.config; + +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Component +@Order(Ordered.HIGHEST_PRECEDENCE) +public class CorsFilter implements Filter { + + @Override + public void destroy() { + } + + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletResponse response = (HttpServletResponse) servletResponse; + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, HEAD, OPTIONS"); + response.setHeader("Access-Control-Allow-Headers", "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers"); + if ("OPTIONS".equalsIgnoreCase(((HttpServletRequest) servletRequest).getMethod())) { + response.setStatus(HttpServletResponse.SC_OK); + } else { + filterChain.doFilter(servletRequest, response); + } + + } + + @Override + public void init(FilterConfig config) { + } +} \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/config/SecurityConfiguration.java b/src/main/java/com/faf223/expensetrackerfaf/config/SecurityConfiguration.java index 7343ab9..5fb1804 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/config/SecurityConfiguration.java +++ b/src/main/java/com/faf223/expensetrackerfaf/config/SecurityConfiguration.java @@ -1,27 +1,21 @@ package com.faf223.expensetrackerfaf.config; import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationProvider; -import org.springframework.security.config.Customizer; 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.config.http.SessionCreationPolicy; -import org.springframework.security.oauth2.client.registration.ClientRegistration; -import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; -import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository; -import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; -import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; -import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; -import org.springframework.security.oauth2.core.AuthorizationGrantType; -import org.springframework.security.oauth2.core.oidc.IdTokenClaimNames; -import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; + +import java.util.Arrays; @Configuration @EnableWebSecurity @@ -35,6 +29,7 @@ public class SecurityConfiguration { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http + .cors(new CorsConfig()) .csrf(AbstractHttpConfigurer::disable) .authorizeHttpRequests(auth -> auth .requestMatchers("/api/v1/auth/**").permitAll() -- 2.49.1 From 7befb0dac796af17325ffe669816e2a17bf2b213 Mon Sep 17 00:00:00 2001 From: Daniel <59575049+lumijiez@users.noreply.github.com> Date: Fri, 27 Oct 2023 01:24:43 +0300 Subject: [PATCH 04/12] Update README.md --- README.md | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7a78351..c0770a5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,63 @@ -# ExpenseTrackerFAF +# Expense Tracker App + +## Description + +Expense Tracker is a web application that helps you keep track of your expenses and incomes. It provides a user-friendly interface to enter and visualize your financial data, making it easier to manage your finances. + +## Features + +- Single-page application for a smooth and responsive user experience. +- Reactive graph updates to visualize your financial data. +- Ability to add incomes and expenses to your account. +- Full-fledged authorization system to secure your data. +- Hosted database for seamless data storage and retrieval. + +## Tech Stack + +### Frontend + +- Svelte +- Chart.js +- Axios + +### Backend + +- Spring +- Spring Boot +- Spring Security + +### Database + +- MySQL +- phpMyAdmin + +## Installation Instructions + +To run the Expense Tracker application, follow these steps: + +1. Clone the project repository to your local machine. + +2. Install the required Maven dependencies for the backend. In the project directory, run: + +3. Run the backend Spring application to start the server. + +4. For the frontend, navigate to the `frontend` directory and run: + +```npm install``` +```npm run dev``` + +This will start the frontend development server and open the application in your web browser. + +Now you can access the Expense Tracker application at http://localhost:3000 and start tracking your expenses and incomes visually. + +Please note that you need to configure the database connection details and other environment-specific settings in the application properties before running the backend. + +### Configuration + +Make sure to update the configuration files with your specific database settings, security configurations, and other environment variables as needed. You can find these configuration files in the backend project. + +Feel free to customize the application further and adapt it to your specific use case. + +Happy expense tracking! + -Expense tracker project made in Spring by a group of senior full-stack Nobel winner students. -- 2.49.1 From 4fdd67fa2144c20ff089b945ca01aa13dd529a42 Mon Sep 17 00:00:00 2001 From: Daniel <59575049+lumijiez@users.noreply.github.com> Date: Fri, 27 Oct 2023 01:25:52 +0300 Subject: [PATCH 05/12] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c0770a5..4cdc350 100644 --- a/README.md +++ b/README.md @@ -41,14 +41,15 @@ To run the Expense Tracker application, follow these steps: 3. Run the backend Spring application to start the server. -4. For the frontend, navigate to the `frontend` directory and run: +4. For the frontend, navigate to the `web` directory and run: -```npm install``` -```npm run dev``` +```bash +npm install +npm run dev``` This will start the frontend development server and open the application in your web browser. -Now you can access the Expense Tracker application at http://localhost:3000 and start tracking your expenses and incomes visually. +Now you can access the Expense Tracker application at http://localhost:5173/auth/login and start tracking your expenses and incomes visually. Please note that you need to configure the database connection details and other environment-specific settings in the application properties before running the backend. -- 2.49.1 From 4403d60dc6c4e05a2d787c5e73fdf7928d773bb9 Mon Sep 17 00:00:00 2001 From: Daniel <59575049+lumijiez@users.noreply.github.com> Date: Fri, 27 Oct 2023 01:27:07 +0300 Subject: [PATCH 06/12] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4cdc350..4d50ba3 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,8 @@ To run the Expense Tracker application, follow these steps: ```bash npm install -npm run dev``` +npm run dev +``` This will start the frontend development server and open the application in your web browser. -- 2.49.1 From 94ef63253e1c3231a74cbe26f10b2d0762d216da Mon Sep 17 00:00:00 2001 From: Daniel <59575049+lumijiez@users.noreply.github.com> Date: Fri, 27 Oct 2023 01:27:32 +0300 Subject: [PATCH 07/12] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 4d50ba3..2fa38ed 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,9 @@ To run the Expense Tracker application, follow these steps: ```bash npm install +``` + +```bash npm run dev ``` -- 2.49.1 From 1ea883ae5f335703d01554f271e647547a990b6b Mon Sep 17 00:00:00 2001 From: Dmitrii Cravcenco Date: Fri, 27 Oct 2023 16:25:44 +0300 Subject: [PATCH 08/12] Add expense/income deletion --- .../expensetrackerfaf/controller/ExpenseController.java | 5 +++++ .../expensetrackerfaf/controller/IncomeController.java | 5 +++++ .../com/faf223/expensetrackerfaf/service/ExpenseService.java | 4 ++++ .../com/faf223/expensetrackerfaf/service/IncomeService.java | 4 ++++ 4 files changed, 18 insertions(+) diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java index 0c6b710..6d5268c 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java @@ -98,4 +98,9 @@ public class ExpenseController { if (!categories.isEmpty()) return ResponseEntity.ok(categories); else return ResponseEntity.notFound().build(); } + + @DeleteMapping("/expenses/{id}") + public void deleteCategory(@PathVariable long id) { + expenseService.deleteExpenseById(id); + } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java index e43b5ba..5bb6e20 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java @@ -96,4 +96,9 @@ public class IncomeController { if (!categories.isEmpty()) return ResponseEntity.ok(categories); else return ResponseEntity.notFound().build(); } + + @DeleteMapping("/incomes/{id}") + public void deleteIncome(@PathVariable long id) { + incomeService.deleteIncomeById(id); + } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java index 4209fd6..7976a33 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java @@ -40,4 +40,8 @@ public class ExpenseService implements ITransactionService { public Expense getTransactionById(long id) { return expenseRepository.findById(id).orElse(null); } + + public void deleteExpenseById(long id) { + expenseRepository.deleteById(id); + } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java b/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java index 8287d01..dcfb2e9 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java @@ -40,4 +40,8 @@ public class IncomeService implements ITransactionService { public Income getTransactionById(long id) { return incomeRepository.findById(id).orElse(null); } + + public void deleteIncomeById(long id) { + incomeRepository.deleteById(id); + } } -- 2.49.1 From 55dc6125ad6ba2c95aa19b9e7e89e7907cc7ca84 Mon Sep 17 00:00:00 2001 From: Dmitrii Cravcenco Date: Fri, 27 Oct 2023 16:25:44 +0300 Subject: [PATCH 09/12] Add expense/income deletion --- .../expensetrackerfaf/controller/ExpenseController.java | 5 +++++ .../expensetrackerfaf/controller/IncomeController.java | 5 +++++ .../com/faf223/expensetrackerfaf/service/ExpenseService.java | 4 ++++ .../com/faf223/expensetrackerfaf/service/IncomeService.java | 4 ++++ 4 files changed, 18 insertions(+) diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java index 0c6b710..501035f 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java @@ -98,4 +98,9 @@ public class ExpenseController { if (!categories.isEmpty()) return ResponseEntity.ok(categories); else return ResponseEntity.notFound().build(); } + + @DeleteMapping("/delete/{id}") + public void deleteCategory(@PathVariable long id) { + expenseService.deleteExpenseById(id); + } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java index e43b5ba..164ec9e 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java @@ -96,4 +96,9 @@ public class IncomeController { if (!categories.isEmpty()) return ResponseEntity.ok(categories); else return ResponseEntity.notFound().build(); } + + @DeleteMapping("/delete/{id}") + public void deleteIncome(@PathVariable long id) { + incomeService.deleteIncomeById(id); + } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java index 4209fd6..7976a33 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java @@ -40,4 +40,8 @@ public class ExpenseService implements ITransactionService { public Expense getTransactionById(long id) { return expenseRepository.findById(id).orElse(null); } + + public void deleteExpenseById(long id) { + expenseRepository.deleteById(id); + } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java b/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java index 8287d01..dcfb2e9 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java @@ -40,4 +40,8 @@ public class IncomeService implements ITransactionService { public Income getTransactionById(long id) { return incomeRepository.findById(id).orElse(null); } + + public void deleteIncomeById(long id) { + incomeRepository.deleteById(id); + } } -- 2.49.1 From eb2d0e53dc15ef27d89178ad3c75bd35e4f2bd64 Mon Sep 17 00:00:00 2001 From: Dmitrii Cravcenco Date: Fri, 27 Oct 2023 17:53:00 +0300 Subject: [PATCH 10/12] Add expense/income update --- .../controller/ExpenseController.java | 14 +++++++++----- .../controller/IncomeController.java | 19 +++++++++++-------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java index 501035f..b6b8964 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java @@ -61,14 +61,18 @@ public class ExpenseController { } - // TODO: has to be checked on auto extracting Uuid - @PatchMapping() - public ResponseEntity updateExpense(@RequestBody ExpenseCreationDTO expenseDTO, + // TODO: check if the expense belongs to the user + @PatchMapping("/update/{id}") + public ResponseEntity updateExpense(@PathVariable long id, @RequestBody ExpenseCreationDTO expenseDTO, BindingResult bindingResult) { - Expense expense = expenseMapper.toExpense(expenseDTO); + Expense expense = expenseService.getTransactionById(id); + ExpenseCategory category = expenseCategoryService.getCategoryById(expenseDTO.getExpenseCategory()); + expense.setCategory(category); + expense.setAmount(expenseDTO.getAmount()); + if (!bindingResult.hasErrors()) { expenseService.createOrUpdate(expense); - return ResponseEntity.ok(expenseMapper.toDto(expense)); + return ResponseEntity.status(HttpStatus.CREATED).build(); } else { return ResponseEntity.notFound().build(); } diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java index 164ec9e..cbe59c2 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java @@ -3,9 +3,7 @@ package com.faf223.expensetrackerfaf.controller; import com.faf223.expensetrackerfaf.dto.IncomeCreationDTO; import com.faf223.expensetrackerfaf.dto.IncomeDTO; import com.faf223.expensetrackerfaf.dto.mappers.IncomeMapper; -import com.faf223.expensetrackerfaf.model.Income; -import com.faf223.expensetrackerfaf.model.IncomeCategory; -import com.faf223.expensetrackerfaf.model.User; +import com.faf223.expensetrackerfaf.model.*; import com.faf223.expensetrackerfaf.service.IncomeCategoryService; import com.faf223.expensetrackerfaf.service.IncomeService; import com.faf223.expensetrackerfaf.service.UserService; @@ -60,13 +58,18 @@ public class IncomeController { return ResponseEntity.notFound().build(); } - @PatchMapping() - public ResponseEntity updateIncome(@RequestBody IncomeCreationDTO incomeDTO, - BindingResult bindingResult) { - Income income = incomeMapper.toIncome(incomeDTO); + // TODO: check if the income belongs to the user, extract logic into service + @PatchMapping("/update/{id}") + public ResponseEntity updateIncome(@PathVariable long id, @RequestBody IncomeCreationDTO incomeDTO, + BindingResult bindingResult) { + Income income = incomeService.getTransactionById(id); + IncomeCategory category = incomeCategoryService.getCategoryById(incomeDTO.getIncomeCategory()); + income.setCategory(category); + income.setAmount(incomeDTO.getAmount()); + if (!bindingResult.hasErrors()) { incomeService.createOrUpdate(income); - return ResponseEntity.ok(incomeMapper.toDto(income)); + return ResponseEntity.status(HttpStatus.CREATED).build(); } else { return ResponseEntity.notFound().build(); } -- 2.49.1 From f635ca3cb7962adb354a22525c2404dc2b95f7e8 Mon Sep 17 00:00:00 2001 From: mirrerror Date: Fri, 27 Oct 2023 21:14:31 +0300 Subject: [PATCH 11/12] fix abstraction for previous commits --- .../faf223/expensetrackerfaf/controller/ExpenseController.java | 2 +- .../faf223/expensetrackerfaf/controller/IncomeController.java | 2 +- .../com/faf223/expensetrackerfaf/service/ExpenseService.java | 2 +- .../faf223/expensetrackerfaf/service/ITransactionService.java | 1 + .../com/faf223/expensetrackerfaf/service/IncomeService.java | 2 +- 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java index b6b8964..581a891 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java @@ -105,6 +105,6 @@ public class ExpenseController { @DeleteMapping("/delete/{id}") public void deleteCategory(@PathVariable long id) { - expenseService.deleteExpenseById(id); + expenseService.deleteTransactionById(id); } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java index cbe59c2..37cb865 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java @@ -102,6 +102,6 @@ public class IncomeController { @DeleteMapping("/delete/{id}") public void deleteIncome(@PathVariable long id) { - incomeService.deleteIncomeById(id); + incomeService.deleteTransactionById(id); } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java index 7976a33..9ce7961 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java @@ -41,7 +41,7 @@ public class ExpenseService implements ITransactionService { return expenseRepository.findById(id).orElse(null); } - public void deleteExpenseById(long id) { + public void deleteTransactionById(long id) { expenseRepository.deleteById(id); } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/ITransactionService.java b/src/main/java/com/faf223/expensetrackerfaf/service/ITransactionService.java index 6219bef..bdfe091 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/ITransactionService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/ITransactionService.java @@ -10,5 +10,6 @@ public interface ITransactionService { List getTransactions(); List getTransactionsByEmail(String email); IMoneyTransaction getTransactionById(long id); + void deleteTransactionById(long it); } diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java b/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java index dcfb2e9..3ad7973 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java @@ -41,7 +41,7 @@ public class IncomeService implements ITransactionService { return incomeRepository.findById(id).orElse(null); } - public void deleteIncomeById(long id) { + public void deleteTransactionById(long id) { incomeRepository.deleteById(id); } } -- 2.49.1 From 71ef9aefe1c4bbba1a876fa192255005f075f8b4 Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 6 Nov 2023 08:52:32 +0200 Subject: [PATCH 12/12] Fixed forms trying to input strings instead of ints --- .../controller/ExpenseController.java | 3 + .../controller/IncomeController.java | 3 + .../routes/auth/register/RegisterForm.svelte | 100 +++++++++++++----- 3 files changed, 81 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java index 0c6b710..067f8a1 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java @@ -19,6 +19,7 @@ import org.springframework.security.core.userdetails.UserDetails; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -86,6 +87,8 @@ public class ExpenseController { if (!expenses.isEmpty()) { return ResponseEntity.ok(expenses); + } else { + return ResponseEntity.ok(Collections.emptyList()); } } diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java index e43b5ba..ecb5a62 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java @@ -19,6 +19,7 @@ import org.springframework.security.core.userdetails.UserDetails; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -84,6 +85,8 @@ public class IncomeController { if (!incomes.isEmpty()) { return ResponseEntity.ok(incomes); + } else { + return ResponseEntity.ok(Collections.emptyList()); } } diff --git a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/auth/register/RegisterForm.svelte b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/auth/register/RegisterForm.svelte index 0a8f712..6372a01 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/auth/register/RegisterForm.svelte +++ b/src/main/java/com/faf223/expensetrackerfaf/web/src/routes/auth/register/RegisterForm.svelte @@ -1,36 +1,80 @@ @@ -45,11 +89,17 @@ {username = event.target.value} }> + {name = event.target.value} + }> + {surname = event.target.value} + }> {email = event.target.value} }> {password = event.target.password} + event => {password = event.target.value} }> Forgot your password? @@ -75,7 +125,7 @@ border-top: 10px solid #79a6fe; border-bottom: 10px solid #8BD17C; width: 400px; - height: 600px; + height: 750px; box-shadow: 1px 1px 108.8px 19.2px rgb(25, 31, 53); } -- 2.49.1