Skip to content

Commit 8bdba65

Browse files
committed
Exception handler and category children.
1 parent df17029 commit 8bdba65

21 files changed

+130
-31
lines changed

src/main/java/com/manir/springbootecommercerestapi/controller/ProductImageGalleryController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.manir.springbootecommercerestapi.controller;
22

3-
import com.manir.springbootecommercerestapi.resource.ImageData;
43
import com.manir.springbootecommercerestapi.service.ProductImageGalleryService;
54
import org.springframework.beans.factory.annotation.Autowired;
65
import org.springframework.http.HttpStatus;

src/main/java/com/manir/springbootecommercerestapi/dto/CategoryDto.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package com.manir.springbootecommercerestapi.dto;
22

3-
import com.manir.springbootecommercerestapi.resource.Product;
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import com.fasterxml.jackson.annotation.JsonInclude;
5+
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
6+
import com.fasterxml.jackson.databind.annotation.JsonNaming;
7+
import com.manir.springbootecommercerestapi.model.Category;
48
import lombok.Data;
59

610
import java.util.Set;
@@ -14,5 +18,8 @@ public class CategoryDto {
1418
private String description;
1519
private String status;
1620

21+
//private Category parent;
22+
private Set<Category> children;
23+
1724
//private Set<ProductDto> products;
1825
}

src/main/java/com/manir/springbootecommercerestapi/dto/ProductDto.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
package com.manir.springbootecommercerestapi.dto;
2-
import com.manir.springbootecommercerestapi.resource.ImageData;
2+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
5+
import com.fasterxml.jackson.databind.annotation.JsonNaming;
36
import lombok.Data;
47

5-
import java.util.List;
68
import java.util.Set;
79

810
@Data
11+
@JsonInclude(JsonInclude.Include.NON_NULL)
12+
@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
13+
@JsonIgnoreProperties({"hibernate_lazy_initializer", "handler"})
914
public class ProductDto {
1015
private Long id;
1116
private String title;
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.manir.springbootecommercerestapi.exception;
2+
3+
import org.springframework.http.HttpStatus;
4+
5+
public class EcommerceApiException extends RuntimeException{
6+
private String message;
7+
private HttpStatus status;
8+
9+
public EcommerceApiException(String message, HttpStatus status) {
10+
this.message = message;
11+
this.status = status;
12+
}
13+
14+
public EcommerceApiException(String message, String message1, HttpStatus status) {
15+
super(message);
16+
this.message = message1;
17+
this.status = status;
18+
}
19+
20+
@Override
21+
public String getMessage() {
22+
return message;
23+
}
24+
25+
public HttpStatus getStatus() {
26+
return status;
27+
}
28+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.manir.springbootecommercerestapi.exception;
2+
3+
import com.manir.springbootecommercerestapi.response.ErrorDetail;
4+
import org.springframework.http.HttpStatus;
5+
import org.springframework.http.ResponseEntity;
6+
import org.springframework.web.bind.annotation.ExceptionHandler;
7+
import org.springframework.web.bind.annotation.RestControllerAdvice;
8+
import org.springframework.web.context.request.WebRequest;
9+
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
10+
11+
import java.util.Date;
12+
13+
@RestControllerAdvice
14+
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
15+
16+
//Resource not found handler
17+
@ExceptionHandler(ResourceNotFoundException.class)
18+
public ResponseEntity<ErrorDetail> handleResourceNotFoundException(ResourceNotFoundException exception, WebRequest webRequest){
19+
ErrorDetail errorDetail = new ErrorDetail(new Date(), exception.getMessage(), webRequest.getDescription(false));
20+
return new ResponseEntity<>(errorDetail, HttpStatus.NOT_FOUND);
21+
}
22+
23+
//Ecommerce exception handler
24+
@ExceptionHandler(EcommerceApiException.class)
25+
public ResponseEntity<ErrorDetail> handleEcommerceApiException(EcommerceApiException exception, WebRequest webRequest){
26+
ErrorDetail errorDetail = new ErrorDetail(new Date(), exception.getMessage(), webRequest.getDescription(false));
27+
return new ResponseEntity<>(errorDetail, HttpStatus.BAD_REQUEST);
28+
}
29+
30+
//Global Exception handler
31+
@ExceptionHandler(Exception.class)
32+
public ResponseEntity<ErrorDetail> handleGlobalException(Exception exception, WebRequest webRequest){
33+
ErrorDetail errorDetail = new ErrorDetail(new Date(), exception.getMessage(), webRequest.getDescription(false));
34+
return new ResponseEntity<>(errorDetail, HttpStatus.INTERNAL_SERVER_ERROR);
35+
}
36+
37+
}

src/main/java/com/manir/springbootecommercerestapi/exception/ResourceNotFoundException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import org.springframework.http.HttpStatus;
44
import org.springframework.web.bind.annotation.ResponseStatus;
55

6-
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
6+
@ResponseStatus(value = HttpStatus.NOT_FOUND)
77
public class ResourceNotFoundException extends RuntimeException{
88
private String resourceName;
99
private Long fieldValue;

src/main/java/com/manir/springbootecommercerestapi/resource/Category.java renamed to src/main/java/com/manir/springbootecommercerestapi/model/Category.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package com.manir.springbootecommercerestapi.resource;
1+
package com.manir.springbootecommercerestapi.model;
22

3+
import com.fasterxml.jackson.annotation.*;
34
import lombok.*;
45

56
import javax.persistence.*;
67
import java.util.HashSet;
7-
import java.util.List;
88
import java.util.Set;
99

1010
@AllArgsConstructor
@@ -28,12 +28,14 @@ public class Category {
2828
private String status;
2929

3030
//relation between parent and child categories
31-
@ManyToOne
31+
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
3232
@JoinColumn(name = "parent_id")
3333
private Category parent;
34-
@OneToMany(mappedBy = "parent")
34+
@OneToMany(mappedBy = "parent", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
35+
@JsonIgnore
3536
private Set<Category> children = new HashSet<>();
3637

38+
3739
//relation between category and product
3840
@OneToMany(mappedBy = "category", cascade = CascadeType.ALL, orphanRemoval = true)
3941
private Set<Product> products = new HashSet<>();

src/main/java/com/manir/springbootecommercerestapi/resource/Comment.java renamed to src/main/java/com/manir/springbootecommercerestapi/model/Comment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.manir.springbootecommercerestapi.resource;
1+
package com.manir.springbootecommercerestapi.model;
22

33
import lombok.*;
44

src/main/java/com/manir/springbootecommercerestapi/resource/ImageData.java renamed to src/main/java/com/manir/springbootecommercerestapi/model/ImageData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.manir.springbootecommercerestapi.resource;
1+
package com.manir.springbootecommercerestapi.model;
22

33
import lombok.*;
44

src/main/java/com/manir/springbootecommercerestapi/resource/Product.java renamed to src/main/java/com/manir/springbootecommercerestapi/model/Product.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
package com.manir.springbootecommercerestapi.resource;
1+
package com.manir.springbootecommercerestapi.model;
22

33
import lombok.*;
44

55
import javax.persistence.*;
6-
import java.util.List;
76
import java.util.Set;
87

98
@AllArgsConstructor

src/main/java/com/manir/springbootecommercerestapi/repository/CategoryRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.manir.springbootecommercerestapi.repository;
22

3-
import com.manir.springbootecommercerestapi.resource.Category;
3+
import com.manir.springbootecommercerestapi.model.Category;
44
import org.springframework.data.jpa.repository.JpaRepository;
55

66
public interface CategoryRepository extends JpaRepository<Category, Long> {

src/main/java/com/manir/springbootecommercerestapi/repository/CommentRepository.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package com.manir.springbootecommercerestapi.repository;
22

3-
import com.manir.springbootecommercerestapi.resource.Comment;
3+
import com.manir.springbootecommercerestapi.model.Comment;
44
import org.springframework.data.jpa.repository.JpaRepository;
55

66
import java.util.List;
7-
import java.util.Optional;
87

98
public interface CommentRepository extends JpaRepository<Comment, Long> {
109
List<Comment> findByProductId(Long productId);

src/main/java/com/manir/springbootecommercerestapi/repository/ProductImageGalleryRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.manir.springbootecommercerestapi.repository;
22

3-
import com.manir.springbootecommercerestapi.resource.ImageData;
3+
import com.manir.springbootecommercerestapi.model.ImageData;
44
import org.springframework.data.jpa.repository.JpaRepository;
55

66
public interface ProductImageGalleryRepository extends JpaRepository<ImageData, Long> {
Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
package com.manir.springbootecommercerestapi.repository;
22

3-
import com.manir.springbootecommercerestapi.resource.Comment;
4-
import com.manir.springbootecommercerestapi.resource.Product;
3+
import com.manir.springbootecommercerestapi.model.Product;
54
import org.springframework.data.jpa.repository.JpaRepository;
65

7-
import java.util.List;
8-
96
public interface ProductRepository extends JpaRepository<Product, Long> {
107

118
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.manir.springbootecommercerestapi.response;
2+
3+
import java.util.Date;
4+
5+
public class ErrorDetail {
6+
private Date timestamp;
7+
private String message;
8+
private String details;
9+
10+
public ErrorDetail(Date timestamp, String message, String details) {
11+
this.timestamp = timestamp;
12+
this.message = message;
13+
this.details = details;
14+
}
15+
16+
public Date getTimestamp() {
17+
return timestamp;
18+
}
19+
20+
public String getMessage() {
21+
return message;
22+
}
23+
24+
public String getDetails() {
25+
return details;
26+
}
27+
}

src/main/java/com/manir/springbootecommercerestapi/service/CategoryService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ public interface CategoryService {
1212
CategoryDto updateCategory(CategoryDto categoryDto, Long categoryId);
1313
void deleteCategory(Long categoryId);
1414

15+
//List<CategoryDto> findChildren(Long parentId);
1516

1617
}

src/main/java/com/manir/springbootecommercerestapi/service/Impl/CategoryServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.manir.springbootecommercerestapi.dto.CategoryDto;
44
import com.manir.springbootecommercerestapi.exception.ResourceNotFoundException;
55
import com.manir.springbootecommercerestapi.repository.CategoryRepository;
6-
import com.manir.springbootecommercerestapi.resource.Category;
6+
import com.manir.springbootecommercerestapi.model.Category;
77
import com.manir.springbootecommercerestapi.service.CategoryService;
88
import org.modelmapper.ModelMapper;
99
import org.springframework.stereotype.Service;

src/main/java/com/manir/springbootecommercerestapi/service/Impl/CommentServiceImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import com.manir.springbootecommercerestapi.exception.ResourceNotFoundException;
55
import com.manir.springbootecommercerestapi.repository.CommentRepository;
66
import com.manir.springbootecommercerestapi.repository.ProductRepository;
7-
import com.manir.springbootecommercerestapi.resource.Comment;
8-
import com.manir.springbootecommercerestapi.resource.Product;
7+
import com.manir.springbootecommercerestapi.model.Comment;
8+
import com.manir.springbootecommercerestapi.model.Product;
99
import com.manir.springbootecommercerestapi.service.CommentService;
1010
import org.modelmapper.ModelMapper;
1111
import org.springframework.stereotype.Service;

src/main/java/com/manir/springbootecommercerestapi/service/Impl/ProductImageGalleryServiceImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import com.manir.springbootecommercerestapi.exception.ResourceNotFoundException;
44
import com.manir.springbootecommercerestapi.repository.ProductImageGalleryRepository;
55
import com.manir.springbootecommercerestapi.repository.ProductRepository;
6-
import com.manir.springbootecommercerestapi.resource.ImageData;
7-
import com.manir.springbootecommercerestapi.resource.Product;
6+
import com.manir.springbootecommercerestapi.model.ImageData;
7+
import com.manir.springbootecommercerestapi.model.Product;
88
import com.manir.springbootecommercerestapi.service.ProductImageGalleryService;
99
import com.manir.springbootecommercerestapi.utils.ImageUtils;
1010
import org.springframework.stereotype.Service;

src/main/java/com/manir/springbootecommercerestapi/service/Impl/ProductServiceImpl.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44
import com.manir.springbootecommercerestapi.exception.ResourceNotFoundException;
55
import com.manir.springbootecommercerestapi.repository.CategoryRepository;
66
import com.manir.springbootecommercerestapi.repository.ProductRepository;
7-
import com.manir.springbootecommercerestapi.resource.Category;
8-
import com.manir.springbootecommercerestapi.resource.ImageData;
9-
import com.manir.springbootecommercerestapi.resource.Product;
7+
import com.manir.springbootecommercerestapi.model.Category;
8+
import com.manir.springbootecommercerestapi.model.Product;
109
import com.manir.springbootecommercerestapi.service.ProductService;
11-
import com.manir.springbootecommercerestapi.utils.ImageUtils;
1210
import org.modelmapper.ModelMapper;
1311
import org.springframework.stereotype.Service;
1412
import org.springframework.util.StringUtils;

src/main/java/com/manir/springbootecommercerestapi/service/ProductImageGalleryService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.manir.springbootecommercerestapi.service;
22

3-
import com.manir.springbootecommercerestapi.resource.ImageData;
3+
import com.manir.springbootecommercerestapi.model.ImageData;
44
import org.springframework.web.multipart.MultipartFile;
55

66
public interface ProductImageGalleryService {

0 commit comments

Comments
 (0)