forked from fabiomsrs/orange-talents-06-template-ecommerce
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
384 additions
and
3 deletions.
There are no files selected for viewing
30 changes: 30 additions & 0 deletions
30
...ain/java/br/com/zupacademy/giovannimoratto/ecommerce/new_category/CategoryController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package br.com.zupacademy.giovannimoratto.ecommerce.new_category; | ||
|
||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.web.bind.annotation.PostMapping; | ||
import org.springframework.web.bind.annotation.RequestBody; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
import javax.transaction.Transactional; | ||
import javax.validation.Valid; | ||
|
||
/** | ||
* @Author giovanni.moratto | ||
*/ | ||
|
||
@RestController | ||
public class CategoryController { | ||
|
||
@Autowired | ||
private CategoryRepository repository; | ||
|
||
/* Methods */ | ||
// POST Request - Register a new Category | ||
@PostMapping("/new_category") // Endpoint | ||
@Transactional | ||
public void addNewCategory(@RequestBody @Valid CategoryRequest request) { | ||
CategoryModel newCategory = request.toModel(repository); | ||
repository.save(newCategory); | ||
} | ||
|
||
} |
44 changes: 44 additions & 0 deletions
44
src/main/java/br/com/zupacademy/giovannimoratto/ecommerce/new_category/CategoryModel.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
package br.com.zupacademy.giovannimoratto.ecommerce.new_category; | ||
|
||
import javax.persistence.*; | ||
|
||
/** | ||
* @Author giovanni.moratto | ||
*/ | ||
|
||
@Entity | ||
@Table(name = "tb_categorias") | ||
public class CategoryModel { | ||
|
||
/* Attributes */ | ||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
@Column(name = "ID") | ||
private Long id; | ||
@Column(name = "NAME", nullable = false) | ||
private String name; | ||
@ManyToOne | ||
@JoinColumn(name = "ID_PARENT_CATEGORY") | ||
private CategoryModel parentCategory; | ||
|
||
/* Constructors */ | ||
// Default - JPA | ||
@Deprecated | ||
public CategoryModel() { | ||
} | ||
|
||
public CategoryModel(String name, CategoryModel parentCategory) { | ||
this.name = name; | ||
this.parentCategory = parentCategory; | ||
} | ||
|
||
public CategoryModel(String name) { | ||
this.name = name; | ||
} | ||
|
||
// Check if the category exists in CategoryControllerTest | ||
public Long getId() { | ||
return id; | ||
} | ||
|
||
} |
18 changes: 18 additions & 0 deletions
18
...ain/java/br/com/zupacademy/giovannimoratto/ecommerce/new_category/CategoryRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package br.com.zupacademy.giovannimoratto.ecommerce.new_category; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.stereotype.Repository; | ||
|
||
import java.util.Optional; | ||
|
||
/** | ||
* @Author giovanni.moratto | ||
*/ | ||
|
||
@Repository | ||
public interface CategoryRepository extends JpaRepository <CategoryModel, Long> { | ||
|
||
Optional <CategoryModel> findByName(String name); | ||
|
||
int countByName(String name); | ||
} |
36 changes: 36 additions & 0 deletions
36
src/main/java/br/com/zupacademy/giovannimoratto/ecommerce/new_category/CategoryRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package br.com.zupacademy.giovannimoratto.ecommerce.new_category; | ||
|
||
import br.com.zupacademy.giovannimoratto.ecommerce.validations.annotations.ExistsId; | ||
import br.com.zupacademy.giovannimoratto.ecommerce.validations.annotations.Unique; | ||
|
||
import javax.validation.constraints.NotBlank; | ||
import javax.validation.constraints.Positive; | ||
|
||
/** | ||
* @Author giovanni.moratto | ||
*/ | ||
|
||
public class CategoryRequest { | ||
|
||
/* Attributes */ | ||
@NotBlank | ||
@Unique(domainClass = CategoryModel.class, fieldName = "name") | ||
private final String name; | ||
@ExistsId(domainClass = CategoryModel.class) | ||
private final Long idParentCategory; | ||
|
||
public CategoryRequest(String name, Long idParentCategory) { | ||
this.name = name; | ||
this.idParentCategory = idParentCategory; | ||
} | ||
|
||
/* Methods */ | ||
public CategoryModel toModel(CategoryRepository repository) { | ||
if (idParentCategory != null) { | ||
CategoryModel optionalCategory = repository.findById(idParentCategory).orElseThrow(); | ||
return new CategoryModel(name, optionalCategory); | ||
} | ||
return new CategoryModel(name); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
28 changes: 28 additions & 0 deletions
28
...in/java/br/com/zupacademy/giovannimoratto/ecommerce/validations/annotations/ExistsId.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package br.com.zupacademy.giovannimoratto.ecommerce.validations.annotations; | ||
|
||
import javax.validation.Constraint; | ||
import javax.validation.Payload; | ||
import java.lang.annotation.*; | ||
|
||
/** | ||
* @Author giovanni.moratto | ||
*/ | ||
|
||
@Documented | ||
@Constraint(validatedBy = {ExistsIdValidator.class}) | ||
@Target({ | ||
ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, | ||
ElementType.PARAMETER, ElementType.TYPE_USE | ||
}) | ||
@Retention(RetentionPolicy.RUNTIME) | ||
public @interface ExistsId { | ||
|
||
Class <?> domainClass(); | ||
|
||
String message() default "This ID does not exists!"; | ||
|
||
Class <?>[] groups() default {}; | ||
|
||
Class <? extends Payload>[] payload() default {}; | ||
|
||
} |
37 changes: 37 additions & 0 deletions
37
...r/com/zupacademy/giovannimoratto/ecommerce/validations/annotations/ExistsIdValidator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package br.com.zupacademy.giovannimoratto.ecommerce.validations.annotations; | ||
|
||
import javax.persistence.EntityManager; | ||
import javax.persistence.PersistenceContext; | ||
import javax.persistence.Query; | ||
import javax.validation.ConstraintValidator; | ||
import javax.validation.ConstraintValidatorContext; | ||
|
||
/** | ||
* @Author giovanni.moratto | ||
*/ | ||
|
||
public class ExistsIdValidator implements ConstraintValidator <ExistsId, Long> { | ||
|
||
@PersistenceContext | ||
private EntityManager em; | ||
|
||
/* Attributes */ | ||
private String object; | ||
|
||
@Override | ||
public void initialize(ExistsId constraintAnnotation) { | ||
object = constraintAnnotation.domainClass().getSimpleName(); | ||
} | ||
|
||
@Override | ||
public boolean isValid(Long id, ConstraintValidatorContext context) { | ||
if (id == null) { | ||
return true; | ||
} | ||
Query query = em.createQuery("SELECT 1 FROM " + object + " o WHERE o.id = :VALUE"); | ||
query.setParameter("VALUE", id); | ||
|
||
return !query.getResultList().isEmpty(); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.