Skip to content

Commit

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

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

public class FireStationRequest {

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

@Builder
public FireStationNearRequest(double userLon, double userLat) {
this.userLat = userLat;
this.userLon = userLon;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package seouldata.seoul_backend.domain.firestation.application.dto.response;

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

public class FireStationResponse {

@Getter
@NoArgsConstructor
public static class FireStationNearResponse {
private Long id;
private String name;
private double lon;
private double lat;

@Builder
public FireStationNearResponse(Long id, String name, double lon, double lat) {
this.id = id;
this.name = name;
this.lon = lon;
this.lat = lat;
}

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

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import seouldata.seoul_backend.common.DistanceUtils;
import seouldata.seoul_backend.domain.firestation.application.dto.request.FireStationRequest;
import seouldata.seoul_backend.domain.firestation.application.dto.response.FireStationResponse;
import seouldata.seoul_backend.domain.firestation.domain.entity.FireStation;
import seouldata.seoul_backend.domain.firestation.domain.service.FireStationQueryService;

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

@Service
@RequiredArgsConstructor
@Transactional
public class FireStationGetService {

private final FireStationQueryService fireStationQueryService;

public List<FireStationResponse.FireStationNearResponse> getFireStationNear(FireStationRequest.FireStationNearRequest fireStationNearRequest) {
// 사용자의 위치
double userLon = fireStationNearRequest.getUserLon();
double userLat = fireStationNearRequest.getUserLat();

List<FireStation> allFireStation = fireStationQueryService.findAll();

List<FireStationResponse.FireStationNearResponse> nearFireStations = new ArrayList<>();

for (FireStation fireStation : allFireStation) {
double lat = fireStation.getLat();
double lon = fireStation.getLon();

double distance = DistanceUtils.calculateDistance(userLon, userLat, lon, lat);
if(distance <= 500) {
FireStationResponse.FireStationNearResponse nearFireStation = FireStationResponse.FireStationNearResponse.builder()
.id(fireStation.getId())
.name(fireStation.getName())
.lon(fireStation.getLon())
.lat(fireStation.getLat())
.build();

nearFireStations.add(nearFireStation);
}
}

return nearFireStations;
}

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

import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import seouldata.seoul_backend.domain.firestation.domain.entity.FireStation;
import seouldata.seoul_backend.domain.firestation.domain.repository.FireStationRepository;

import java.util.List;

@Service
@RequiredArgsConstructor
@Transactional
public class FireStationQueryService {
private final FireStationRepository fireStationRepository;
public List<FireStation> findAll() {
return fireStationRepository.findAll();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package seouldata.seoul_backend.domain.firestation.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.firestation.application.dto.request.FireStationRequest;
import seouldata.seoul_backend.domain.firestation.application.dto.response.FireStationResponse;
import seouldata.seoul_backend.domain.firestation.application.service.FireStationGetService;

import java.util.List;

@RestController
@RequiredArgsConstructor
public class FireStationController {

private final FireStationGetService fireStationGetService;

@GetMapping("/api/firestation")
public ResponseEntity getFireStationNear(@RequestBody FireStationRequest.FireStationNearRequest fireStationNearRequest) {
List<FireStationResponse.FireStationNearResponse> fireStationNear = fireStationGetService.getFireStationNear(fireStationNearRequest);
return ResponseEntity.ok(fireStationNear);
}

}

0 comments on commit d82761b

Please sign in to comment.