Skip to content

Commit

Permalink
feat: 500m 내의 SafetyFacility 정보 반환 api 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
lovee9523 committed Apr 8, 2024
1 parent b306939 commit 398e19b
Show file tree
Hide file tree
Showing 5 changed files with 160 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package seouldata.seoul_backend.domain.safteyfacility.application.dto.request;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

public class SafetyFacilityRequest {

@Getter
@NoArgsConstructor
public static class SafetyFacilityNearRequest {
private double userLon;
private double userLat;

@Builder
public SafetyFacilityNearRequest(double userLon, double userLat) {
this.userLat = userLat;
this.userLon = userLon;
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package seouldata.seoul_backend.domain.safteyfacility.application.dto.response;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

public class SafetyFacilityResponse {

@Getter
@NoArgsConstructor
public static class SafetyFacilityNearResponse{
private String city;
private String dong;
private String road;
private Long number;
private String lon;
private double lat;
private String name;

@Builder
public SafetyFacilityNearResponse(String city, String dong, String road, Long number,
String lon, double lat, String name) {
this.city = city;
this.dong = dong;
this.road = road;
this.number = number;
this.lon = lon;
this.lat = lat;
this.name = name;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package seouldata.seoul_backend.domain.safteyfacility.application.service;

import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import seouldata.seoul_backend.common.DistanceUtils;
import seouldata.seoul_backend.domain.safteyfacility.application.dto.request.SafetyFacilityRequest;
import seouldata.seoul_backend.domain.safteyfacility.application.dto.response.SafetyFacilityResponse;
import seouldata.seoul_backend.domain.safteyfacility.domain.entity.SafetyFacility;
import seouldata.seoul_backend.domain.safteyfacility.domain.entity.SafetyFacilityId;
import seouldata.seoul_backend.domain.safteyfacility.domain.service.SafetyFacilityQueryService;

import java.util.ArrayList;
import java.util.List;

@Service
@RequiredArgsConstructor
@Transactional
public class SafetyFacilityGetService {

private final SafetyFacilityQueryService safetyFacilityQueryService;

public List<SafetyFacilityResponse.SafetyFacilityNearResponse> getSafetyFacilityNear(SafetyFacilityRequest.SafetyFacilityNearRequest safetyFacilityNearRequest) {
// 사용자 현재 위치
double userLon = safetyFacilityNearRequest.getUserLon();
double userLat = safetyFacilityNearRequest.getUserLat();

List<SafetyFacility> allSafetyFacility = safetyFacilityQueryService.findAll();

List<SafetyFacilityResponse.SafetyFacilityNearResponse> nearSafetyFacilities = new ArrayList<>();

for (SafetyFacility safetyFacility : allSafetyFacility) {
double lat = safetyFacility.getId().getLat();
String lonStr = safetyFacility.getId().getLon().replaceAll("[^0-9\\.]", "");
Double lon = Double.valueOf(lonStr);

double distance = DistanceUtils.calculateDistance(userLon, userLat, lon, lat);
if(distance <= 500) {
SafetyFacilityResponse.SafetyFacilityNearResponse nearSafetyFacility = SafetyFacilityResponse.SafetyFacilityNearResponse.builder()
.city(safetyFacility.getCity())
.dong(safetyFacility.getDong())
.number(safetyFacility.getNumber())
.road(safetyFacility.getRoad())
.name(safetyFacility.getId().getName())
.lat(safetyFacility.getId().getLat())
.lon(safetyFacility.getId().getLon())
.build();

nearSafetyFacilities.add(nearSafetyFacility);
}

}

return nearSafetyFacilities;

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package seouldata.seoul_backend.domain.safteyfacility.domain.service;

import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import seouldata.seoul_backend.domain.safteyfacility.domain.entity.SafetyFacility;
import seouldata.seoul_backend.domain.safteyfacility.domain.repository.SafetyFacilityRepository;

import java.util.List;

@Service
@RequiredArgsConstructor
@Transactional
public class SafetyFacilityQueryService {

private final SafetyFacilityRepository safetyFacilityRepository;

public List<SafetyFacility> findAll() {
return safetyFacilityRepository.findAll();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package seouldata.seoul_backend.domain.safteyfacility.presentation;

import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import seouldata.seoul_backend.domain.safteyfacility.application.dto.request.SafetyFacilityRequest;
import seouldata.seoul_backend.domain.safteyfacility.application.dto.response.SafetyFacilityResponse;
import seouldata.seoul_backend.domain.safteyfacility.application.service.SafetyFacilityGetService;

import java.util.List;

@RestController
@RequiredArgsConstructor
public class SafetyFacilityController {

private final SafetyFacilityGetService safetyFacilityGetService;

@GetMapping("/api/safetyfacilities")
public ResponseEntity getSafetyFacilityNear(@RequestBody SafetyFacilityRequest.SafetyFacilityNearRequest safetyFacilityNearRequest) {
List<SafetyFacilityResponse.SafetyFacilityNearResponse> safetyFacilityNear = safetyFacilityGetService.getSafetyFacilityNear(safetyFacilityNearRequest);
return ResponseEntity.ok(safetyFacilityNear);
}

}

0 comments on commit 398e19b

Please sign in to comment.