From ba4436f3de9ab45721273bf2b7cd129244d3492f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Mendes?= Date: Sun, 12 May 2024 18:46:39 +0100 Subject: [PATCH 1/5] [FEAT] Created TipoReceita endpoints and tests --- .../ipp/pt/api/desofs/Config/MysqlConfig.java | 16 +-- .../Controllers/TipoReceitaController.java | 84 ++++++++++++ .../TipoReceitaDTOResponse.java | 40 ++++++ .../TipoReceitaDTOSaveRequest.java | 25 ++++ .../TipoReceitaDTOServiceRequest.java | 29 ++++ .../TipoReceitaDTOServiceResponse.java | 43 ++++++ .../TipoReceitaMapper/TipoReceitaMapper.java | 25 ++++ .../isep/ipp/pt/api/desofs/Model/Receita.java | 3 + .../ipp/pt/api/desofs/Model/TipoReceita.java | 7 +- .../TipoReceitaServiceImpl.java | 54 ++++++++ .../Interface/TipoReceitaServiceRepo.java | 14 ++ .../Repository/Repo/TipoReceitaRepo.java | 12 ++ .../ipp/pt/api/desofs/SecurityConfig.java | 1 + .../TipoReceitaService.java | 17 +++ .../TipoReceitaServiceImpl.java | 52 ++++++++ .../TipoReceitaControllerTest.java | 112 ++++++++++++++++ .../TipoReceitaServiceImplTest.java | 126 ++++++++++++++++++ 17 files changed, 649 insertions(+), 11 deletions(-) create mode 100644 desofsApi/src/main/java/isep/ipp/pt/api/desofs/Controllers/TipoReceitaController.java create mode 100644 desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ControllerLayer/TipoReceitaDTOResponse.java create mode 100644 desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ControllerLayer/TipoReceitaDTOSaveRequest.java create mode 100644 desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ServiceLayer/TipoReceitaDTOServiceRequest.java create mode 100644 desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ServiceLayer/TipoReceitaDTOServiceResponse.java create mode 100644 desofsApi/src/main/java/isep/ipp/pt/api/desofs/Mapper/TipoReceitaMapper/TipoReceitaMapper.java create mode 100644 desofsApi/src/main/java/isep/ipp/pt/api/desofs/Repository/Implementation/TipoReceitaServiceImpl.java create mode 100644 desofsApi/src/main/java/isep/ipp/pt/api/desofs/Repository/Interface/TipoReceitaServiceRepo.java create mode 100644 desofsApi/src/main/java/isep/ipp/pt/api/desofs/Repository/Repo/TipoReceitaRepo.java create mode 100644 desofsApi/src/main/java/isep/ipp/pt/api/desofs/Service/TipoReceitaService/TipoReceitaService.java create mode 100644 desofsApi/src/main/java/isep/ipp/pt/api/desofs/Service/TipoReceitaService/TipoReceitaServiceImpl.java create mode 100644 desofsApi/src/test/java/isep/ipp/pt/api/desofs/Controllers/TipoReceitaControllerTest.java create mode 100644 desofsApi/src/test/java/isep/ipp/pt/api/desofs/Service/TipoReceitaService/TipoReceitaServiceImplTest.java diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Config/MysqlConfig.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Config/MysqlConfig.java index b2de9269..4ea1e750 100644 --- a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Config/MysqlConfig.java +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Config/MysqlConfig.java @@ -1,16 +1,8 @@ package isep.ipp.pt.api.desofs.Config; import isep.ipp.pt.api.desofs.DesofsApplication; -import isep.ipp.pt.api.desofs.Repository.Implementation.PacoteServiceImpl; -import isep.ipp.pt.api.desofs.Repository.Implementation.ReviewServiceImpl; -import isep.ipp.pt.api.desofs.Repository.Implementation.TipoPacoteServiceImpl; -import isep.ipp.pt.api.desofs.Repository.Implementation.UserRepoImpl; -import isep.ipp.pt.api.desofs.Repository.Implementation.EncomendaServiceImpl; -import isep.ipp.pt.api.desofs.Repository.Interface.EncomendaServiceRepo; -import isep.ipp.pt.api.desofs.Repository.Interface.PacoteServiceRepo; -import isep.ipp.pt.api.desofs.Repository.Interface.ReviewServiceRepo; -import isep.ipp.pt.api.desofs.Repository.Interface.TipoPacoteServiceRepo; -import isep.ipp.pt.api.desofs.Repository.Interface.UserServiceRepo; +import isep.ipp.pt.api.desofs.Repository.Implementation.*; +import isep.ipp.pt.api.desofs.Repository.Interface.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; @@ -59,6 +51,10 @@ public EncomendaServiceRepo mysqlEncomenda(){ public ReviewServiceRepo mysqlReview(){ return new ReviewServiceImpl(); } + @Bean + public TipoReceitaServiceRepo mysqlTipoReceita(){ + return new TipoReceitaServiceImpl(); + } //Datasource @Bean diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Controllers/TipoReceitaController.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Controllers/TipoReceitaController.java new file mode 100644 index 00000000..0db5339b --- /dev/null +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Controllers/TipoReceitaController.java @@ -0,0 +1,84 @@ +package isep.ipp.pt.api.desofs.Controllers; + +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ControllerLayer.TipoReceitaDTOResponse; +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ControllerLayer.TipoReceitaDTOSaveRequest; +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ServiceLayer.TipoReceitaDTOServiceRequest; +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ServiceLayer.TipoReceitaDTOServiceResponse; +import isep.ipp.pt.api.desofs.Mapper.TipoReceitaMapper.TipoReceitaMapper; +import isep.ipp.pt.api.desofs.Service.TipoReceitaService.TipoReceitaService; +import isep.ipp.pt.api.desofs.Utils.PersonalValidation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/tipoReceita") +public class TipoReceitaController { + + @Autowired + private TipoReceitaService tipoReceitaService; + @Autowired + private TipoReceitaMapper tipoReceitaMapper; + @Autowired + private PersonalValidation validation; + + @PostMapping("/save") + public ResponseEntity save(@RequestBody TipoReceitaDTOSaveRequest tipoReceitaRequest) { + if (!validation.validate(tipoReceitaRequest)) { + return ResponseEntity.badRequest().build(); + } + try { + TipoReceitaDTOServiceRequest tipoReceitaServiceRequest = tipoReceitaMapper.toTipoReceitaDTOServiceRequestFromTipoReceitaDTOSaveRequest(tipoReceitaRequest); + if (!validation.validate(tipoReceitaServiceRequest)) { + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + + TipoReceitaDTOResponse tipoReceitaDTOResponse = tipoReceitaMapper.toTipoReceitaDTOResponseFromTipoReceitaDTOServiceResponse(tipoReceitaService.save(tipoReceitaServiceRequest)); + return ResponseEntity.ok(tipoReceitaDTOResponse); + } catch (Exception e) { + System.out.println(e.getMessage()); + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + } + + @GetMapping("/{tipoReceitaId}") + public ResponseEntity getTipoReceita(@PathVariable Long tipoReceitaId) { + if (tipoReceitaId < 0) return ResponseEntity.badRequest().build(); + try { + TipoReceitaDTOServiceResponse tipoReceitaServiceResponse = tipoReceitaService.findbyId(tipoReceitaId); + TipoReceitaDTOResponse tipoReceitaDTOResponse = tipoReceitaMapper.toTipoReceitaDTOResponseFromTipoReceitaDTOServiceResponse(tipoReceitaServiceResponse); + return ResponseEntity.ok(tipoReceitaDTOResponse); + } catch (Exception e) { + System.out.println(e.getMessage()); + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + } + + @GetMapping("/list") + public ResponseEntity> getTipoReceitaList() { + try { + List tipoReceitaServiceResponseList = tipoReceitaService.findAll(); + List tipoReceitaDTOResponseList = tipoReceitaMapper.toTipoReceitaDTOResponseListFromTipoReceitaDTOServiceResponseList(tipoReceitaServiceResponseList); + return ResponseEntity.ok(tipoReceitaDTOResponseList); + } catch (Exception e) { + System.out.println(e.getMessage()); + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + } + + @DeleteMapping("/delete/All") + public ResponseEntity deleteAll() { + tipoReceitaService.deleteAll(); + return ResponseEntity.ok().build(); + } + + @DeleteMapping("/delete/{tipoReceitaId}") + public ResponseEntity deleteById(@PathVariable Long tipoReceitaId) { + if (tipoReceitaId < 0) return ResponseEntity.badRequest().build(); + tipoReceitaService.deleteById(tipoReceitaId); + return ResponseEntity.ok().build(); + } +} diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ControllerLayer/TipoReceitaDTOResponse.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ControllerLayer/TipoReceitaDTOResponse.java new file mode 100644 index 00000000..8a9a4399 --- /dev/null +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ControllerLayer/TipoReceitaDTOResponse.java @@ -0,0 +1,40 @@ +package isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ControllerLayer; + +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; + +public class TipoReceitaDTOResponse { + @Id + @GeneratedValue + private Long tipoReceitaId; + @Pattern(regexp = "^[a-zA-Z0-9]*$", message = "Nome da receita inválido") + @NotNull + @NotBlank + @Size(min = 1,max = 64, message = "Nome do tipo de receita inválido") + private String nome; + + public TipoReceitaDTOResponse() { + } + + public TipoReceitaDTOResponse(Long tipoReceitaId, String nome) { + this.tipoReceitaId = tipoReceitaId; + this.nome = nome; + } + + public TipoReceitaDTOResponse(String nome) { + this.nome = nome; + } + + public Long getTipoReceitaId() { + return tipoReceitaId; + } + + public String getNome() { + return nome; + } + +} diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ControllerLayer/TipoReceitaDTOSaveRequest.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ControllerLayer/TipoReceitaDTOSaveRequest.java new file mode 100644 index 00000000..3ef2e14e --- /dev/null +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ControllerLayer/TipoReceitaDTOSaveRequest.java @@ -0,0 +1,25 @@ +package isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ControllerLayer; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; + +public class TipoReceitaDTOSaveRequest { + @Pattern(regexp = "^[a-zA-Z0-9]*$", message = "Nome da receita inválido") + @NotNull + @NotBlank + @Size(min = 1,max = 64, message = "Nome do tipo de receita inválido") + private String nome; + + public TipoReceitaDTOSaveRequest() { + } + + public TipoReceitaDTOSaveRequest(String nome) { + this.nome = nome; + } + + public String getNome() { + return nome; + } +} diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ServiceLayer/TipoReceitaDTOServiceRequest.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ServiceLayer/TipoReceitaDTOServiceRequest.java new file mode 100644 index 00000000..d3a162b6 --- /dev/null +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ServiceLayer/TipoReceitaDTOServiceRequest.java @@ -0,0 +1,29 @@ +package isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ServiceLayer; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +public class TipoReceitaDTOServiceRequest { + + @Pattern(regexp = "^[a-zA-Z0-9]*$", message = "Nome da receita inválido") + @NotNull + @NotBlank + @Size(min = 1,max = 64, message = "Nome do tipo de receita inválido") + private String nome; + + public TipoReceitaDTOServiceRequest() { + } + + public TipoReceitaDTOServiceRequest(String nome) { + this.nome = nome; + } + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } +} diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ServiceLayer/TipoReceitaDTOServiceResponse.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ServiceLayer/TipoReceitaDTOServiceResponse.java new file mode 100644 index 00000000..8ad76096 --- /dev/null +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Dto/TipoReceitaDTO/ServiceLayer/TipoReceitaDTOServiceResponse.java @@ -0,0 +1,43 @@ +package isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ServiceLayer; + +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; + +public class TipoReceitaDTOServiceResponse { + @Id + @GeneratedValue + private Long tipoReceitaId; + @Pattern(regexp = "^[a-zA-Z0-9]*$", message = "Nome da receita inválido") + @NotNull + @NotBlank + @Size(min = 1,max = 64, message = "Nome do tipo de receita inválido") + private String nome; + + public TipoReceitaDTOServiceResponse() { + } + + public TipoReceitaDTOServiceResponse(Long tipoReceitaId, String nome) { + this.tipoReceitaId = tipoReceitaId; + this.nome = nome; + } + + public TipoReceitaDTOServiceResponse(String nome) { + this.nome = nome; + } + + public Long getTipoReceitaId() { + return tipoReceitaId; + } + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } +} diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Mapper/TipoReceitaMapper/TipoReceitaMapper.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Mapper/TipoReceitaMapper/TipoReceitaMapper.java new file mode 100644 index 00000000..78357472 --- /dev/null +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Mapper/TipoReceitaMapper/TipoReceitaMapper.java @@ -0,0 +1,25 @@ +package isep.ipp.pt.api.desofs.Mapper.TipoReceitaMapper; + +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ControllerLayer.TipoReceitaDTOResponse; +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ControllerLayer.TipoReceitaDTOSaveRequest; +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ServiceLayer.TipoReceitaDTOServiceRequest; +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ServiceLayer.TipoReceitaDTOServiceResponse; +import isep.ipp.pt.api.desofs.Model.TipoReceita; +import org.mapstruct.Mapper; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Mapper(componentModel = "spring") +@Component +public interface TipoReceitaMapper { + //Controller Layer + TipoReceitaDTOServiceRequest toTipoReceitaDTOServiceRequestFromTipoReceitaDTOSaveRequest(TipoReceitaDTOSaveRequest tipoReceitaRequest); + TipoReceitaDTOResponse toTipoReceitaDTOResponseFromTipoReceitaDTOServiceResponse(TipoReceitaDTOServiceResponse save); + List toTipoReceitaDTOResponseListFromTipoReceitaDTOServiceResponseList(List tipoReceitaServiceResponseList); + + //Service Layer + TipoReceita toTipoReceitaFromTipoReceitaDTOServiceRequest(TipoReceitaDTOServiceRequest tipoReceita); + TipoReceitaDTOServiceResponse toTipoReceitaDTOServiceResponseFromTipoReceita(TipoReceita save); + List toTipoReceitaDTOServiceResponseListFromTipoReceita(List all); +} diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Model/Receita.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Model/Receita.java index 8b005145..3824d7ca 100644 --- a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Model/Receita.java +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Model/Receita.java @@ -4,6 +4,7 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.ManyToOne; +import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; @Entity @@ -15,11 +16,13 @@ public class Receita { @Pattern(regexp = "^(\\.\\/[\\w-]+(\\/[\\w-]+)*\\/[\\w-]+\\.[\\w-]+)$", message = "Invalid path") private String path; @Pattern(regexp = "^[a-zA-Z0-9]*$", message = "Invalid name") + @NotNull private String nome; @ManyToOne private Pacote pacote; @ManyToOne + @NotNull private TipoReceita tipoReceita; public Receita() { diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Model/TipoReceita.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Model/TipoReceita.java index c0c31804..6ad960c1 100644 --- a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Model/TipoReceita.java +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Model/TipoReceita.java @@ -3,7 +3,10 @@ import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; @Entity public class TipoReceita { @@ -11,7 +14,9 @@ public class TipoReceita { @GeneratedValue private Long tipoReceitaId; @Pattern(regexp = "^[a-zA-Z0-9]*$", message = "Nome da receita inválido") - + @NotNull + @NotBlank + @Size(min = 1,max = 64, message = "Nome do tipo de receita inválido") private String nome; public TipoReceita() { diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Repository/Implementation/TipoReceitaServiceImpl.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Repository/Implementation/TipoReceitaServiceImpl.java new file mode 100644 index 00000000..eeb9059e --- /dev/null +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Repository/Implementation/TipoReceitaServiceImpl.java @@ -0,0 +1,54 @@ +package isep.ipp.pt.api.desofs.Repository.Implementation; + +import isep.ipp.pt.api.desofs.Model.TipoPacote; +import isep.ipp.pt.api.desofs.Model.TipoReceita; +import isep.ipp.pt.api.desofs.Repository.Interface.TipoReceitaServiceRepo; +import isep.ipp.pt.api.desofs.Repository.Repo.TipoReceitaRepo; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.LinkedList; +import java.util.List; + +public class TipoReceitaServiceImpl implements TipoReceitaServiceRepo { + + @Autowired + private TipoReceitaRepo tipoReceitaRepo; + + @Override + public TipoReceita save(TipoReceita receitaService) { + return tipoReceitaRepo.save(receitaService); + } + + @Override + public TipoReceita findbyId(Long id) { + if (tipoReceitaRepo.findById(id).isPresent()) { + return tipoReceitaRepo.findById(id).get(); + }else { + return null; + } + } + + @Override + public List findAll() { + List lista = new LinkedList<>(); + for (TipoReceita tipoReceita : tipoReceitaRepo.findAll()) { + lista.add(tipoReceita); + } + return lista; + } + + @Override + public TipoReceita findbyName(String name) { + return tipoReceitaRepo.findByNome(name); + } + + @Override + public void deleteAll() { + tipoReceitaRepo.deleteAll(); + } + + @Override + public void deleteById(Long id) { + tipoReceitaRepo.deleteById(id); + } +} diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Repository/Interface/TipoReceitaServiceRepo.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Repository/Interface/TipoReceitaServiceRepo.java new file mode 100644 index 00000000..8084b042 --- /dev/null +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Repository/Interface/TipoReceitaServiceRepo.java @@ -0,0 +1,14 @@ +package isep.ipp.pt.api.desofs.Repository.Interface; + +import isep.ipp.pt.api.desofs.Model.TipoReceita; + +import java.util.List; + +public interface TipoReceitaServiceRepo { + TipoReceita save(TipoReceita receitaService); + TipoReceita findbyId(Long id); + List findAll(); + TipoReceita findbyName(String name); + void deleteAll(); + void deleteById(Long id); +} diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Repository/Repo/TipoReceitaRepo.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Repository/Repo/TipoReceitaRepo.java new file mode 100644 index 00000000..38f92e2d --- /dev/null +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Repository/Repo/TipoReceitaRepo.java @@ -0,0 +1,12 @@ +package isep.ipp.pt.api.desofs.Repository.Repo; + +import isep.ipp.pt.api.desofs.Model.TipoReceita; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface TipoReceitaRepo extends CrudRepository { + @Query("SELECT t FROM TipoReceita t WHERE t.nome = ?1") + TipoReceita findByNome(String nome); +} diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/SecurityConfig.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/SecurityConfig.java index a3c6a74e..ffdab0ba 100644 --- a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/SecurityConfig.java +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/SecurityConfig.java @@ -100,6 +100,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti .requestMatchers("/tipoPacote/**").authenticated() .requestMatchers("/user/info/**").authenticated() .requestMatchers("/encomenda/**").authenticated() + .requestMatchers("/tipoReceita/**").authenticated() .requestMatchers("/api-docs/**").permitAll() .requestMatchers("/swagger-ui/**").permitAll() ) diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Service/TipoReceitaService/TipoReceitaService.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Service/TipoReceitaService/TipoReceitaService.java new file mode 100644 index 00000000..c353e72b --- /dev/null +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Service/TipoReceitaService/TipoReceitaService.java @@ -0,0 +1,17 @@ +package isep.ipp.pt.api.desofs.Service.TipoReceitaService; + +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ServiceLayer.TipoReceitaDTOServiceRequest; +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ServiceLayer.TipoReceitaDTOServiceResponse; + +import java.util.List; + +public interface TipoReceitaService { + TipoReceitaDTOServiceResponse save(TipoReceitaDTOServiceRequest tipoReceita); + TipoReceitaDTOServiceResponse findbyId(Long id); + + List findAll(); + + void deleteAll(); + + void deleteById(Long id); +} diff --git a/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Service/TipoReceitaService/TipoReceitaServiceImpl.java b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Service/TipoReceitaService/TipoReceitaServiceImpl.java new file mode 100644 index 00000000..83f87f31 --- /dev/null +++ b/desofsApi/src/main/java/isep/ipp/pt/api/desofs/Service/TipoReceitaService/TipoReceitaServiceImpl.java @@ -0,0 +1,52 @@ +package isep.ipp.pt.api.desofs.Service.TipoReceitaService; + +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ServiceLayer.TipoReceitaDTOServiceRequest; +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ServiceLayer.TipoReceitaDTOServiceResponse; +import isep.ipp.pt.api.desofs.Mapper.TipoReceitaMapper.TipoReceitaMapper; +import isep.ipp.pt.api.desofs.Model.TipoReceita; +import isep.ipp.pt.api.desofs.Repository.Interface.TipoReceitaServiceRepo; +import isep.ipp.pt.api.desofs.Utils.PersonalValidation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class TipoReceitaServiceImpl implements TipoReceitaService{ + + @Autowired + private TipoReceitaServiceRepo tipoReceitaServiceRepo; + @Autowired + private TipoReceitaMapper tipoReceitaMapper; + @Autowired + private PersonalValidation validation; + + @Override + public TipoReceitaDTOServiceResponse save(TipoReceitaDTOServiceRequest tipoReceita) { + if (!validation.validate(tipoReceita)) { + return null; + } + TipoReceita tipoReceitaMapped = tipoReceitaMapper.toTipoReceitaFromTipoReceitaDTOServiceRequest(tipoReceita); + return tipoReceitaMapper.toTipoReceitaDTOServiceResponseFromTipoReceita(tipoReceitaServiceRepo.save(tipoReceitaMapped)); + } + + @Override + public TipoReceitaDTOServiceResponse findbyId(Long id) { + return tipoReceitaMapper.toTipoReceitaDTOServiceResponseFromTipoReceita(tipoReceitaServiceRepo.findbyId(id)); + } + + @Override + public List findAll() { + return tipoReceitaMapper.toTipoReceitaDTOServiceResponseListFromTipoReceita(tipoReceitaServiceRepo.findAll()); + } + + @Override + public void deleteAll() { + tipoReceitaServiceRepo.deleteAll(); + } + + @Override + public void deleteById(Long id) { + tipoReceitaServiceRepo.deleteById(id); + } +} diff --git a/desofsApi/src/test/java/isep/ipp/pt/api/desofs/Controllers/TipoReceitaControllerTest.java b/desofsApi/src/test/java/isep/ipp/pt/api/desofs/Controllers/TipoReceitaControllerTest.java new file mode 100644 index 00000000..93470ab9 --- /dev/null +++ b/desofsApi/src/test/java/isep/ipp/pt/api/desofs/Controllers/TipoReceitaControllerTest.java @@ -0,0 +1,112 @@ +package isep.ipp.pt.api.desofs.Controllers; + +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ControllerLayer.TipoReceitaDTOResponse; +import isep.ipp.pt.api.desofs.Dto.TipoReceitaDTO.ControllerLayer.TipoReceitaDTOSaveRequest; +import isep.ipp.pt.api.desofs.Service.TipoReceitaService.TipoReceitaService; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest +public class TipoReceitaControllerTest { + + @Autowired + private TipoReceitaController tipoReceitaController; + + @Autowired + private TipoReceitaService tipoReceitaService; + + @AfterEach + public void tearDown() { + tipoReceitaService.deleteAll(); + } + + @BeforeEach + public void setUp() { + tipoReceitaService.deleteAll(); + } + + @Test + @Order(1) + public void testSaveTipoReceita_ValidRequest() { + TipoReceitaDTOSaveRequest tipoReceitaDTOSaveRequest = new TipoReceitaDTOSaveRequest("TipoReceita1"); + + ResponseEntity response = tipoReceitaController.save(tipoReceitaDTOSaveRequest); + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertNotNull(response.getBody()); + } + + @ParameterizedTest + @CsvSource({ + "TipoReceita1", + "TipoReceita2", + "TipoReceita3", + "TipoReceita4", + "TipoReceita5" + }) + @Order(2) + public void testSaveTipoReceita_ValidRequest_Parameterized(String nome) { + TipoReceitaDTOSaveRequest tipoReceitaDTOSaveRequest = new TipoReceitaDTOSaveRequest(nome); + + ResponseEntity response = tipoReceitaController.save(tipoReceitaDTOSaveRequest); + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertNotNull(response.getBody()); + } + + @Test + @Order(3) + public void testSaveTipoReceita_InvalidRequest() { + TipoReceitaDTOSaveRequest tipoReceitaDTOSaveRequest = new TipoReceitaDTOSaveRequest(""); + + ResponseEntity response = tipoReceitaController.save(tipoReceitaDTOSaveRequest); + + assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); + assertNull(response.getBody()); + } + + @ParameterizedTest + @CsvSource({ + "