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)*/
+ }
+}