| src/main/java/de/gedoplan/seminar/jpa/exercise/common/GeneratedIntegerIdEntity.java | ●●●●● Patch | Ansicht | Raw | Blame | Historie | |
| src/main/java/de/gedoplan/seminar/jpa/exercise/domain/MaintenanceDepartment.java | ●●●●● Patch | Ansicht | Raw | Blame | Historie | |
| src/main/java/de/gedoplan/seminar/jpa/exercise/repository/MaintenanceDepartmentRepository.java | ●●●●● Patch | Ansicht | Raw | Blame | Historie | |
| src/main/java/de/gedoplan/seminar/jpa/exercise/rest/MaintenanceDepartmentResource.java | ●●●●● Patch | Ansicht | Raw | Blame | Historie | |
| src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise05Test.java | ●●●●● Patch | Ansicht | Raw | Blame | Historie |
src/main/java/de/gedoplan/seminar/jpa/exercise/common/GeneratedIntegerIdEntity.java
Neue Datei @@ -0,0 +1,39 @@ package de.gedoplan.seminar.jpa.exercise.common; import java.util.Objects; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class GeneratedIntegerIdEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; public Integer getId() { return id; } @Override public int hashCode() { return Objects.hash(id); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; GeneratedIntegerIdEntity other = (GeneratedIntegerIdEntity) obj; return Objects.equals(id, other.id); } } src/main/java/de/gedoplan/seminar/jpa/exercise/domain/MaintenanceDepartment.java
Neue Datei @@ -0,0 +1,27 @@ package de.gedoplan.seminar.jpa.exercise.domain; import javax.persistence.Entity; import javax.persistence.Table; import de.gedoplan.seminar.jpa.exercise.common.GeneratedIntegerIdEntity; @Entity @Table(name = MaintenanceDepartment.TABLE_NAME) public class MaintenanceDepartment extends GeneratedIntegerIdEntity { public static final String TABLE_NAME = "JPA_MAINTENANCE_DEPT"; public static final String TABLE_NAME_HIGHWAYS = "JPA_MAINTENANCE_DEPT_HIGHWAY"; private String name; protected MaintenanceDepartment() { } public MaintenanceDepartment(String name, Highway... highways) { this.name = name; } public String getName() { return this.name; } } src/main/java/de/gedoplan/seminar/jpa/exercise/repository/MaintenanceDepartmentRepository.java
Neue Datei @@ -0,0 +1,9 @@ package de.gedoplan.seminar.jpa.exercise.repository; import org.springframework.data.jpa.repository.JpaRepository; import de.gedoplan.seminar.jpa.exercise.domain.MaintenanceDepartment; public interface MaintenanceDepartmentRepository extends JpaRepository<MaintenanceDepartment, Integer> { } src/main/java/de/gedoplan/seminar/jpa/exercise/rest/MaintenanceDepartmentResource.java
Neue Datei @@ -0,0 +1,61 @@ package de.gedoplan.seminar.jpa.exercise.rest; import java.util.List; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; import de.gedoplan.seminar.jpa.exercise.domain.MaintenanceDepartment; import de.gedoplan.seminar.jpa.exercise.repository.MaintenanceDepartmentRepository; @RequestMapping(path = "/mdeps", produces = MediaType.APPLICATION_JSON_VALUE) @RestController public class MaintenanceDepartmentResource { @Autowired Logger logger; @Autowired MaintenanceDepartmentRepository maintenanceDepartmentRepository; @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE) public void insert(@RequestBody MaintenanceDepartment maintenanceDepartment) { this.logger.debug("----- insert -----"); this.maintenanceDepartmentRepository.save(maintenanceDepartment); this.logger.debug("Inserted: " + maintenanceDepartment); } /** * Exercise JPA_BASICS_05: Find all entries. */ @GetMapping public List<MaintenanceDepartment> findAll() { this.logger.debug("----- findAll -----"); List<MaintenanceDepartment> maintenanceDepartments = maintenanceDepartmentRepository.findAll(); this.logger.debug("Gefunden: " + maintenanceDepartments); return maintenanceDepartments; } /** * Exercise JPA_BASICS_06: Find by highway name. */ @GetMapping("findByHighwayName") public List<MaintenanceDepartment> findByHighwayName(@RequestParam("name") String highwayName) { this.logger.debug("----- findByHighwayName -----"); List<MaintenanceDepartment> maintenanceDepartments = List.of(); // this.highwayRepository. this.logger.debug(highwayName + ": " + maintenanceDepartments); return maintenanceDepartments; } } src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise05Test.java
Neue Datei @@ -0,0 +1,72 @@ package de.gedoplan.seminar.jpa.exercise; import static org.hamcrest.CoreMatchers.is; import static org.junit.jupiter.params.provider.Arguments.arguments; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import de.gedoplan.seminar.jpa.exercise.domain.Highway; import de.gedoplan.seminar.jpa.exercise.domain.MaintenanceDepartment; @TestMethodOrder(MethodOrderer.MethodName.class) @AutoConfigureMockMvc @SpringBootTest public class Exercise05Test { @Autowired MockMvc mockMvc; @Autowired ObjectMapper objectMapper; @ParameterizedTest @MethodSource("getTestData") public void test01_insert(String maintenanceDepartmentName, List<Integer> highwayIds) throws JsonProcessingException, Exception { Highway[] highways = highwayIds.stream().map(this::loadHighway).toArray(Highway[]::new); MaintenanceDepartment maintenanceDepartment = new MaintenanceDepartment(maintenanceDepartmentName, highways); mockMvc.perform(post("/mdeps") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(maintenanceDepartment))) .andExpect(status().isOk()); } @Test void test02_checkFindAll(Integer highwayId, Integer countJunctions) throws Exception { mockMvc.perform(get("/mdeps",highwayId)) .andExpect(jsonPath("$[?(@.name=='Kamen')].highways.size()",is(2))) .andExpect(jsonPath("$[?(@.name=='Bielefeld')].highways.size()",is(2))); } private Highway loadHighway(Integer id) { try { return objectMapper.readValue(mockMvc.perform(get("/highways/{id}", id)).andExpect(status().isOk()) .andReturn().getResponse().getContentAsString(), Highway.class); } catch (Exception e) { throw new RuntimeException(e); } } private static Stream<Arguments> getTestData() { return Stream.of(arguments("Kamen", List.of(4610, 4711)), arguments("Bielefeld", List.of(4711, 4812))); } }