diff --git a/pom.xml b/pom.xml index d027642..e7ccf38 100644 --- a/pom.xml +++ b/pom.xml @@ -59,6 +59,22 @@ h2 runtime + + + org.mapstruct + mapstruct + 1.5.5.Final + + + + + org.mapstruct + mapstruct-processor + 1.5.5.Final + provided + + + org.projectlombok lombok diff --git a/src/main/java/ir/chaarfasl/back/api/core/controller/AttractionController.java b/src/main/java/ir/chaarfasl/back/api/core/controller/AttractionController.java new file mode 100644 index 0000000..47ae6d3 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/controller/AttractionController.java @@ -0,0 +1,12 @@ +package ir.chaarfasl.back.api.core.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/attractions") +public class AttractionController { + + + +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/repository/AttractionRepository.java b/src/main/java/ir/chaarfasl/back/api/core/dataAccess/repository/AttractionRepository.java new file mode 100644 index 0000000..95a5b6f --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/dataAccess/repository/AttractionRepository.java @@ -0,0 +1,12 @@ +package ir.chaarfasl.back.api.core.dataAccess.repository; + +import ir.chaarfasl.back.api.core.dataAccess.entity.Attraction; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface AttractionRepository extends JpaRepository { + List findByLatitudeBetweenAndLatitudeBetween(Double lat1, Double lat2, Double long1, Double long2); +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/dto/AttractionDto.java b/src/main/java/ir/chaarfasl/back/api/core/dto/AttractionDto.java new file mode 100644 index 0000000..7a97277 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/dto/AttractionDto.java @@ -0,0 +1,17 @@ +package ir.chaarfasl.back.api.core.dto; + +import ir.chaarfasl.back.api.core.dataAccess.entity.Province; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class AttractionDto extends PointDto{ + + private String bestTime; + private Float hardnessDegree; + + public AttractionDto(Long id, String name, String description, Double latitude, Double longitude, Province province, Float rate) { + super(id, name, description, latitude, longitude, province, rate); + } +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/dto/Coordinates.java b/src/main/java/ir/chaarfasl/back/api/core/dto/Coordinates.java new file mode 100644 index 0000000..d928a5b --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/dto/Coordinates.java @@ -0,0 +1,15 @@ +package ir.chaarfasl.back.api.core.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Setter +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class Coordinates { + protected Double latitude; + protected Double longitude; +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/dto/PointDto.java b/src/main/java/ir/chaarfasl/back/api/core/dto/PointDto.java new file mode 100644 index 0000000..fde9b2c --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/dto/PointDto.java @@ -0,0 +1,19 @@ +package ir.chaarfasl.back.api.core.dto; + +import ir.chaarfasl.back.api.core.dataAccess.entity.Province; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +public class PointDto { + private Long id; + private String name; + private String description; + private Double latitude; + private Double longitude; + private Province province; + private Float rate; +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/mapper/AttractionMapper.java b/src/main/java/ir/chaarfasl/back/api/core/mapper/AttractionMapper.java new file mode 100644 index 0000000..2e9dc73 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/mapper/AttractionMapper.java @@ -0,0 +1,15 @@ +package ir.chaarfasl.back.api.core.mapper; + +import ir.chaarfasl.back.api.core.dataAccess.entity.Attraction; +import ir.chaarfasl.back.api.core.dto.AttractionDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + + +@Mapper(componentModel = "spring") +public interface AttractionMapper { + AttractionMapper INSTANCE = Mappers.getMapper(AttractionMapper.class); + + AttractionDto attractionToAttractionDto(Attraction attraction); + Attraction attractionDtoToAttraction(AttractionDto attractionDto); +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/service/AttractionService.java b/src/main/java/ir/chaarfasl/back/api/core/service/AttractionService.java new file mode 100644 index 0000000..6ef5784 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/service/AttractionService.java @@ -0,0 +1,33 @@ +package ir.chaarfasl.back.api.core.service; + +import ir.chaarfasl.back.api.core.dataAccess.entity.Attraction; +import ir.chaarfasl.back.api.core.dataAccess.repository.AttractionRepository; +import ir.chaarfasl.back.api.core.dto.Coordinates; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class AttractionService { + private static final Logger log = LoggerFactory.getLogger(new Object() {}.getClass().getEnclosingClass()); + + AttractionRepository attractionRepository; + + public AttractionService(AttractionRepository attractionRepository) { + this.attractionRepository = attractionRepository; + } + + public List getAttractions(Coordinates leftTop, Coordinates rightDown){ + List resultPoints = null; + try { + resultPoints = attractionRepository.findByLatitudeBetweenAndLatitudeBetween(leftTop.getLatitude(), rightDown.getLatitude(), leftTop.getLongitude(), rightDown.getLongitude()); + } catch (Exception e){ + log.error(e.getMessage()); + throw e; + } + return resultPoints; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 0078edd..bcf1d6b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -6,4 +6,7 @@ spring.datasource.username=zahra spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.generate-ddl=true -spring.jpa.hibernate.ddl-auto=create-drop \ No newline at end of file +#spring.jpa.hibernate.ddl-auto=update +spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.show-sql=true +spring.jpa.properties.hibernate.format_sql=true \ No newline at end of file diff --git a/src/test/java/ir/chaarfasl/back/api/core/AttractionControllerTest.java b/src/test/java/ir/chaarfasl/back/api/core/AttractionControllerTest.java new file mode 100644 index 0000000..5a64db3 --- /dev/null +++ b/src/test/java/ir/chaarfasl/back/api/core/AttractionControllerTest.java @@ -0,0 +1,31 @@ +package ir.chaarfasl.back.api.core; + +import com.fasterxml.jackson.databind.ObjectMapper; +import ir.chaarfasl.back.api.core.controller.AttractionController; +import ir.chaarfasl.back.api.core.dto.Coordinates; +import ir.chaarfasl.back.api.core.service.AttractionService; +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.test.web.servlet.MockMvc; + +@WebMvcTest(AttractionController.class) +public class AttractionControllerTest { + private static final String END_POINT_PATH = "/attractions"; + + @Autowired + MockMvc mockMvc; + + @Autowired + ObjectMapper mapper; + + @MockBean + AttractionService attractionService; + + @Test + public void testGet() throws Exception { + /*Coordinates coordinates = new Coordinates(); + mockMvc.perform(get)*/ + } +}