From 358af02d3997f610cb5b208805bc4edaab388f62 Mon Sep 17 00:00:00 2001 From: Pasan Chamikara Date: Fri, 12 Jul 2024 10:56:46 +0530 Subject: [PATCH] category complete --- .idea/dataSources.xml | 19 +++ .idea/uiDesigner.xml | 124 ++++++++++++++++++ backend/pom.xml | 22 ++++ .../controllers/CategoryController.java | 17 ++- .../controllers/ExpenseController.java | 41 ++++++ .../backend/dto/ExpenseDTO.java | 18 +++ .../backend/models/Expense.java | 33 +++++ .../repository/CategoryRepository.java | 7 + .../backend/service/CategoryService.java | 2 + .../backend/service/ExpenseService.java | 11 ++ .../service/Impl/CategoryServiceImpl.java | 16 +++ .../service/Impl/ExpenseServiceImpl.java | 13 ++ .../backend/util/MessageVarList.java | 3 + .../backend/util/Validation.java | 13 ++ 14 files changed, 338 insertions(+), 1 deletion(-) create mode 100644 .idea/dataSources.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 backend/src/main/java/org/fianancetracker/backend/controllers/ExpenseController.java create mode 100644 backend/src/main/java/org/fianancetracker/backend/dto/ExpenseDTO.java create mode 100644 backend/src/main/java/org/fianancetracker/backend/models/Expense.java create mode 100644 backend/src/main/java/org/fianancetracker/backend/service/ExpenseService.java create mode 100644 backend/src/main/java/org/fianancetracker/backend/service/Impl/ExpenseServiceImpl.java diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..b01df4d --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,19 @@ + + + + + mysql.8 + true + true + $PROJECT_DIR$/backend/src/main/resources/application.properties + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306/finance_tracker + + + + + + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/pom.xml b/backend/pom.xml index 9022bdd..f58f6e6 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -41,6 +41,28 @@ spring-boot-starter-test test + + org.springframework.boot + spring-boot-starter-actuator + + + io.jsonwebtoken + jjwt + 0.12.6 + + + io.jsonwebtoken + jjwt-impl + 0.12.6 + runtime + + + io.jsonwebtoken + jjwt-jackson + 0.12.6 + runtime + + diff --git a/backend/src/main/java/org/fianancetracker/backend/controllers/CategoryController.java b/backend/src/main/java/org/fianancetracker/backend/controllers/CategoryController.java index 36df062..51f23ec 100644 --- a/backend/src/main/java/org/fianancetracker/backend/controllers/CategoryController.java +++ b/backend/src/main/java/org/fianancetracker/backend/controllers/CategoryController.java @@ -86,7 +86,7 @@ public ResponseEntity> getAllCategory() { @ResponseBody public ResponseEntity deteleCategory(@PathVariable("id") Long id) { log.info(this.getClass().getName() + "Delete Category"); - log.info(this.getClass().getName() + "Get Category"); + String message = ""; message = categoryService.deleteCategory(id); @@ -98,4 +98,19 @@ public ResponseEntity deteleCategory(@PathVariable("id") Long id) { } + @GetMapping("/getCategoryByType/{type}") + @ResponseBody + public ResponseEntity> deteleCategory(@PathVariable("type") String type) { + log.info(this.getClass().getName() + "Get Category by types"); + List category = null; + + category = categoryService.getCategoryByType(type); + if (!category.isEmpty()) { + return new ResponseEntity<>(category, HttpStatus.OK); + } else { + return new ResponseEntity<>(category, HttpStatus.BAD_REQUEST); + } + + } + } diff --git a/backend/src/main/java/org/fianancetracker/backend/controllers/ExpenseController.java b/backend/src/main/java/org/fianancetracker/backend/controllers/ExpenseController.java new file mode 100644 index 0000000..cd9818e --- /dev/null +++ b/backend/src/main/java/org/fianancetracker/backend/controllers/ExpenseController.java @@ -0,0 +1,41 @@ +package org.fianancetracker.backend.controllers; + +import lombok.extern.slf4j.Slf4j; +import org.fianancetracker.backend.dto.ExpenseDTO; +import org.fianancetracker.backend.service.ExpenseService; +import org.fianancetracker.backend.util.Validation; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +@RequestMapping("/expense") +@Slf4j +public class ExpenseController { + + private final ExpenseService expenseService; + + public ExpenseController(ExpenseService expenseService) { + this.expenseService = expenseService; + } + + @PostMapping("/addExpense") + public ResponseEntity addExpense(@RequestBody ExpenseDTO expenseDTO) { + log.info(this.getClass().getName() + "addExpense"); + String message = Validation.expenseValidation(expenseDTO); + if (!message.isEmpty()) { + return new ResponseEntity<>(message, HttpStatus.BAD_REQUEST); + } + message = expenseService.addExpense(expenseDTO); + if (message.isEmpty()) { + return new ResponseEntity<>("Expense Added Successfully", HttpStatus.CREATED); + } else { + return new ResponseEntity<>(message, HttpStatus.INTERNAL_SERVER_ERROR); + } + } + +} diff --git a/backend/src/main/java/org/fianancetracker/backend/dto/ExpenseDTO.java b/backend/src/main/java/org/fianancetracker/backend/dto/ExpenseDTO.java new file mode 100644 index 0000000..a98e7f6 --- /dev/null +++ b/backend/src/main/java/org/fianancetracker/backend/dto/ExpenseDTO.java @@ -0,0 +1,18 @@ +package org.fianancetracker.backend.dto; + +import lombok.Data; +import org.springframework.stereotype.Component; + +import java.sql.Date; + +@Data +@Component +public class ExpenseDTO { + + private Long id; + private Long userId; + private String description; + private Long amount; + private String type; + private Date date; +} diff --git a/backend/src/main/java/org/fianancetracker/backend/models/Expense.java b/backend/src/main/java/org/fianancetracker/backend/models/Expense.java new file mode 100644 index 0000000..d7d5799 --- /dev/null +++ b/backend/src/main/java/org/fianancetracker/backend/models/Expense.java @@ -0,0 +1,33 @@ +package org.fianancetracker.backend.models; + +import jakarta.persistence.*; +import lombok.Data; + +import java.sql.Date; + +@Entity +@Table(name = "Expense") +@Data +public class Expense { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "description") + private String description; + + @Column(name = "type") + private String type; + + @Column(name = "amount") + private Long amount; + + @Column(name = "create_date") + private Date date; + + @ManyToOne + @JoinColumn(name = "user_id", nullable = false) + private User user; + +} diff --git a/backend/src/main/java/org/fianancetracker/backend/repository/CategoryRepository.java b/backend/src/main/java/org/fianancetracker/backend/repository/CategoryRepository.java index 15ab12f..63a7d36 100644 --- a/backend/src/main/java/org/fianancetracker/backend/repository/CategoryRepository.java +++ b/backend/src/main/java/org/fianancetracker/backend/repository/CategoryRepository.java @@ -2,8 +2,15 @@ import org.fianancetracker.backend.models.Category; 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 java.util.List; + @Repository public interface CategoryRepository extends JpaRepository { + + @Query("SELECT C FROM Category as C WHERE C.type = :type ") + List findByType(@Param("type") String type); } diff --git a/backend/src/main/java/org/fianancetracker/backend/service/CategoryService.java b/backend/src/main/java/org/fianancetracker/backend/service/CategoryService.java index 4c4b1d5..3b48679 100644 --- a/backend/src/main/java/org/fianancetracker/backend/service/CategoryService.java +++ b/backend/src/main/java/org/fianancetracker/backend/service/CategoryService.java @@ -17,4 +17,6 @@ public interface CategoryService { List getAllCategories(); String deleteCategory(Long id); + + List getCategoryByType(String type); } diff --git a/backend/src/main/java/org/fianancetracker/backend/service/ExpenseService.java b/backend/src/main/java/org/fianancetracker/backend/service/ExpenseService.java new file mode 100644 index 0000000..fcde2b5 --- /dev/null +++ b/backend/src/main/java/org/fianancetracker/backend/service/ExpenseService.java @@ -0,0 +1,11 @@ +package org.fianancetracker.backend.service; + +import org.fianancetracker.backend.dto.ExpenseDTO; +import org.springframework.stereotype.Service; + +@Service +public interface ExpenseService { + + String addExpense(ExpenseDTO expenseDTO); + +} diff --git a/backend/src/main/java/org/fianancetracker/backend/service/Impl/CategoryServiceImpl.java b/backend/src/main/java/org/fianancetracker/backend/service/Impl/CategoryServiceImpl.java index bdfc28e..5915c62 100644 --- a/backend/src/main/java/org/fianancetracker/backend/service/Impl/CategoryServiceImpl.java +++ b/backend/src/main/java/org/fianancetracker/backend/service/Impl/CategoryServiceImpl.java @@ -102,4 +102,20 @@ public String deleteCategory(Long id) { } return message; } + + @Override + public List getCategoryByType(String type) { + List categories = categoryRepository.findByType(type); + + if (!categories.isEmpty()) { + return categories.stream() + .map(category -> new CategoryDTO( + category.getId(), + category.getDescription(), + category.getType())) + .collect(Collectors.toList()); + } + + return new ArrayList<>(); + } } diff --git a/backend/src/main/java/org/fianancetracker/backend/service/Impl/ExpenseServiceImpl.java b/backend/src/main/java/org/fianancetracker/backend/service/Impl/ExpenseServiceImpl.java new file mode 100644 index 0000000..bd05210 --- /dev/null +++ b/backend/src/main/java/org/fianancetracker/backend/service/Impl/ExpenseServiceImpl.java @@ -0,0 +1,13 @@ +package org.fianancetracker.backend.service.Impl; + +import org.fianancetracker.backend.dto.ExpenseDTO; +import org.fianancetracker.backend.service.ExpenseService; +import org.springframework.stereotype.Service; + +@Service +public class ExpenseServiceImpl implements ExpenseService { + @Override + public String addExpense(ExpenseDTO expenseDTO) { + return null; + } +} diff --git a/backend/src/main/java/org/fianancetracker/backend/util/MessageVarList.java b/backend/src/main/java/org/fianancetracker/backend/util/MessageVarList.java index b25e465..2f386fc 100644 --- a/backend/src/main/java/org/fianancetracker/backend/util/MessageVarList.java +++ b/backend/src/main/java/org/fianancetracker/backend/util/MessageVarList.java @@ -14,4 +14,7 @@ public class MessageVarList { public static final String VALID_lOGIN = "valid Login"; public static final String EMPTY_CATEGORY = "Category Description Cannot be Empty"; public static final String EMPTY_CATEGORY_TYPE = "Category Type Cannot be Empty"; + public static final String EMPTY_EXPENSE_DESCRIPTION = "Expense Description Cannot be Empty"; + public static final String EMPTY_EXPENSE_TYPE = "Expense Type Cannot be Empty"; + public static final String EMPTY_EXPENSE_AMOUNT = "Expense Amount Cannot be Empty"; } diff --git a/backend/src/main/java/org/fianancetracker/backend/util/Validation.java b/backend/src/main/java/org/fianancetracker/backend/util/Validation.java index a6e367c..63a7899 100644 --- a/backend/src/main/java/org/fianancetracker/backend/util/Validation.java +++ b/backend/src/main/java/org/fianancetracker/backend/util/Validation.java @@ -1,6 +1,7 @@ package org.fianancetracker.backend.util; import org.fianancetracker.backend.dto.CategoryDTO; +import org.fianancetracker.backend.dto.ExpenseDTO; import org.fianancetracker.backend.dto.UserDTO; public class Validation { @@ -47,4 +48,16 @@ public static String categoryValidation(CategoryDTO categoryDTO) { return message; } } + + public static String expenseValidation(ExpenseDTO expenseDTO) { + if (expenseDTO.getDescription() == null || expenseDTO.getDescription().isEmpty()) { + return MessageVarList.EMPTY_EXPENSE_DESCRIPTION; + } else if (expenseDTO.getType() == null || expenseDTO.getType().isEmpty()) { + return MessageVarList.EMPTY_EXPENSE_TYPE; + } else if (expenseDTO.getAmount() == null) { + return MessageVarList.EMPTY_EXPENSE_AMOUNT; + } else { + return message; + } + } }