Skip to content

Commit

Permalink
Merge pull request #50 from Team-PLAT/feat/#49/address
Browse files Browse the repository at this point in the history
[FEAT] 주소 반환 API
  • Loading branch information
dgh06175 authored Sep 7, 2024
2 parents 71cdfae + dc758a9 commit 2f5078e
Show file tree
Hide file tree
Showing 13 changed files with 128 additions and 22 deletions.
1 change: 1 addition & 0 deletions src/main/java/com/cabin/plat/config/SecurityConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
.requestMatchers("/test").authenticated()
.requestMatchers("/members/**").authenticated()
.requestMatchers("/tracks/**").authenticated()
.requestMatchers("address/**").authenticated()
.anyRequest().denyAll());

http
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.cabin.plat.domain.address.controller;

import com.cabin.plat.config.AuthMember;
import com.cabin.plat.domain.address.dto.AddressResponse;
import com.cabin.plat.domain.address.service.AddressService;
import com.cabin.plat.domain.member.entity.Member;
import com.cabin.plat.global.common.BaseResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/address")
@Tag(name = "주소 API", description = "주소, 위치 관련 API 입니다.")
public class AddressController {
private final AddressService addressService;

@Operation(summary = "역지오코딩", description = "위도 경도를 받아서 해당 위치의 주소를 반환한다.")
@GetMapping("/reverse-geocode")
public BaseResponse<AddressResponse.AddressString> getAddress(
@AuthMember Member member,
@RequestParam double latitude,
@RequestParam double longitude) {
return BaseResponse.onSuccess(addressService.getAddress(latitude, longitude));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.cabin.plat.domain.address.dto;

import lombok.*;

public class AddressResponse {

@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class AddressString {
private String address;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.cabin.plat.domain.address.mapper;

import com.cabin.plat.domain.address.dto.AddressResponse;
import org.springframework.stereotype.Component;

@Component
public class AddressMapper {
public AddressResponse.AddressString toAddressString(
String address
) {
return AddressResponse.AddressString.builder()
.address(address)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.cabin.plat.domain.address.service;

import com.cabin.plat.domain.address.dto.AddressResponse;
import org.springframework.stereotype.Service;

public interface AddressService {
AddressResponse.AddressString getAddress(double latitude, double longitude);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.cabin.plat.domain.address.service;

import com.cabin.plat.domain.address.dto.AddressResponse;
import com.cabin.plat.domain.address.dto.AddressResponse.AddressString;
import com.cabin.plat.domain.address.mapper.AddressMapper;
import com.cabin.plat.global.util.geocoding.AddressInfo;
import com.cabin.plat.global.util.geocoding.ReverseGeoCoding;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class AddressServiceImpl implements AddressService {
private final ReverseGeoCoding reverseGeoCoding;
private final AddressMapper addressMapper;

@Override
public AddressResponse.AddressString getAddress(double latitude, double longitude) {
AddressInfo addressInfo = reverseGeoCoding.getAddressInfo(latitude, longitude);
return addressMapper.toAddressString(addressInfo.toAddress());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,11 @@
import com.cabin.plat.domain.member.entity.Member;
import com.cabin.plat.domain.track.dto.TrackRequest;
import com.cabin.plat.domain.track.dto.TrackResponse;
import com.cabin.plat.domain.track.dto.TrackResponse.TrackDetail;
import com.cabin.plat.domain.track.service.TrackService;
import com.cabin.plat.global.common.BaseResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.web.bind.annotation.*;

@RestController
Expand All @@ -39,13 +35,7 @@ public BaseResponse<TrackResponse.TrackMapList> getTracksByLocation(
));
}

@Operation(summary = "트랙 디테일 조회", description = "트랙의 아이디로 트랙의 디테일한 정보를 조회합니다. "
+ "locationString : 장소 이름 (없으면 빈 문자열) "
+ "address : 주소 "
+ "imageUrl : 이미지 주소 (없으면 빈 문자열) "
+ "context: : 본문 "
+ "likeCount: 트랙의 총 좋아요 개수 "
+ "isLiked : 사용자가 좋아요를 눌렀는지 여부")
@Operation(summary = "트랙 디테일 조회", description = "트랙의 아이디로 트랙의 디테일한 정보를 조회합니다.")
@GetMapping("/{trackId}")
public BaseResponse<TrackResponse.TrackDetail> getTrackById(@AuthMember Member member, @PathVariable("trackId") Long trackId) {
return BaseResponse.onSuccess(trackService.getTrackById(member, trackId));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public static class TrackDetail {
private LocalDateTime createdAt;
private Double latitude;
private Double longitude;
private String locationString;
private String buildingName;
private String address;
private String imageUrl;
private String content;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class Location extends BaseEntity {
@Column(name = "location_id")
private Long id;

private String placeName;
private String buildingName;

@Column(nullable = false)
private String address;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public TrackResponse.TrackDetail toTrackDetail(
LocalDateTime createdAt,
Double latitude,
Double longitude,
String locationString,
String buildingName,
String address,
String imageUrl,
String content,
Expand All @@ -53,7 +53,7 @@ public TrackResponse.TrackDetail toTrackDetail(
.createdAt(createdAt)
.latitude(latitude)
.longitude(longitude)
.locationString(locationString)
.buildingName(buildingName)
.address(address)
.imageUrl(imageUrl)
.content(content)
Expand Down Expand Up @@ -96,9 +96,9 @@ public TrackLike toTrackLike(Member member, Track track) {
.build();
}

public Location toLocation(String placeName, String address, Double latitude, Double longitude) {
public Location toLocation(String buildingName, String address, Double latitude, Double longitude) {
return Location.builder()
.placeName(placeName)
.buildingName(buildingName)
.address(address)
.latitude(latitude)
.longitude(longitude)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ private TrackDetail getTrackDetail(Member member, Track track) {
track.getCreatedAt(),
track.getLocation().getLatitude(),
track.getLocation().getLongitude(),
track.getLocation().getPlaceName(),
track.getLocation().getBuildingName(),
track.getLocation().getAddress(),
track.getImageUrl(),
track.getContent(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.cabin.plat.domain.address.service;

import static org.assertj.core.api.Assertions.*;

import com.cabin.plat.domain.address.dto.AddressResponse;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

@SpringBootTest
@Transactional
class AddressServiceImplTest {

@Autowired
private AddressService addressService;

@Test
void 외부API_주소_받아오기_테스트() {
// given
double latitude = 36.014188;
double longitude = 129.325802;

AddressResponse.AddressString addressString = addressService.getAddress(latitude, longitude);
assertThat(addressString.getAddress()).isEqualTo("경상북도 포항시 남구 지곡동");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ private List<Track> createTestTracks(List<Member> members, List<Location> locati
// Then
var retrievedLocation = locationRepository.findById(location.getId());
assertThat(retrievedLocation.isPresent()).isTrue();
assertThat(location.getPlaceName()).isEqualTo(retrievedLocation.get().getPlaceName());
assertThat(location.getBuildingName()).isEqualTo(retrievedLocation.get().getBuildingName());
assertThat(location.getAddress()).isEqualTo(retrievedLocation.get().getAddress());
assertThat(location.getLatitude()).isEqualTo(retrievedLocation.get().getLatitude());
assertThat(location.getLongitude()).isEqualTo(retrievedLocation.get().getLongitude());
Expand Down Expand Up @@ -168,7 +168,7 @@ private List<Track> createTestTracks(List<Member> members, List<Location> locati
.isrc("isrc1")
.latitude(36.017062)
.longitude(129.321993)
.locationString("Dormitory 16 (DICE)")
.buildingName("Dormitory 16 (DICE)")
.address("경상북도 포항시 남구 지곡동 287")
.imageUrl("https://testimage1.com")
.content("기숙사에서 한곡")
Expand All @@ -185,7 +185,7 @@ private List<Track> createTestTracks(List<Member> members, List<Location> locati
assertThat(trackDetail.getIsrc()).isEqualTo("isrc1");
assertThat(trackDetail.getLatitude()).isEqualTo(36.017062);
assertThat(trackDetail.getLongitude()).isEqualTo(129.321993);
assertThat(trackDetail.getLocationString()).isEqualTo("Dormitory 16 (DICE)");
assertThat(trackDetail.getBuildingName()).isEqualTo("Dormitory 16 (DICE)");
assertThat(trackDetail.getAddress()).isEqualTo("경상북도 포항시 남구 지곡동 287");
assertThat(trackDetail.getImageUrl()).isEqualTo("https://testimage1.com");
assertThat(trackDetail.getContent()).isEqualTo("기숙사에서 한곡");
Expand Down Expand Up @@ -281,7 +281,7 @@ void setUp() {
assertThat(trackDetail.getLatitude()).isEqualTo(36.014188);
assertThat(trackDetail.getLongitude()).isEqualTo(129.325802);
assertThat(trackDetail.getAddress()).isEqualTo("경상북도 포항시 남구 지곡동");
assertThat(trackDetail.getLocationString()).isEqualTo("포항공대제1융합관");
assertThat(trackDetail.getBuildingName()).isEqualTo("포항공대제1융합관");
assertThat(trackDetail.getLikeCount()).isZero();
assertThat(trackDetail.getIsLiked()).isFalse();
assertThat(trackDetail.getMember().getMemberId()).isEqualTo(member.getId());
Expand Down

0 comments on commit 2f5078e

Please sign in to comment.