diff --git a/car/src/main/java/cz/muni/pa165/car/data/repository/CarRepository.java b/car/src/main/java/cz/muni/pa165/car/data/repository/CarRepository.java index 0a6e95ea9cbe91c0884dc99959848b3245218a74..17273a5a8b86e7113ea6bb1415686a2f92fef31a 100644 --- a/car/src/main/java/cz/muni/pa165/car/data/repository/CarRepository.java +++ b/car/src/main/java/cz/muni/pa165/car/data/repository/CarRepository.java @@ -1,12 +1,23 @@ package cz.muni.pa165.car.data.repository; - import cz.muni.pa165.car.data.model.Car; +import java.util.List; +import java.util.Optional; 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; /** * Car Repository for Driver Manager. */ @Repository -public interface CarRepository extends JpaRepository<Car, Long> {} +public interface CarRepository extends JpaRepository<Car, Long> { + + @Query("SELECT c FROM Car c WHERE c.id = :id") + Optional<Car> findById(@Param("id") Long id); + + @Query("SELECT c FROM Car c") + List<Car> findAll(); + +} diff --git a/component/pom.xml b/component/pom.xml index 9b25686fc78bd88a2147b3846ac79b44e0d96839..4e6c25d3423eaa8f57edf40187a810e7b843464f 100644 --- a/component/pom.xml +++ b/component/pom.xml @@ -48,6 +48,12 @@ <artifactId>spring-data-jpa</artifactId> <version>3.0.2</version> </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.12</version> + <scope>test</scope> + </dependency> </dependencies> <properties> <maven.compiler.source>17</maven.compiler.source> diff --git a/component/src/main/java/cz/muni/pa165/component/App.java b/component/src/main/java/cz/muni/pa165/component/App.java index 6509fc53585d232a161f6f2aea8c9aa1291c5299..4e6c468adf2fe106355cf5266674cef8113ab522 100644 --- a/component/src/main/java/cz/muni/pa165/component/App.java +++ b/component/src/main/java/cz/muni/pa165/component/App.java @@ -1,22 +1,27 @@ package cz.muni.pa165.component; -import cz.muni.pa165.common_library.exception.RestExceptionHandler; +import jakarta.persistence.EntityManagerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Bean; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.web.client.RestTemplate; /** * Main app. */ -@SpringBootApplication -@EnableJpaRepositories(basePackages = {"cz.muni.pa165.component.data.repository"}) +@SpringBootApplication() @EntityScan("cz.muni.pa165.component.data.model") -@Import(RestExceptionHandler.class) public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } + + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } + } diff --git a/component/src/main/java/cz/muni/pa165/component/data/repository/ComponentRepositoryInterface.java b/component/src/main/java/cz/muni/pa165/component/data/repository/ComponentRepositoryInterface.java index 42fa5b48e9bb43c5d42d09bc1a94d07a3ec3d2d0..708ad1670964f288993f326e6d850d9b8eb9b1a1 100644 --- a/component/src/main/java/cz/muni/pa165/component/data/repository/ComponentRepositoryInterface.java +++ b/component/src/main/java/cz/muni/pa165/component/data/repository/ComponentRepositoryInterface.java @@ -1,7 +1,11 @@ package cz.muni.pa165.component.data.repository; import cz.muni.pa165.component.data.model.CarComponent; +import java.util.List; +import java.util.Optional; 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; /** @@ -9,4 +13,11 @@ import org.springframework.stereotype.Repository; */ @Repository public interface ComponentRepositoryInterface extends JpaRepository<CarComponent, Long> { + + @Query("SELECT c FROM CarComponent c WHERE c.id = :id") + Optional<CarComponent> findById(@Param("id") Long id); + + @Query("SELECT c FROM CarComponent c") + List<CarComponent> findAll(); + } diff --git a/component/src/test/java/cz/muni/pa165/component/config/TestConfig.java b/component/src/test/java/cz/muni/pa165/component/config/TestConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..ec59a47401a9218a4e71b7e282d136b5a4f6cf8a --- /dev/null +++ b/component/src/test/java/cz/muni/pa165/component/config/TestConfig.java @@ -0,0 +1,56 @@ +package cz.muni.pa165.component.config; + +import javax.sql.DataSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.datasource.DriverManagerDataSource; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; + +/** + * Configuration for tests. + */ +@Configuration +public class TestConfig { + + private DataSource dataSource; + + @Autowired + public void setDataSource() { + this.dataSource = dataSource(); + } + + /** + * Data source for factory. + * + * @return data source + */ + public DataSource dataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("org.h2.Driver"); + dataSource.setUrl("jdbc:h2:mem:component;DB_CLOSE_DELAY=-1"); + dataSource.setUsername("admin"); + dataSource.setPassword("admin"); + return dataSource; + } + + /** + * Custom entity manager factory. + * + * @return factory bean + */ + @Bean + public LocalContainerEntityManagerFactoryBean entityManagerFactory() { + HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); + vendorAdapter.setGenerateDdl(true); + + LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); + factory.setJpaVendorAdapter(vendorAdapter); + factory.setPackagesToScan("cz.muni.pa165.component"); + factory.setDataSource(dataSource); + + return factory; + } +} + diff --git a/component/src/test/java/cz/muni/pa165/component/repository/ComponentRepositoryUnitTest.java b/component/src/test/java/cz/muni/pa165/component/repository/ComponentRepositoryUnitTest.java new file mode 100644 index 0000000000000000000000000000000000000000..5aba00f05c988ba00752f6f9f641616df1a63c26 --- /dev/null +++ b/component/src/test/java/cz/muni/pa165/component/repository/ComponentRepositoryUnitTest.java @@ -0,0 +1,101 @@ +package cz.muni.pa165.component.repository; + +import static cz.muni.pa165.component.util.ComponentTestUtil.getComponent; + +import cz.muni.pa165.component.data.model.CarComponent; +import cz.muni.pa165.component.data.repository.ComponentRepositoryInterface; +import java.math.BigDecimal; +import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Unit tests for component repository. + */ +@RunWith(SpringRunner.class) +@DataJpaTest +public class ComponentRepositoryUnitTest { + + @Autowired + private TestEntityManager entityManager; + + @Autowired + private ComponentRepositoryInterface componentRepository; + + @Test + public void saveTest() { + Long id = 1L; + String name = "Engine"; + BigDecimal one = BigDecimal.ONE; + String manufacturer = "Ferrari"; + var carComponent = getComponent(id, name, one, manufacturer); + + var savedComponent = componentRepository.save(carComponent); + + Assertions.assertEquals(savedComponent, carComponent); + Assertions.assertEquals(entityManager.find(CarComponent.class, 1L).getId(), 1); + } + + @Test + public void findByIdTest() { + + Long id = 2L; + String name = "Engine"; + BigDecimal one = BigDecimal.ONE; + String manufacturer = "Ferrari"; + var carComponent = getComponent(id, name, one, manufacturer); + + var savedComponent = componentRepository.save(carComponent); + var component = componentRepository.findById(savedComponent.getId()).orElseThrow(); + + Assertions.assertAll( + () -> Assertions.assertEquals(component.getId(), savedComponent.getId()), + () -> Assertions.assertEquals(component.getName(), savedComponent.getName()), + () -> Assertions.assertEquals(component.getPrice(), savedComponent.getPrice()), + () -> Assertions.assertEquals(component.getWeight(), savedComponent.getWeight()), + () -> Assertions.assertEquals(component.getManufacturer(), savedComponent.getManufacturer()) + ); + } + + @Test + public void findByNonExistingIdTest() { + Assertions.assertThrows(Exception.class, () -> componentRepository.findById(-1L).orElseThrow()); + } + + @Test + public void deleteByIdTest() { + Long id = 3L; + String name = "Engine"; + BigDecimal one = BigDecimal.ONE; + String manufacturer = "Ferrari"; + var carComponent = getComponent(id, name, one, manufacturer); + + var savedComponent = componentRepository.save(carComponent); + componentRepository.delete(savedComponent); + + Assertions.assertThrows(Exception.class, () -> componentRepository + .findById(savedComponent.getId()).orElseThrow()); + } + + @Test + public void testFindAll() { + Long id1 = 4L; + Long id2 = 5L; + String name = "Engine"; + BigDecimal one = BigDecimal.ONE; + String manufacturer = "Ferrari"; + var carComponent1 = getComponent(id1, name, one, manufacturer); + var carComponent2 = getComponent(id2, name, one, manufacturer); + + componentRepository.save(carComponent1); + componentRepository.save(carComponent2); + + var components = componentRepository.findAll(); + Assertions.assertEquals(2, components.size()); + } + +} diff --git a/component/src/test/java/cz/muni/pa165/component/rest/ComponentControllerIntegrationTest.java b/component/src/test/java/cz/muni/pa165/component/rest/ComponentControllerIntegrationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..3ec3bf26d694b868f40711ef9344e7151554ade4 --- /dev/null +++ b/component/src/test/java/cz/muni/pa165/component/rest/ComponentControllerIntegrationTest.java @@ -0,0 +1,145 @@ +package cz.muni.pa165.component.rest; + +import static cz.muni.pa165.component.util.ComponentTestUtil.getComponent; +import static org.junit.jupiter.api.Assertions.assertAll; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.BDDMockito.given; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +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.status; + +import com.fasterxml.jackson.databind.ObjectMapper; +import cz.muni.pa165.component.data.model.CarComponent; +import cz.muni.pa165.component.data.repository.ComponentRepositoryInterface; +import java.math.BigDecimal; +import java.util.List; +import java.util.Optional; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +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.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; + +@SpringBootTest +@AutoConfigureMockMvc +class ComponentControllerIntegrationTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private ComponentRepositoryInterface componentRepositoryMock; + + @Autowired + private ObjectMapper objectMapper; + + @Test + void postIntegrationTest() throws Exception { + + Long id = 1L; + String name = "Engine"; + BigDecimal one = BigDecimal.ONE; + String manufacturer = "Ferrari"; + var carComponent = getComponent(id, name, one, manufacturer); + + given(componentRepositoryMock.save(any(CarComponent.class))).willReturn(carComponent); + + String response = mockMvc.perform(post("/component/") + .content(objectMapper.writeValueAsString(carComponent)) + .contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andReturn().getResponse().getContentAsString(); + + CarComponent componentResponse = objectMapper.readValue(response, CarComponent.class); + assertAll( + () -> assertEquals(carComponent.getId(), componentResponse.getId()), + () -> assertEquals(carComponent.getName(), componentResponse.getName()), + () -> assertEquals(carComponent.getWeight(), componentResponse.getWeight()), + () -> assertEquals(carComponent.getPrice(), componentResponse.getPrice()), + () -> assertEquals(carComponent.getManufacturer(), componentResponse.getManufacturer()) + ); + } + + @Test + void deleteIntegrationTest() throws Exception { + + Long id = 1L; + String name = "Engine"; + BigDecimal one = BigDecimal.ONE; + String manufacturer = "Ferrari"; + var carComponent = getComponent(id, name, one, manufacturer); + + given(componentRepositoryMock.findById(anyLong())).willReturn( + Optional.of(carComponent)); + + String expectedResponse = "Car component with id: 1was successfully deleted"; + String actualResponse = mockMvc.perform(delete("/component/") + .param("componentId", String.valueOf(id)) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn().getResponse().getContentAsString(); + + Assertions.assertEquals(expectedResponse, actualResponse); + } + + @Test + void getComponentByIdTest() throws Exception { + + Long id = 1L; + String name = "Engine"; + BigDecimal one = BigDecimal.ONE; + String manufacturer = "Ferrari"; + var carComponent = getComponent(id, name, one, manufacturer); + + given(componentRepositoryMock.findById(id)).willReturn(Optional.of(carComponent)); + + String response = mockMvc.perform(get("/component/id") + .param("componentId", String.valueOf(id)) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn().getResponse().getContentAsString(); + var componentResponse = objectMapper.readValue(response, CarComponent.class); + + Assertions.assertAll( + () -> Assertions.assertEquals(id, componentResponse.getId()), + () -> Assertions.assertEquals(name, componentResponse.getName()), + () -> Assertions.assertEquals(one, componentResponse.getWeight()), + () -> Assertions.assertEquals(one, componentResponse.getPrice()), + () -> Assertions.assertEquals(manufacturer, componentResponse.getManufacturer()) + ); + } + + @Test + void getAllComponentsTest() throws Exception { + + Long id = 1L; + String name = "Engine"; + BigDecimal one = BigDecimal.ONE; + String manufacturer = "Ferrari"; + var carComponent = getComponent(id, name, one, manufacturer); + + given(componentRepositoryMock.findAll()).willReturn(List.of(carComponent)); + + String response = mockMvc.perform(get("/component/") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn().getResponse().getContentAsString(); + + var componentResponse = objectMapper.readValue(response, CarComponent[].class); + Assertions.assertAll( + () -> Assertions.assertEquals(id, componentResponse[0].getId()), + () -> Assertions.assertEquals(name, componentResponse[0].getName()), + () -> Assertions.assertEquals(one, componentResponse[0].getWeight()), + () -> Assertions.assertEquals(one, componentResponse[0].getPrice()), + () -> Assertions.assertEquals(manufacturer, componentResponse[0].getManufacturer()) + ); + } + +} + diff --git a/component/src/test/java/cz/muni/pa165/component/rest/ComponentControllerUnitTest.java b/component/src/test/java/cz/muni/pa165/component/rest/ComponentControllerUnitTest.java new file mode 100644 index 0000000000000000000000000000000000000000..3b2a20d148ba283c633fdf52570e9f16fd0736b6 --- /dev/null +++ b/component/src/test/java/cz/muni/pa165/component/rest/ComponentControllerUnitTest.java @@ -0,0 +1,126 @@ +package cz.muni.pa165.component.rest; + +import static cz.muni.pa165.component.util.ComponentTestUtil.getComponent; +import static cz.muni.pa165.component.util.ComponentTestUtil.getComponentResponseDto; +import static org.mockito.BDDMockito.given; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +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 com.fasterxml.jackson.databind.ObjectMapper; +import cz.muni.pa165.common_library.dtos.CarComponentRequestDto; +import cz.muni.pa165.common_library.dtos.CarComponentResponseDto; +import cz.muni.pa165.component.data.model.CarComponent; +import cz.muni.pa165.component.service.ComponentService; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; + +@WebMvcTest(ComponentController.class) +class ComponentControllerUnitTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private ComponentService componentService; + + @Autowired + private ObjectMapper objectMapper; + + @Test + void createCarComponentTest() throws Exception { + + Long id = 1L; + String name = "Engine"; + BigDecimal one = BigDecimal.ONE; + String manufacturer = "Ferrari"; + var carComponent = getComponent(id, name, one, manufacturer); + var carComponentResponseDto = getComponentResponseDto(id, name, one, manufacturer); + + given(componentService.postCarComponent(CarComponentRequestDto.builder().build())) + .willReturn(carComponentResponseDto); + mockMvc.perform(post("/component/") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(carComponent))) + .andExpect(status().isOk()); + } + + @Test + void nonExistingPathTest() throws Exception { + mockMvc.perform(post("/invalidPath")) + .andExpect(status().isNotFound()); + } + + @Test + void createComponentWithNullValuesTest() throws Exception { + + CarComponent carComponent = new CarComponent(); + CarComponentRequestDto carComponentRequestDto = new CarComponentRequestDto(); + CarComponentResponseDto carComponentResponseDto = new CarComponentResponseDto(); + + given(componentService.postCarComponent(carComponentRequestDto)) + .willReturn(carComponentResponseDto); + mockMvc.perform(post("/component/").contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(carComponent))) + .andExpect(status().isBadRequest()); + } + + @Test + void deleteCarComponentTest() throws Exception { + + Long id = 1L; + + String expectedResponse = "Car component with id: 1was successfully deleted"; + given(componentService.deleteById(id)).willReturn(expectedResponse); + String actualResponse = mockMvc.perform(delete("/component/") + .param("componentId", String.valueOf(id)) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn().getResponse().getContentAsString(); + Assertions.assertEquals(expectedResponse, actualResponse); + } + + @Test + void getCarComponentTest() throws Exception { + + Long id = 1L; + String name = "Engine"; + BigDecimal one = BigDecimal.ONE; + String manufacturer = "Ferrari"; + var carComponentResponseDto = getComponentResponseDto(id, name, one, manufacturer); + + given(componentService.getCarComponentById(id)).willReturn(carComponentResponseDto); + mockMvc.perform(get("/component/id") + .param("componentId", String.valueOf(id)) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id").value(id)) + .andExpect(jsonPath("$.name").value(name)) + .andExpect(jsonPath("$.price").value(one)) + .andExpect(jsonPath("$.weight").value(one)) + .andExpect(jsonPath("$.manufacturer").value(manufacturer)); + } + + @Test + void getAllCarComponentsTest() throws Exception { + + List<CarComponentResponseDto> components = new ArrayList<>(); + + given(componentService.getAllCarComponents()).willReturn(components); + mockMvc.perform(get("/component/") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + +} + diff --git a/component/src/test/java/cz/muni/pa165/component/rest/ComponentInitControllerItTest.java b/component/src/test/java/cz/muni/pa165/component/rest/ComponentInitControllerItTest.java deleted file mode 100644 index 3c9619a4f578deb24a97e86d847c650c0938ea3a..0000000000000000000000000000000000000000 --- a/component/src/test/java/cz/muni/pa165/component/rest/ComponentInitControllerItTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package cz.muni.pa165.component.rest; - -import com.fasterxml.jackson.databind.ObjectMapper; -import cz.muni.pa165.component.service.ComponentService; -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.test.web.servlet.MockMvc; - - -@SpringBootTest -@AutoConfigureMockMvc -class ComponentInitControllerItTest { - - @Autowired - private MockMvc mockMvc; - - @Autowired - private ObjectMapper objectMapper; - - @Autowired - ComponentService componentInitService; - - -} diff --git a/component/src/test/java/cz/muni/pa165/component/rest/ComponentInitControllerUnitTest.java b/component/src/test/java/cz/muni/pa165/component/rest/ComponentInitControllerUnitTest.java deleted file mode 100644 index 4586f73d2bd56cdd90c541c576fb05ec4de034e0..0000000000000000000000000000000000000000 --- a/component/src/test/java/cz/muni/pa165/component/rest/ComponentInitControllerUnitTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package cz.muni.pa165.component.rest; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.test.web.servlet.MockMvc; - -@WebMvcTest(ComponentController.class) -class ComponentInitControllerUnitTest { - - @Autowired - private MockMvc mockMvc; - - //@MockBean - //private ComponentInitFacade mockComponentInitFacade; - - @Autowired - private ObjectMapper objectMapper; - - -} diff --git a/component/src/test/java/cz/muni/pa165/component/util/ComponentTestUtil.java b/component/src/test/java/cz/muni/pa165/component/util/ComponentTestUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..d2927bde8100be7b7731bdac7463dc679de9090c --- /dev/null +++ b/component/src/test/java/cz/muni/pa165/component/util/ComponentTestUtil.java @@ -0,0 +1,76 @@ +package cz.muni.pa165.component.util; + +import cz.muni.pa165.common_library.dtos.CarComponentRequestDto; +import cz.muni.pa165.common_library.dtos.CarComponentResponseDto; +import cz.muni.pa165.component.data.model.CarComponent; +import java.math.BigDecimal; + +/** + * Helper class for creating Component objects. + */ +public class ComponentTestUtil { + + /** + * Returns a CarComponent instance initialized with the given parameters. + * + * @param id the ID of the car component + * @param name the name of the car component + * @param decimal the weight and price of the car component + * @param manufacturer the manufacturer of the car component + * @return a CarComponent instance initialized with the given parameters + */ + public static CarComponent getComponent(Long id, + String name, + BigDecimal decimal, + String manufacturer) { + return CarComponent.builder() + .id(id) + .name(name) + .weight(decimal) + .price(decimal) + .manufacturer(manufacturer) + .build(); + } + + /** + * Returns a CarComponentResponseDto instance initialized with the given parameters. + * + * @param id the ID of the car component + * @param name the name of the car component + * @param decimal the weight and price of the car component + * @param manufacturer the manufacturer of the car component + * @return a CarComponentResponseDto instance initialized with the given parameters + */ + public static CarComponentResponseDto getComponentResponseDto(Long id, + String name, + BigDecimal decimal, + String manufacturer) { + return CarComponentResponseDto.builder() + .id(id) + .name(name) + .weight(decimal) + .price(decimal) + .manufacturer(manufacturer) + .build(); + } + + /** + * Returns a CarComponentResponseDto instance initialized with the given parameters. + * + * @param name the name of the car component + * @param decimal the weight and price of the car component + * @param manufacturer the manufacturer of the car component + * @return a CarComponentResponseDto instance initialized with the given parameters + */ + public static CarComponentRequestDto getComponentRequestDto(String name, + BigDecimal decimal, + String manufacturer) { + return CarComponentRequestDto.builder() + .name(name) + .weight(decimal) + .price(decimal) + .manufacturer(manufacturer) + .build(); + } + +} diff --git a/driver/src/main/java/cz/muni/pa165/driver/data/repository/DriverRepository.java b/driver/src/main/java/cz/muni/pa165/driver/data/repository/DriverRepository.java index 6a5eb0cd0eef31040355dec815d53a3840791106..ed33361037a8a8a409581ec0ca2c4f90cbb3d480 100644 --- a/driver/src/main/java/cz/muni/pa165/driver/data/repository/DriverRepository.java +++ b/driver/src/main/java/cz/muni/pa165/driver/data/repository/DriverRepository.java @@ -1,7 +1,11 @@ package cz.muni.pa165.driver.data.repository; import cz.muni.pa165.driver.data.model.Driver; +import java.util.List; +import java.util.Optional; 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; /** @@ -10,4 +14,10 @@ import org.springframework.stereotype.Repository; @Repository public interface DriverRepository extends JpaRepository<Driver, Long> { + @Query("SELECT d FROM Driver d WHERE d.id = :id") + Optional<Driver> findById(@Param("id") Long id); + + @Query("SELECT d FROM Driver d") + List<Driver> findAll(); + } diff --git a/race/src/main/java/cz/muni/pa165/race/data/repository/RaceRepository.java b/race/src/main/java/cz/muni/pa165/race/data/repository/RaceRepository.java index b1bdd7be9675172e847cfbbfd19ab69e1fb066e5..3bd94a36e827c4fdb12130e00f45e6190365e382 100644 --- a/race/src/main/java/cz/muni/pa165/race/data/repository/RaceRepository.java +++ b/race/src/main/java/cz/muni/pa165/race/data/repository/RaceRepository.java @@ -26,4 +26,5 @@ public interface RaceRepository extends JpaRepository<Race, Long> { + " JOIN r.raceInfo ri " + "WHERE ri.location = :location") List<Race> findRacesByLocation(@Param("location") Location raceLocation); + } diff --git a/race/src/main/java/cz/muni/pa165/race/data/repository/SeasonRepository.java b/race/src/main/java/cz/muni/pa165/race/data/repository/SeasonRepository.java index 65b0c2dda424cedcb3fe5f97f9551998b12f2cae..ecea648538411110f6aadcc15ea1895520d95b73 100644 --- a/race/src/main/java/cz/muni/pa165/race/data/repository/SeasonRepository.java +++ b/race/src/main/java/cz/muni/pa165/race/data/repository/SeasonRepository.java @@ -1,7 +1,11 @@ package cz.muni.pa165.race.data.repository; import cz.muni.pa165.race.data.model.Season; +import java.util.List; +import java.util.Optional; 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; /** @@ -9,4 +13,11 @@ import org.springframework.stereotype.Repository; */ @Repository public interface SeasonRepository extends JpaRepository<Season, Long> { + + @Query("SELECT s FROM Season s WHERE s.id = :id") + Optional<Season> findById(@Param("id") Long id); + + @Query("SELECT s FROM Season s") + List<Season> findAll(); + }