From bd0bc7da53f4317c138f360636fa7acf41e412c9 Mon Sep 17 00:00:00 2001 From: Zahra Karimi Date: Wed, 27 Nov 2024 14:51:40 +0330 Subject: [PATCH] Add mapper for entity to dto --- .../core/controller/AttractionController.java | 38 ++++++++++- .../core/controller/CommentController.java | 33 ++++++++++ .../core/controller/GeneralController.java | 49 ++++++++++++++ .../repository/AttractionRepository.java | 12 ---- .../back/api/core/dto/AttractionDto.java | 6 +- .../back/api/core/dto/CommentDto.java | 18 ++++++ .../{Coordinates.java => CoordinatesDto.java} | 2 +- .../back/api/core/dto/EatingPlaceDto.java | 13 ++++ .../back/api/core/dto/GeneralPointsDto.java | 16 +++++ .../chaarfasl/back/api/core/dto/PointDto.java | 16 ++--- .../back/api/core/dto/PointEpitomeDto.java | 17 +++++ .../back/api/core/dto/ResidenceDto.java | 13 ++++ .../{dataAccess => }/entity/Attraction.java | 2 +- .../entity/AttractionComment.java | 2 +- .../entity/AttractionRates.java | 5 +- .../core/{dataAccess => }/entity/Comment.java | 5 +- .../entity/CommentStatus.java | 17 +++-- .../{dataAccess => }/entity/EatingPlace.java | 2 +- .../entity/EatingPlaceComment.java | 2 +- .../entity/EatingPlaceRates.java | 2 +- .../{dataAccess => }/entity/Keywords.java | 5 +- .../core/{dataAccess => }/entity/Point.java | 5 +- .../{dataAccess => }/entity/PointStatus.java | 18 ++++-- .../core/entity/PointStatusRepository.java | 7 ++ .../{dataAccess => }/entity/Province.java | 13 ++-- .../core/{dataAccess => }/entity/Rates.java | 5 +- .../{dataAccess => }/entity/Residence.java | 2 +- .../entity/ResidenceComment.java | 2 +- .../entity/ResidenceRates.java | 2 +- .../core/{dataAccess => }/entity/Search.java | 17 ++++- .../api/core/mapper/AttractionMapper.java | 2 +- .../back/api/core/mapper/CommentMapper.java | 17 +++++ .../api/core/mapper/EatingPlaceMapper.java | 17 +++++ .../api/core/mapper/PointEpitomeMapper.java | 16 +++++ .../back/api/core/mapper/ResidenceMapper.java | 17 +++++ .../core/{dataAccess => }/repository/.gitkeep | 0 .../core/repository/AttractionRepository.java | 13 ++++ .../core/repository/CommentRepository.java | 9 +++ .../repository/CommentStatusRepository.java | 8 +++ .../repository/EatingPlaceRepository.java | 13 ++++ .../core/repository/ResidenceRepository.java | 13 ++++ .../api/core/service/AttractionService.java | 44 ++++++++++--- .../back/api/core/service/CommentService.java | 37 +++++++++++ .../api/core/service/EatingPlaceService.java | 64 +++++++++++++++++++ .../api/core/service/PointStatusService.java | 28 ++++++++ .../api/core/service/ResidenceService.java | 62 ++++++++++++++++++ .../back/api/core/util/Constants.java | 2 + .../api/core/AttractionControllerTest.java | 1 - 48 files changed, 640 insertions(+), 69 deletions(-) create mode 100644 src/main/java/ir/chaarfasl/back/api/core/controller/CommentController.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/controller/GeneralController.java delete mode 100644 src/main/java/ir/chaarfasl/back/api/core/dataAccess/repository/AttractionRepository.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/dto/CommentDto.java rename src/main/java/ir/chaarfasl/back/api/core/dto/{Coordinates.java => CoordinatesDto.java} (90%) create mode 100644 src/main/java/ir/chaarfasl/back/api/core/dto/EatingPlaceDto.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/dto/GeneralPointsDto.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/dto/PointEpitomeDto.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/dto/ResidenceDto.java rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/Attraction.java (96%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/AttractionComment.java (83%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/AttractionRates.java (80%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/Comment.java (92%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/CommentStatus.java (50%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/EatingPlace.java (94%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/EatingPlaceComment.java (83%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/EatingPlaceRates.java (83%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/Keywords.java (81%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/Point.java (92%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/PointStatus.java (73%) create mode 100644 src/main/java/ir/chaarfasl/back/api/core/entity/PointStatusRepository.java rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/Province.java (74%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/Rates.java (89%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/Residence.java (95%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/ResidenceComment.java (83%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/ResidenceRates.java (83%) rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/entity/Search.java (71%) create mode 100644 src/main/java/ir/chaarfasl/back/api/core/mapper/CommentMapper.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/mapper/EatingPlaceMapper.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/mapper/PointEpitomeMapper.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/mapper/ResidenceMapper.java rename src/main/java/ir/chaarfasl/back/api/core/{dataAccess => }/repository/.gitkeep (100%) create mode 100644 src/main/java/ir/chaarfasl/back/api/core/repository/AttractionRepository.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/repository/CommentRepository.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/repository/CommentStatusRepository.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/repository/EatingPlaceRepository.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/repository/ResidenceRepository.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/service/CommentService.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/service/EatingPlaceService.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/service/PointStatusService.java create mode 100644 src/main/java/ir/chaarfasl/back/api/core/service/ResidenceService.java 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 index 47ae6d3..ce5e597 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/controller/AttractionController.java +++ b/src/main/java/ir/chaarfasl/back/api/core/controller/AttractionController.java @@ -1,12 +1,44 @@ package ir.chaarfasl.back.api.core.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import ir.chaarfasl.back.api.core.dto.AttractionDto; +import ir.chaarfasl.back.api.core.dto.CoordinatesDto; +import ir.chaarfasl.back.api.core.dto.PointEpitomeDto; +import ir.chaarfasl.back.api.core.service.AttractionService; +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("/attractions") +@RequestMapping("/api/attractions") public class AttractionController { + private AttractionService attractionService; + @Autowired + public AttractionController(AttractionService attractionService) { + this.attractionService = attractionService; + } + + @PostMapping("/getAttraction") + public ResponseEntity> getAttraction(@RequestBody CoordinatesDto coordinatesDtoLeftTop, @RequestBody CoordinatesDto coordinatesDtoRightDown) { + List attractionsList = attractionService.getAttractions(coordinatesDtoLeftTop, coordinatesDtoRightDown); + if(attractionsList != null && !attractionsList.isEmpty()) { + return ResponseEntity.ok(attractionsList); + } else { + return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + } + } + + @GetMapping("/{id}") + public ResponseEntity getAttractionById(@PathVariable Long id) { + AttractionDto attractionDto = attractionService.getAttractionById(id); + if (attractionDto != null) { + return ResponseEntity.ok(attractionDto); + } + return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + } } diff --git a/src/main/java/ir/chaarfasl/back/api/core/controller/CommentController.java b/src/main/java/ir/chaarfasl/back/api/core/controller/CommentController.java new file mode 100644 index 0000000..64f0266 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/controller/CommentController.java @@ -0,0 +1,33 @@ +package ir.chaarfasl.back.api.core.controller; + +import ir.chaarfasl.back.api.core.dto.CommentDto; +import ir.chaarfasl.back.api.core.service.CommentService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +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.RestController; + +@RestController +@RequestMapping("/api/comments") +public class CommentController { + private static final Logger log = LoggerFactory.getLogger(new Object() {}.getClass().getEnclosingClass()); + + CommentService commentService; + + public CommentController(CommentService commentService) { + this.commentService = commentService; + } + + @PostMapping + public ResponseEntity addComment(@RequestBody CommentDto commentDto){ + CommentDto addedComment = commentService.addComment(commentDto); +// URI uri = URI.create("/comments/" + addedComment.getId()); + return ResponseEntity.status(HttpStatus.CREATED) + .body(addedComment); + } + +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/controller/GeneralController.java b/src/main/java/ir/chaarfasl/back/api/core/controller/GeneralController.java new file mode 100644 index 0000000..308bf59 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/controller/GeneralController.java @@ -0,0 +1,49 @@ +package ir.chaarfasl.back.api.core.controller; + +import ir.chaarfasl.back.api.core.dto.CoordinatesDto; +import ir.chaarfasl.back.api.core.dto.GeneralPointsDto; +import ir.chaarfasl.back.api.core.dto.PointEpitomeDto; +import ir.chaarfasl.back.api.core.service.AttractionService; +import ir.chaarfasl.back.api.core.service.EatingPlaceService; +import ir.chaarfasl.back.api.core.service.ResidenceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +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.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/api/general") +public class GeneralController { + + private AttractionService attractionService; + private EatingPlaceService eatingPlaceService; + private ResidenceService residenceService; + + @Autowired + public GeneralController(AttractionService attractionService, EatingPlaceService eatingPlaceService, ResidenceService residenceService) { + this.attractionService = attractionService; + this.eatingPlaceService = eatingPlaceService; + this.residenceService = residenceService; + } + + @PostMapping("/getAll") + public ResponseEntity getAll(@RequestBody CoordinatesDto coordinatesDtoLeftTop, @RequestBody CoordinatesDto coordinatesDtoRightDown) { + List attractionsList = attractionService.getAttractions(coordinatesDtoLeftTop, coordinatesDtoRightDown); + List eatingPlacesList = eatingPlaceService.getEatingPlace(coordinatesDtoLeftTop, coordinatesDtoRightDown); + List residencesList = residenceService.getResidences(coordinatesDtoLeftTop, coordinatesDtoRightDown); + GeneralPointsDto generalPointsDto = new GeneralPointsDto(attractionsList, eatingPlacesList, residencesList); + + if((attractionsList == null || attractionsList.isEmpty()) + && (eatingPlacesList == null && eatingPlacesList.isEmpty()) + && (residencesList == null && residencesList.isEmpty())) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + } else { + return ResponseEntity.ok(generalPointsDto); + } + } +} 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 deleted file mode 100644 index 95a5b6f..0000000 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/repository/AttractionRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -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 index 7a97277..a898049 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dto/AttractionDto.java +++ b/src/main/java/ir/chaarfasl/back/api/core/dto/AttractionDto.java @@ -1,6 +1,6 @@ package ir.chaarfasl.back.api.core.dto; -import ir.chaarfasl.back.api.core.dataAccess.entity.Province; +import ir.chaarfasl.back.api.core.entity.Province; import lombok.Getter; import lombok.Setter; @@ -11,7 +11,7 @@ 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); + public AttractionDto(Long id, String name, Double latitude, Double longitude, Float rate, String description, Province province) { + super(id, name, latitude, longitude, rate, description, province); } } diff --git a/src/main/java/ir/chaarfasl/back/api/core/dto/CommentDto.java b/src/main/java/ir/chaarfasl/back/api/core/dto/CommentDto.java new file mode 100644 index 0000000..dde6216 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/dto/CommentDto.java @@ -0,0 +1,18 @@ +package ir.chaarfasl.back.api.core.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +public class CommentDto { + private Long id; + private Long pointId; + private String userId; + private String title; + private String context; +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/dto/Coordinates.java b/src/main/java/ir/chaarfasl/back/api/core/dto/CoordinatesDto.java similarity index 90% rename from src/main/java/ir/chaarfasl/back/api/core/dto/Coordinates.java rename to src/main/java/ir/chaarfasl/back/api/core/dto/CoordinatesDto.java index d928a5b..b22359c 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dto/Coordinates.java +++ b/src/main/java/ir/chaarfasl/back/api/core/dto/CoordinatesDto.java @@ -9,7 +9,7 @@ import lombok.Setter; @Getter @AllArgsConstructor @NoArgsConstructor -public class Coordinates { +public class CoordinatesDto { protected Double latitude; protected Double longitude; } diff --git a/src/main/java/ir/chaarfasl/back/api/core/dto/EatingPlaceDto.java b/src/main/java/ir/chaarfasl/back/api/core/dto/EatingPlaceDto.java new file mode 100644 index 0000000..67b522d --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/dto/EatingPlaceDto.java @@ -0,0 +1,13 @@ +package ir.chaarfasl.back.api.core.dto; + +import ir.chaarfasl.back.api.core.entity.Province; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class EatingPlaceDto extends PointDto{ + public EatingPlaceDto(Long id, String name, Double latitude, Double longitude, Float rate, String description, Province province) { + super(id, name, latitude, longitude, rate, description, province); + } +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/dto/GeneralPointsDto.java b/src/main/java/ir/chaarfasl/back/api/core/dto/GeneralPointsDto.java new file mode 100644 index 0000000..e248aa2 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/dto/GeneralPointsDto.java @@ -0,0 +1,16 @@ +package ir.chaarfasl.back.api.core.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +@AllArgsConstructor +public class GeneralPointsDto { + List attractionDtoList; + List eatingPlaceDtoList; + List residenceDtoList; +} 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 index fde9b2c..4259e04 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dto/PointDto.java +++ b/src/main/java/ir/chaarfasl/back/api/core/dto/PointDto.java @@ -1,19 +1,19 @@ package ir.chaarfasl.back.api.core.dto; -import ir.chaarfasl.back.api.core.dataAccess.entity.Province; +import ir.chaarfasl.back.api.core.entity.Province; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @Getter @Setter -@AllArgsConstructor -public class PointDto { - private Long id; - private String name; +public class PointDto extends PointEpitomeDto{ private String description; - private Double latitude; - private Double longitude; private Province province; - private Float rate; + + public PointDto(Long id, String name, Double latitude, Double longitude, Float rate, String description, Province province) { + super(id, name, latitude, longitude, rate); + this.description = description; + this.province = province; + } } diff --git a/src/main/java/ir/chaarfasl/back/api/core/dto/PointEpitomeDto.java b/src/main/java/ir/chaarfasl/back/api/core/dto/PointEpitomeDto.java new file mode 100644 index 0000000..4365d29 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/dto/PointEpitomeDto.java @@ -0,0 +1,17 @@ +package ir.chaarfasl.back.api.core.dto; + +import ir.chaarfasl.back.api.core.entity.Province; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +public class PointEpitomeDto { + private Long id; + private String name; + private Double latitude; + private Double longitude; + private Float rate; +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/dto/ResidenceDto.java b/src/main/java/ir/chaarfasl/back/api/core/dto/ResidenceDto.java new file mode 100644 index 0000000..a65ae2d --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/dto/ResidenceDto.java @@ -0,0 +1,13 @@ +package ir.chaarfasl.back.api.core.dto; + +import ir.chaarfasl.back.api.core.entity.Province; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ResidenceDto extends PointDto{ + public ResidenceDto(Long id, String name, Double latitude, Double longitude, Float rate, String description, Province province) { + super(id, name, latitude, longitude, rate, description, province); + } +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Attraction.java b/src/main/java/ir/chaarfasl/back/api/core/entity/Attraction.java similarity index 96% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Attraction.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/Attraction.java index 52607a1..507b332 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Attraction.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/Attraction.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.Column; import jakarta.persistence.Entity; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/AttractionComment.java b/src/main/java/ir/chaarfasl/back/api/core/entity/AttractionComment.java similarity index 83% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/AttractionComment.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/AttractionComment.java index 5c5d855..5f2b50d 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/AttractionComment.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/AttractionComment.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.Entity; import jakarta.persistence.Table; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/AttractionRates.java b/src/main/java/ir/chaarfasl/back/api/core/entity/AttractionRates.java similarity index 80% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/AttractionRates.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/AttractionRates.java index 7d760e9..6b56d92 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/AttractionRates.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/AttractionRates.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.*; import lombok.AccessLevel; @@ -16,7 +16,8 @@ public class AttractionRates extends Rates { @Getter(AccessLevel.NONE) @Setter(AccessLevel.NONE) @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) + // todo: best practice + @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false) private Long id; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Comment.java b/src/main/java/ir/chaarfasl/back/api/core/entity/Comment.java similarity index 92% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Comment.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/Comment.java index ba38810..a5f6a25 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Comment.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/Comment.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.*; import lombok.AllArgsConstructor; @@ -15,7 +15,8 @@ import java.time.LocalDateTime; @AllArgsConstructor public class Comment implements Cloneable { @Id - @GeneratedValue() + // todo: best practice + @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID", nullable = false) protected Long id; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/CommentStatus.java b/src/main/java/ir/chaarfasl/back/api/core/entity/CommentStatus.java similarity index 50% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/CommentStatus.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/CommentStatus.java index 7a2dd13..0722e38 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/CommentStatus.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/CommentStatus.java @@ -1,9 +1,7 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -19,10 +17,21 @@ import lombok.Setter; public class CommentStatus { @Id + // todo: best practice + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID", nullable = false) private Integer id; + + @Column(name = "NAME", nullable = false) private String name; + + @Column(name = "STATUS_VALUE", nullable = false) private Integer statusValue; + + @Column(name = "DESCRIPTION") private String description; + + @Column(name = "IS_ACTIVE", nullable = false) private short isActive; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/EatingPlace.java b/src/main/java/ir/chaarfasl/back/api/core/entity/EatingPlace.java similarity index 94% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/EatingPlace.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/EatingPlace.java index 3dfd8aa..49a0ad9 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/EatingPlace.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/EatingPlace.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.Entity; import jakarta.persistence.Table; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/EatingPlaceComment.java b/src/main/java/ir/chaarfasl/back/api/core/entity/EatingPlaceComment.java similarity index 83% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/EatingPlaceComment.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/EatingPlaceComment.java index d8898cb..8d46236 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/EatingPlaceComment.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/EatingPlaceComment.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.Entity; import jakarta.persistence.Table; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/EatingPlaceRates.java b/src/main/java/ir/chaarfasl/back/api/core/entity/EatingPlaceRates.java similarity index 83% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/EatingPlaceRates.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/EatingPlaceRates.java index 28739c1..e830e52 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/EatingPlaceRates.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/EatingPlaceRates.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.Entity; import jakarta.persistence.Table; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Keywords.java b/src/main/java/ir/chaarfasl/back/api/core/entity/Keywords.java similarity index 81% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Keywords.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/Keywords.java index 19afe23..4f14448 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Keywords.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/Keywords.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.*; import lombok.Getter; @@ -12,7 +12,8 @@ import lombok.Setter; @Setter public class Keywords { @Id - @GeneratedValue() + // todo: best practice + @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false) private Long id; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Point.java b/src/main/java/ir/chaarfasl/back/api/core/entity/Point.java similarity index 92% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Point.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/Point.java index 765c651..49d7ddb 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Point.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/Point.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.*; import lombok.Getter; @@ -13,7 +13,8 @@ import java.time.LocalDateTime; @MappedSuperclass public class Point implements Cloneable{ @Id - @GeneratedValue() + // todo: best practice + @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID", nullable = false) protected Long id; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/PointStatus.java b/src/main/java/ir/chaarfasl/back/api/core/entity/PointStatus.java similarity index 73% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/PointStatus.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/PointStatus.java index ccae025..cde7aca 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/PointStatus.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/PointStatus.java @@ -1,9 +1,7 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -19,12 +17,24 @@ import lombok.Setter; public class PointStatus { @Id + // todo: best practice + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID", nullable = false) private Integer id; + + @Column(name = "NAME", nullable = false) private String name; + + @Column(name = "STATUS_VALUE", nullable = false) private Integer statusValue; + + @Column(name = "DESCRIPTION") private String description; + + @Column(name = "IS_ACTIVE", nullable = false) private short isActive; + /*@OneToMany(mappedBy = "pointStatus") private Set attractions;*/ diff --git a/src/main/java/ir/chaarfasl/back/api/core/entity/PointStatusRepository.java b/src/main/java/ir/chaarfasl/back/api/core/entity/PointStatusRepository.java new file mode 100644 index 0000000..20b7951 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/PointStatusRepository.java @@ -0,0 +1,7 @@ +package ir.chaarfasl.back.api.core.entity; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PointStatusRepository extends JpaRepository { + PointStatus findByNameLike(String name); +} \ No newline at end of file diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Province.java b/src/main/java/ir/chaarfasl/back/api/core/entity/Province.java similarity index 74% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Province.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/Province.java index ba0174d..dbfbf41 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Province.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/Province.java @@ -1,8 +1,6 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -20,8 +18,15 @@ public class Province { @Id + // todo: best practice + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "CODE", nullable = false) private Integer code; + + @Column(name = "NATIONAL_IDENTIFIER", nullable = false) private Integer nationalIdentifier; + + @Column(name = "NAME", nullable = false) private String name; /* @OneToMany(mappedBy = "province") diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Rates.java b/src/main/java/ir/chaarfasl/back/api/core/entity/Rates.java similarity index 89% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Rates.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/Rates.java index de4a871..14bc882 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Rates.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/Rates.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.*; import lombok.Getter; @@ -13,7 +13,8 @@ import java.time.LocalDateTime; @MappedSuperclass public class Rates implements Cloneable { @Id - @GeneratedValue() + // todo: best practice + @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false) protected Long id; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Residence.java b/src/main/java/ir/chaarfasl/back/api/core/entity/Residence.java similarity index 95% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Residence.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/Residence.java index 268780a..b3febd1 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Residence.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/Residence.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.Entity; import jakarta.persistence.Table; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/ResidenceComment.java b/src/main/java/ir/chaarfasl/back/api/core/entity/ResidenceComment.java similarity index 83% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/ResidenceComment.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/ResidenceComment.java index 885042b..ebcb6e6 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/ResidenceComment.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/ResidenceComment.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.Entity; import jakarta.persistence.Table; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/ResidenceRates.java b/src/main/java/ir/chaarfasl/back/api/core/entity/ResidenceRates.java similarity index 83% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/ResidenceRates.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/ResidenceRates.java index d551fc0..860a73f 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/ResidenceRates.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/ResidenceRates.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.Entity; import jakarta.persistence.Table; diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Search.java b/src/main/java/ir/chaarfasl/back/api/core/entity/Search.java similarity index 71% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Search.java rename to src/main/java/ir/chaarfasl/back/api/core/entity/Search.java index 239a70a..2959d57 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/entity/Search.java +++ b/src/main/java/ir/chaarfasl/back/api/core/entity/Search.java @@ -1,4 +1,4 @@ -package ir.chaarfasl.back.api.core.dataAccess.entity; +package ir.chaarfasl.back.api.core.entity; import jakarta.persistence.*; import lombok.Getter; @@ -12,14 +12,27 @@ import lombok.Setter; @Setter public class Search { @Id - @GeneratedValue() + // todo: best practice + @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false) private Long id; + + @Column(name = "KEYWORD_ID", nullable = false) private long keywordId; + + @Column(name = "POINT_ID", nullable = false) private long pointId; + + @Column(name = "POINT_TYPE", nullable = false) private String pointType; + + @Column(name = "LATITUDE", nullable = false) private Double latitude; + + @Column(name = "LONGITUDE", nullable = false) private Double longitude; + + @Column(name = "INDEX", nullable = false) private Integer index; @ManyToOne 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 index 2e9dc73..bb05307 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/mapper/AttractionMapper.java +++ b/src/main/java/ir/chaarfasl/back/api/core/mapper/AttractionMapper.java @@ -1,6 +1,6 @@ package ir.chaarfasl.back.api.core.mapper; -import ir.chaarfasl.back.api.core.dataAccess.entity.Attraction; +import ir.chaarfasl.back.api.core.entity.Attraction; import ir.chaarfasl.back.api.core.dto.AttractionDto; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/src/main/java/ir/chaarfasl/back/api/core/mapper/CommentMapper.java b/src/main/java/ir/chaarfasl/back/api/core/mapper/CommentMapper.java new file mode 100644 index 0000000..e81f7d2 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/mapper/CommentMapper.java @@ -0,0 +1,17 @@ +package ir.chaarfasl.back.api.core.mapper; + +import ir.chaarfasl.back.api.core.entity.Comment; +import ir.chaarfasl.back.api.core.dto.CommentDto; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.springframework.stereotype.Component; + + +@Mapper(componentModel = "spring") +@Component +public interface CommentMapper { + CommentMapper INSTANCE = Mappers.getMapper(CommentMapper.class); + + CommentDto commentToCommentDto(Comment comment); + Comment commentDtoToComment(CommentDto commentDto); +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/mapper/EatingPlaceMapper.java b/src/main/java/ir/chaarfasl/back/api/core/mapper/EatingPlaceMapper.java new file mode 100644 index 0000000..295d75c --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/mapper/EatingPlaceMapper.java @@ -0,0 +1,17 @@ +package ir.chaarfasl.back.api.core.mapper; + +import ir.chaarfasl.back.api.core.dto.AttractionDto; +import ir.chaarfasl.back.api.core.dto.EatingPlaceDto; +import ir.chaarfasl.back.api.core.entity.Attraction; +import ir.chaarfasl.back.api.core.entity.EatingPlace; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + + +@Mapper(componentModel = "spring") +public interface EatingPlaceMapper { + EatingPlaceMapper INSTANCE = Mappers.getMapper(EatingPlaceMapper.class); + + EatingPlaceDto eatingPlaceToEatingPlaceDto(EatingPlace eatingPlace); + EatingPlace eatingPlaceDtoToEatingPlace(EatingPlaceDto eatingPlaceDto); +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/mapper/PointEpitomeMapper.java b/src/main/java/ir/chaarfasl/back/api/core/mapper/PointEpitomeMapper.java new file mode 100644 index 0000000..408d103 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/mapper/PointEpitomeMapper.java @@ -0,0 +1,16 @@ +package ir.chaarfasl.back.api.core.mapper; + +import ir.chaarfasl.back.api.core.dto.PointDto; +import ir.chaarfasl.back.api.core.dto.PointEpitomeDto; +import ir.chaarfasl.back.api.core.entity.Point; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + + +@Mapper(componentModel = "spring") +public interface PointEpitomeMapper { + PointEpitomeMapper INSTANCE = Mappers.getMapper(PointEpitomeMapper.class); + + PointEpitomeDto pointToPointDto(Point point); + Point pointDtoToPoint(PointDto pointDto); +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/mapper/ResidenceMapper.java b/src/main/java/ir/chaarfasl/back/api/core/mapper/ResidenceMapper.java new file mode 100644 index 0000000..2f1709c --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/mapper/ResidenceMapper.java @@ -0,0 +1,17 @@ +package ir.chaarfasl.back.api.core.mapper; + +import ir.chaarfasl.back.api.core.dto.AttractionDto; +import ir.chaarfasl.back.api.core.dto.ResidenceDto; +import ir.chaarfasl.back.api.core.entity.Attraction; +import ir.chaarfasl.back.api.core.entity.Residence; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + + +@Mapper(componentModel = "spring") +public interface ResidenceMapper { + ResidenceMapper INSTANCE = Mappers.getMapper(ResidenceMapper.class); + + ResidenceDto residenceToResidenceDto(Residence residence); + Residence residenceDtoToResidence(ResidenceDto residenceDto); +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/dataAccess/repository/.gitkeep b/src/main/java/ir/chaarfasl/back/api/core/repository/.gitkeep similarity index 100% rename from src/main/java/ir/chaarfasl/back/api/core/dataAccess/repository/.gitkeep rename to src/main/java/ir/chaarfasl/back/api/core/repository/.gitkeep diff --git a/src/main/java/ir/chaarfasl/back/api/core/repository/AttractionRepository.java b/src/main/java/ir/chaarfasl/back/api/core/repository/AttractionRepository.java new file mode 100644 index 0000000..79cd16e --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/repository/AttractionRepository.java @@ -0,0 +1,13 @@ +package ir.chaarfasl.back.api.core.repository; + +import ir.chaarfasl.back.api.core.entity.Attraction; +import ir.chaarfasl.back.api.core.entity.PointStatus; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface AttractionRepository extends JpaRepository { + List findByLatitudeBetweenAndLatitudeBetweenAndPointStatus(Double lat1, Double lat2, Double long1, Double long2, PointStatus pointStatusn); +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/repository/CommentRepository.java b/src/main/java/ir/chaarfasl/back/api/core/repository/CommentRepository.java new file mode 100644 index 0000000..45f89a2 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/repository/CommentRepository.java @@ -0,0 +1,9 @@ +package ir.chaarfasl.back.api.core.repository; + +import ir.chaarfasl.back.api.core.entity.Comment; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface CommentRepository extends JpaRepository { +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/repository/CommentStatusRepository.java b/src/main/java/ir/chaarfasl/back/api/core/repository/CommentStatusRepository.java new file mode 100644 index 0000000..dea897c --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/repository/CommentStatusRepository.java @@ -0,0 +1,8 @@ +package ir.chaarfasl.back.api.core.repository; + +import ir.chaarfasl.back.api.core.entity.CommentStatus; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CommentStatusRepository extends JpaRepository { + CommentStatus findByNameLike(String name); +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/repository/EatingPlaceRepository.java b/src/main/java/ir/chaarfasl/back/api/core/repository/EatingPlaceRepository.java new file mode 100644 index 0000000..6c71d2c --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/repository/EatingPlaceRepository.java @@ -0,0 +1,13 @@ +package ir.chaarfasl.back.api.core.repository; + +import ir.chaarfasl.back.api.core.entity.EatingPlace; +import ir.chaarfasl.back.api.core.entity.PointStatus; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface EatingPlaceRepository extends JpaRepository { + List findByLatitudeBetweenAndLatitudeBetweenAndPointStatus(Double lat1, Double lat2, Double long1, Double long2, PointStatus pointStatusn); +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/repository/ResidenceRepository.java b/src/main/java/ir/chaarfasl/back/api/core/repository/ResidenceRepository.java new file mode 100644 index 0000000..c35d202 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/repository/ResidenceRepository.java @@ -0,0 +1,13 @@ +package ir.chaarfasl.back.api.core.repository; + +import ir.chaarfasl.back.api.core.entity.PointStatus; +import ir.chaarfasl.back.api.core.entity.Residence; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface ResidenceRepository extends JpaRepository { + List findByLatitudeBetweenAndLatitudeBetweenAndPointStatus(Double lat1, Double lat2, Double long1, Double long2, PointStatus pointStatusn); +} 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 index 6ef5784..f94042b 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/service/AttractionService.java +++ b/src/main/java/ir/chaarfasl/back/api/core/service/AttractionService.java @@ -1,33 +1,61 @@ 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 ir.chaarfasl.back.api.core.dto.AttractionDto; +import ir.chaarfasl.back.api.core.dto.PointEpitomeDto; +import ir.chaarfasl.back.api.core.entity.Attraction; +import ir.chaarfasl.back.api.core.entity.PointStatus; +import ir.chaarfasl.back.api.core.mapper.AttractionMapper; +import ir.chaarfasl.back.api.core.mapper.PointEpitomeMapper; +import ir.chaarfasl.back.api.core.repository.AttractionRepository; +import ir.chaarfasl.back.api.core.dto.CoordinatesDto; +import ir.chaarfasl.back.api.core.util.Constants; +import jakarta.annotation.PostConstruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; @Service public class AttractionService { private static final Logger log = LoggerFactory.getLogger(new Object() {}.getClass().getEnclosingClass()); AttractionRepository attractionRepository; + PointStatusService pointStatusService; + AttractionMapper attractionMapper; + PointEpitomeMapper pointEpitomeMapper; - public AttractionService(AttractionRepository attractionRepository) { + private PointStatus visiblePintStatus; + + public AttractionService(AttractionRepository attractionRepository, PointStatusService pointStatusService) { this.attractionRepository = attractionRepository; + this.pointStatusService = pointStatusService; } - public List getAttractions(Coordinates leftTop, Coordinates rightDown){ - List resultPoints = null; + @PostConstruct + public void loadVisiblePointStatus() { + System.out.println("Loading common data at startup..."); + this.visiblePintStatus = pointStatusService.getPointStatus(Constants.VISIBLE_POINT_STATUS); + } + + public List getAttractions(CoordinatesDto leftTop, CoordinatesDto rightDown){ + List resultPoints = null; try { - resultPoints = attractionRepository.findByLatitudeBetweenAndLatitudeBetween(leftTop.getLatitude(), rightDown.getLatitude(), leftTop.getLongitude(), rightDown.getLongitude()); + List resultEntityPoints = attractionRepository.findByLatitudeBetweenAndLatitudeBetweenAndPointStatus(leftTop.getLatitude(), rightDown.getLatitude(), + leftTop.getLongitude(), rightDown.getLongitude(), visiblePintStatus); + for (Attraction resultEntityPoint : resultEntityPoints) { + resultPoints.add(pointEpitomeMapper.pointToPointDto(resultEntityPoint)); + } } catch (Exception e){ log.error(e.getMessage()); throw e; } return resultPoints; } + + public AttractionDto getAttractionById(Long id){ + Optional attraction = attractionRepository.findById(id); + return attraction.map(attractionMapper::attractionToAttractionDto).orElse(null); + } } diff --git a/src/main/java/ir/chaarfasl/back/api/core/service/CommentService.java b/src/main/java/ir/chaarfasl/back/api/core/service/CommentService.java new file mode 100644 index 0000000..367002e --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/service/CommentService.java @@ -0,0 +1,37 @@ +package ir.chaarfasl.back.api.core.service; + +import ir.chaarfasl.back.api.core.entity.Comment; +import ir.chaarfasl.back.api.core.entity.CommentStatus; +import ir.chaarfasl.back.api.core.repository.CommentRepository; +import ir.chaarfasl.back.api.core.repository.CommentStatusRepository; +import ir.chaarfasl.back.api.core.dto.CommentDto; +import ir.chaarfasl.back.api.core.mapper.CommentMapper; +import ir.chaarfasl.back.api.core.util.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +@Service +public class CommentService { + private static final Logger log = LoggerFactory.getLogger(new Object() {}.getClass().getEnclosingClass()); + + CommentRepository commentRepository; + CommentStatusRepository commentStatusRepository; + CommentMapper commentMapper; + + public CommentService(CommentRepository commentRepository, CommentStatusRepository commentStatusRepository,CommentMapper commentMapper) { + this.commentRepository = commentRepository; + this.commentStatusRepository = commentStatusRepository; + this.commentMapper = commentMapper; + } + + public CommentDto addComment(CommentDto commentDto){ + Comment comment = commentMapper.commentDtoToComment(commentDto); + CommentStatus pendingStatus = commentStatusRepository.findByNameLike(Constants.PENDING_COMMENT_STATUS); + comment.setCommentStatus(pendingStatus); + Comment save = commentRepository.save(comment); + return commentMapper.commentToCommentDto(save); + } + + +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/service/EatingPlaceService.java b/src/main/java/ir/chaarfasl/back/api/core/service/EatingPlaceService.java new file mode 100644 index 0000000..df45fbd --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/service/EatingPlaceService.java @@ -0,0 +1,64 @@ +package ir.chaarfasl.back.api.core.service; + +import ir.chaarfasl.back.api.core.dto.AttractionDto; +import ir.chaarfasl.back.api.core.dto.CoordinatesDto; +import ir.chaarfasl.back.api.core.dto.EatingPlaceDto; +import ir.chaarfasl.back.api.core.dto.PointEpitomeDto; +import ir.chaarfasl.back.api.core.entity.Attraction; +import ir.chaarfasl.back.api.core.entity.EatingPlace; +import ir.chaarfasl.back.api.core.entity.PointStatus; +import ir.chaarfasl.back.api.core.mapper.EatingPlaceMapper; +import ir.chaarfasl.back.api.core.mapper.PointEpitomeMapper; +import ir.chaarfasl.back.api.core.repository.AttractionRepository; +import ir.chaarfasl.back.api.core.repository.EatingPlaceRepository; +import ir.chaarfasl.back.api.core.util.Constants; +import jakarta.annotation.PostConstruct; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class EatingPlaceService { + private static final Logger log = LoggerFactory.getLogger(new Object() {}.getClass().getEnclosingClass()); + + EatingPlaceRepository eatingPlaceRepository; + PointStatusService pointStatusService; + EatingPlaceMapper eatingPlaceMapper; + PointEpitomeMapper pointEpitomeMapper; + + private PointStatus visiblePintStatus; + + public EatingPlaceService(EatingPlaceRepository eatingPlaceRepository, PointStatusService pointStatusService) { + this.eatingPlaceRepository = eatingPlaceRepository; + this.pointStatusService = pointStatusService; + } + + @PostConstruct + public void loadVisiblePointStatus() { + System.out.println("Loading common data at startup..."); + this.visiblePintStatus = pointStatusService.getPointStatus(Constants.VISIBLE_POINT_STATUS); + } + + public List getEatingPlace(CoordinatesDto leftTop, CoordinatesDto rightDown){ + List resultPoints = null; + try { + List resultEntityPoints = eatingPlaceRepository.findByLatitudeBetweenAndLatitudeBetweenAndPointStatus(leftTop.getLatitude(), rightDown.getLatitude(), + leftTop.getLongitude(), rightDown.getLongitude(), visiblePintStatus); + for (EatingPlace resultEntityPoint : resultEntityPoints) { + resultPoints.add(pointEpitomeMapper.pointToPointDto(resultEntityPoint)); + } + } catch (Exception e){ + log.error(e.getMessage()); + throw e; + } + return resultPoints; + } + + public EatingPlaceDto getEatingPlaceById(Long id){ + Optional eatingPlace = eatingPlaceRepository.findById(id); + return eatingPlace.map(eatingPlaceMapper::eatingPlaceToEatingPlaceDto).orElse(null); + } +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/service/PointStatusService.java b/src/main/java/ir/chaarfasl/back/api/core/service/PointStatusService.java new file mode 100644 index 0000000..f1d8600 --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/service/PointStatusService.java @@ -0,0 +1,28 @@ +package ir.chaarfasl.back.api.core.service; + +import ir.chaarfasl.back.api.core.entity.PointStatus; +import ir.chaarfasl.back.api.core.entity.PointStatusRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +@Service +public class PointStatusService { + private static final Logger log = LoggerFactory.getLogger(new Object() {}.getClass().getEnclosingClass()); + + PointStatusRepository pointStatusRepository; + + + public PointStatusService(PointStatusRepository pointStatusRepository) { + this.pointStatusRepository = pointStatusRepository; + } + + public PointStatus getPointStatus(String name){ + try { + return pointStatusRepository.findByNameLike(name); + } catch (Exception e){ + log.error(e.getMessage()); + } + return null; + } +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/service/ResidenceService.java b/src/main/java/ir/chaarfasl/back/api/core/service/ResidenceService.java new file mode 100644 index 0000000..dc3810e --- /dev/null +++ b/src/main/java/ir/chaarfasl/back/api/core/service/ResidenceService.java @@ -0,0 +1,62 @@ +package ir.chaarfasl.back.api.core.service; + +import ir.chaarfasl.back.api.core.dto.AttractionDto; +import ir.chaarfasl.back.api.core.dto.CoordinatesDto; +import ir.chaarfasl.back.api.core.dto.PointEpitomeDto; +import ir.chaarfasl.back.api.core.dto.ResidenceDto; +import ir.chaarfasl.back.api.core.entity.PointStatus; +import ir.chaarfasl.back.api.core.entity.Residence; +import ir.chaarfasl.back.api.core.mapper.PointEpitomeMapper; +import ir.chaarfasl.back.api.core.mapper.ResidenceMapper; +import ir.chaarfasl.back.api.core.repository.ResidenceRepository; +import ir.chaarfasl.back.api.core.util.Constants; +import jakarta.annotation.PostConstruct; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class ResidenceService { + private static final Logger log = LoggerFactory.getLogger(new Object() {}.getClass().getEnclosingClass()); + + ResidenceRepository residenceRepository; + PointStatusService pointStatusService; + ResidenceMapper residenceMapper; + PointEpitomeMapper pointEpitomeMapper; + + private PointStatus visiblePintStatus; + + public ResidenceService(ResidenceRepository residenceRepository, PointStatusService pointStatusService) { + this.residenceRepository = residenceRepository; + this.pointStatusService = pointStatusService; + } + + @PostConstruct + public void loadVisiblePointStatus() { + System.out.println("Loading common data at startup..."); + this.visiblePintStatus = pointStatusService.getPointStatus(Constants.VISIBLE_POINT_STATUS); + } + + public List getResidences(CoordinatesDto leftTop, CoordinatesDto rightDown){ + List resultPoints = null; + try { + List resultEntityPoints = residenceRepository.findByLatitudeBetweenAndLatitudeBetweenAndPointStatus(leftTop.getLatitude(), rightDown.getLatitude(), + leftTop.getLongitude(), rightDown.getLongitude(), visiblePintStatus); + for (Residence resultEntityPoint : resultEntityPoints) { + resultPoints.add(pointEpitomeMapper.pointToPointDto(resultEntityPoint)); + } + } catch (Exception e){ + log.error(e.getMessage()); + throw e; + } + return resultPoints; + } + + public ResidenceDto getResidenceById(Long id){ + Optional residence = residenceRepository.findById(id); + return residence.map(residenceMapper::residenceToResidenceDto).orElse(null); + } +} diff --git a/src/main/java/ir/chaarfasl/back/api/core/util/Constants.java b/src/main/java/ir/chaarfasl/back/api/core/util/Constants.java index 2121fc1..e9d4840 100644 --- a/src/main/java/ir/chaarfasl/back/api/core/util/Constants.java +++ b/src/main/java/ir/chaarfasl/back/api/core/util/Constants.java @@ -1,4 +1,6 @@ package ir.chaarfasl.back.api.core.util; public class Constants { + public static final String PENDING_COMMENT_STATUS = "pending"; + public static final String VISIBLE_POINT_STATUS = "visible"; } diff --git a/src/test/java/ir/chaarfasl/back/api/core/AttractionControllerTest.java b/src/test/java/ir/chaarfasl/back/api/core/AttractionControllerTest.java index 5a64db3..40ec2df 100644 --- a/src/test/java/ir/chaarfasl/back/api/core/AttractionControllerTest.java +++ b/src/test/java/ir/chaarfasl/back/api/core/AttractionControllerTest.java @@ -2,7 +2,6 @@ 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;